我之前写了一些关于心理学实验编程或者统计分析的教程,这是因为我当初自学这些东西的时候也是参考了很多网上的资料,这些资料都是前人无私分享的,所以我觉得有必要分享我所学到的、特别是在中文网站缺少的心理学实验编程/统计分析教程,同时我自己在整理这些笔记的过程中也会加深对知识的理解,所以这是一个双赢的过程。
不过,我接下来大概不会更新了。一方面我想要在学习工作之余有更多时间做一些无关学术的、我自己喜欢的事情,另一方面(这也是最重要的原因),其实现在类似ChatGPT这样的聊天AI已经可以一定程度上辅助大家学习并完成实验编程和统计分析。
我在这里给大家举了一些例子,作为抛砖引玉。这些方法应该也适用于中文聊天AI,目前我还没试过,大家可以自己去试试。
本文包括如何使用聊天AI协助你完成:
- 数据分析 & 实验程序编程
- 学术写作 & 文献阅读
- 干点杂活
- 偷偷摸鱼❌(培养创造力✅)
1 数据分析 & 实验程序编程
1.1 一般步骤
因为我最近主要是写数据分析的代码,没有写实验程序,所以这一部分主要举一些关于数据分析的例子。至于实验程序,其实基本的步骤是一样的。
一般步骤
- 描述先前知识;
- 描述你的问题情境以及你期望的结果;
- 让AI把代码给你;
- 检查代码是否无误并继续完善。
Tips
- (个人建议,至少对于ChatGPT而言)尽量用英语来描述你的问题;
- 可以按照自己的需要多建立几个聊天窗口(左上角的+new chat),例如一个窗口是关于数据分析的,另一个是关于学术写作的,还有一个是摸鱼用的,等等;
- 在描述问题情境时,如果你知道如何去解决这个问题,只需要AI将代码写好给到你,那么你的描述最好具有很强的可操作性(例如输入的参数是什么,期望的结果是什么,一步一步地描述);
- 如果代码报错了,可以把报错信息返回给AI然后让它改进;
- AI有时候会编不存在的function给你,这时候你可以提醒它,然后看看它会不会把正确的代码给到你,不过有时候它绕来绕去就是写不对,这时候就需要自己写,把它不会写的部分写好后可以继续让它完善剩余的部分;
- AI写出来的代码不一定是准确的,需要我们自行把关。例如我之前需要做的一个分析涉及到随机取值,此时一般需要设置一个固定的seed以确保结果是可重复的,但AI写的代码并没有设置seed。一个正确的态度可能是,你自己其实就相当于一个导师,AI相当于你指导的学生,你应该在自己对某个事情有所了解(甚至非常精通)的情况下指导AI完成这件事情,如果你对某个事情不是非常了解,那你就需要在AI给出解决方案后让它详细解释它是怎么做的。
1.2 例1 一个关于数据分析的简单例子
例如,我们想让AI写一段用于做线性混合模型的代码。我们可以根据上述的步骤写prompt。如下。
你可能已经忘了我在上面提到的一般步骤,没关系,让我们结合这个例子一起回顾一下:
一般步骤
- 描述先前知识(我们想用lmerTest来做分析,所以需要特地说明一下,否则AI可能就会用另外的R包);
- 描述你的问题情境以及你期望的结果(第一段就是描述我们有什么,想做什么,然后我们把具体的步骤以bullet points的方式列出);
- 让AI把代码给你(也就是第一段末尾的“Please give me the code”,不过有时候你不需要说这个,AI也会把代码给到你,这取决于你在prompt中是否提及了涉及编程的内容。至于“please”,我建议无论任何时候都保持礼貌的习惯,因为有的社交场合需要快速的反应,这时候我们往往会表现出下意识的行为,而保持良好的行为习惯可以避免你在关键场合翻车);
以下是AI的回答。
我们可以发现,AI在写构建模型的代码时,把变量名写成了“fixed_factors_1”等等,这是因为我们没有告诉它具体的变量名称,这个没关系,我们可以自己稍后再做修改。但一个明显的问题是,AI错误地理解了关于reference level的表述(不过,我一开始写成了referent level,它很好心地帮我把typo改过来了),我们可以指出这个问题并让AI改进。
回顾一下我们这一步在做什么:
一般步骤
- 检查代码是否无误并继续完善(reference level的代码写错了,需要改过来,改好之后我们可以继续检查代码的其他部分)。
于是我们说明情况,接着AI把改好的代码给到我们(如下,比较长,只截图了一部分)。
接着,我发现AI在构建模型时,公式中关于指定随机因子的部分和我之前了解的不太一样。不过我自己其实对这一块也不是很清楚,于是我询问了一下,AI做出了详细的解释(见下图)。我们接下来可以检查数据、查阅文献,进一步改进我们的分析代码,大概的流程就是这样。
1.3 例2 快速检索你需要的代码
相信上文的例子可以帮到大家快速理解如何使用AI辅助数据分析工作,接下来再举几个例子帮大家加深理解、扩展思路。
因为我比较懒,电脑上的各种文件都很少整理,所以像是需要做某个分析的时候,虽然我知道怎么做,但是具体的代码不一定能很快找到。如果是很常见的分析代码,其实可以让AI把代码给到你。例如这里我想用R语言给Welch校正的方差分析。
AI给出了做ANOVA的代码,见下图,但是好像没有做校正。这是因为我这次比较偷懒,没有在一开始描述相关的先前知识,也没有说明具体的步骤。
补充一下问题描述,让AI用car这个R包中的Anova函数来写这一段代码。
可以发现修改后的代码设置了white.adjust = TRUE
,所以是做了校正的。AI还给了一个模拟的数据,很贴心了。
1.4 例3 改进代码
例如,我需要写一段用于制作统计表格的代码,其中,我需要将原始的p值保留3位小数点,并且p<0.001时将原始值改成“< 0.001”。我已经写了一段代码并希望AI帮我简化(我这里的写法有点像是Python的思路,我一般用Python就是写一堆if,但我知道R会有更方便的写法)。
接着,我想要把显著的p值用星号标记,我简单地描述了一下p<0.05时的情况(末尾加一个星号)。可以发现AI把上文的代码也包括进来了。
然后我继续说p<0.01末尾加两个星号,AI把修改后的代码给到我,并且很聪明地自己把p<0.001的末尾加了三个星号,已经学会举一反三了。
2 学术写作 & 文献阅读
关于学术写作,我们可以:
- 自己写,然后让AI帮忙proofreading;
- 询问关于用词、语法或某个表述的建议,然后自己写。
你应该发现我在这里强调了“自己写”。请不要让AI帮你写作。
2.1 一个简单的例子
随便举个例子,我们可以让AI帮我们检查文字。我在这里写了一个句子,出于演示的目的,我故意写了一些错别字和语法错误。AI则返回了改好的句子并说明出错的地方。不过我故意写错“essential”,它并没有告诉我这个单词写错,而是自己改好了。
2.2 另一个简单的例子
关于文献阅读,如果你遇到难以理解的内容,也可以让AI帮忙rephrase。
2.3 发挥你的创造力
大家写代码的时候都知道可以写function并调用,其实和AI聊天也是一样的,如果你不想每次都重复同样的prompt,可以直接写一个fucntion让它记住并在之后调用。
例如,在学术写作中容易遇到的一个问题是,当我们描述类似“实验组的成绩显著更好”这样的结果时,可能会忘了说这里的“更好”是相对于什么而言。这涉及到表述的准确性,毕竟可能是实验组比控制组的表现更好,也可能是实验组在后测的表现比前测更好,所以需要解释清楚。我们可以让AI记住一个function,叫check_compare,来帮我们检查这个问题。
现在我们来调用一下,于是AI就帮我们把内容改好了。
类似的,我们可以写一个function叫check_grammar,每次输入prompt的时候都带上这个function,让AI在回答问题的同时帮我们检查prompt的语法并给予反馈,这可以锻炼我们的英语写作能力。
3 干点杂活
你还可以让AI做一些机械性的工作。例如我之前写的一个数据分析教程需要给出一个矩阵作为示例数据。但是我手上只有一个下三角矩阵(triangle matrix),而我需要的是全矩阵(full matrix)。正常情况下,需要在Excel中或者编程工具中转换矩阵。但是现在我们可以偷懒让AI来帮我们做,如下。
可以看到AI把全矩阵一行一行地敲出来了,泪目。
不过转换的结果和我的目标还有一点小出入。没关系,我们可以继续向AI解释,让它把准确的结果给到我们。
4 偷偷摸鱼
AI还可以干很多事情,例如和你玩聊天游戏,像是DND跑团什么的。我这里玩了一个“猜猜我在想谁”的游戏,就是我心里想一个名人,然后其他玩家用一般疑问句来提问关于这个人的问题,我用“是”、“否”来回答,看看其他玩家能不能猜到我在想谁。不过我用的ChatGPT是3.5版本,好像还是不够聪明,而且比较离谱的是,它只猜了几次就自己选择放弃了……
另外我还试了一下狼人杀(反正是摸鱼,就用中文写好了)。
没想到AI一边进行模拟,一边还顺便写了一段代码给我……
AI一开始忘记说明我的身份,直接推进到发言了,而且忘了上警(不过这也是因为我一开始没有详细说明规则)。我提醒之后,AI反手给我发了一个民(可能是考虑到我第一个晚上啥也没干,它自己把坑给填上了)。
然后AI转头就忘了我是几号玩家(感觉3.5版本的工作记忆还是不太够),模拟的发言极其敷衍,发言后的投票环节也忘了……有条件的小伙伴可以用4.0甚至之后的版本自己尝试一下,并且最好在开始前详细描述游戏规则。