ChatGPT-4o 就像一个不太遵循指示的研究生,但它能够大部分正确地解释它在单变量统计中得到的结果。
在过去的几个星期里,我一直在测试ChatGPT-4o进行生物统计学分析和解释的能力,通过在我在东华盛顿大学研究生生物统计课程中的作业。这些作业范围从探索性数据分析到线性回归,广义线性模型和广义加性模型以及线性混合效应模型。完成这些作业后,我的学生们会参加期中考试,展示他们在R中分析数据集并解释分析结果的能力。这周,我决定让ChatGPT-4o参加这个期中考试,以查看它与我的学生相比表现如何。
期中考试本身是一项庞大的任务,涵盖了我们以前所做过的大部分内容(除了广义加性模型),使用了新的数据集,我会相当具体地告诉学生们如何处理数据,并提出需要他们理解和解释结果,并做出明智的判断选择哪种模型,并解释选择的理由的问题。另一种格式是向他们展示一个数据集和一组科学问题,并让他们选择适当的分析方法来尝试回答这些科学问题。然而,我认为大多数学生(甚至是我研究生级别的生物统计课程中)都没有必要的经验水平来正确地做到这一点。
我在期中考试中使用的数据集实际上是我一位同事Rebecca Brown博士在北卡罗来纳大学教堂山分校攻读博士学位期间收集的植物群落数据集。这个数据集的每一行代表一个采样样方,列代表着在样方中发现的个体植物物种数量以及相同样方的环境变量。这个数据集实际上没有发表过,除了她的论文,这就更加重要,我要征得她的许可才能将数据集上传到ChatGPT-4o中用于这次期中考试。起初,我以为这意味着数据集将成为公有领域,或者将永远用于进一步训练ChatGPT-4o,但我了解到情况并非如此。上传到ChatGPT-4o的数据集仅在会话中保留,不会用于训练,也不会对其他用户或者同一用户的不同会话变得可用。我还可以在不再需要时从服务器上删除数据集。在这些条件下,Brown博士慷慨地允许我上传数据集进行测试目的。
我遇到的第一个问题是将数据集正确上传到ChatGPT-4o。原始数据集是一个分隔的 .txt 文件,我理论上可以上传,但是ChatGPT-4o/Python在正确读取格式方面遇到了困难。这很可能是由于特定列(例如示例 ID)本身包含值中的空格,这使得一切都混乱了。经过几次尝试,我的解决方案是使用 read.table() 命令将该数据集导入到 R 中,这没有问题,并将其导出为 .csv 文件,这样ChatGPT-4o/Python就可以轻松解析。
我首先注意到解析问题的原因是因为我尝试将一个特定的环境变量geom2转换为一个分类变量。这在R中非常重要,因为这个变量的水平是数字(1到6之间的数字,排除5)。然而,这些数字代表河岸景观的不同地貌特征,比如洪泛平原和台地-因此它们是分类变量的水平,只是以数字编码。如果没有明确指定这些不是实际数字,R(我怀疑Python也是如此)会将这个分类变量视为数值,这会导致各种问题(比如运行线性回归而不是方差分析)。当我告诉ChatGPT-4o在读取分隔数据后进行此转换时,它没有找到这个特定列,这表明存在一些问题。虽然可以要求ChatGPT-4o/Python打印数据集的前几行,类似于R中的head()命令,但这些是缩写的(例如仅显示前14列)并且是纯文本,除非明确要求制作表格。然后,您可以发现文件的解析不正确,导致只有一列,在提示时,ChatGPT-4o能够正确地将数据读入为制表符分隔。
在转换后,我要求学生和ChatGPT4-o创建基于地貌形态(“geom2”列)的植物总数(“Total”列)和特定植物物种(Carpinus caroliniana,“CARPCAR”列)的箱线图,并要求他们评估箱线图中在地貌形态之间植物数量的潜在差异。ChatGPT-4o正确地创建了箱线图,与R相同的结果,只有一些颜色上的风格选择不同。然而,在解释图表时却没有做出明确表态。课堂上的学生通常会详细说明哪个组可能与哪个组不同,而ChatGPT-4o只是说明组之间有变化,但没有具体说明,并且正确建议进行正式的统计检验来确定组之间的差异。然后,这些箱线图后面跟着克利夫兰点图,正确制作了,ChatGPT-4o也正确解释它们,显示出与箱线图相似的趋势。接下来,我要求学生和ChatGPT-4o创建每块土地上的植物总数以及Carpinus caroliniana植物数量的直方图,并评估这些变量是否呈正态分布。ChatGPT-4o正确地创建了直方图,但建议这两个变量都不是正态分布的。我对此持不同意见,我认为植物的总数呈正态分布,大多数学生也同意我的观点(您可以自行决定):
接下来,我让ChatGPT-4o(和学生们)运行一个简单的单因素方差分析,以植物总数作为响应变量,地貌作为唯一的预测变量。ChatGPT-4o/Python能够正确地运行分析,并提供与R完全相同的摘要统计信息,绝对AIC值通常相差2个单位。生成的效果图看起来与R中的相似,尽管我在Python代码中注意到使用了Wald近似值。这让人感到惊讶,因为Python中的“statsmodels”模块中的“get_prediction”命令可以轻松复制R正在做的内容,但ChatGPT-4o决定不这样做。以下是展示ChatGPT-4o实际让Python执行的部分内容:
# One-way ANOVA with Total as response variable and geom2 as predictor
model = ols('Total ~ C(geom2)', data=data).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
# Effects plot showing estimated mean total number of plants with 95% confidence intervals
plt.figure(figsize=(10, 6))
means = data.groupby('geom2')['Total'].mean()
errors = data.groupby('geom2')['Total'].sem() * 1.96 # 95% CI
plt.errorbar(means.index, means, yerr=errors, fmt='o', capsize=5)
触发后,ChatGPT-4o/Python经过几次不成功的尝试,最终能够生成正确的表格,显示图基的明显差异,其中包括检验每种地貌之间植物总数无配对差异的空假设的p值。当被问及哪些组之间存在显著差异时,ChatGPT-4o能够突出显示在表格中排名靠前的第1组和第6组,但需要一个后续问题才能认识到第2组和第6组也有显著差异(尽管该差异的p值更显著)。
当要求为上述模型生成诊断图时,ChatGPT-4o/Python正确地创建了残差 vs 拟合图和比例-位置图,但创建了扭曲的QQ图,点是垂直排列而不是沿对角线排列。残差 vs 杠杆力图是正确的,但与在R中生成的图相比,被翻转,杠杆力在y轴上。ChatGPT-4o正确地解释了自己不正确的QQ图,显示偏离对角线,指示潜在的非正态性。在R中生成的正确的诊断图显示了一个非常良好的QQ图,与对角线的偏差很小,大多数学生正确地解释为对ANOVA假设的违反不足证据。
当要求ChatGPT-4o运行以Carpinus caroliniana数量为响应变量、地貌为唯一预测变量的简单单变量ANOVA时,结果通常是相似的。ChatGPT-4o/Python生成的摘要统计数据是正确的,AIC值通常偏离2个绝对单位,图基HSD表是正确的,效应图与R中制作的图类似,但使用Wald逼近。ChatGPT-4o正确地指出了1组和2组是唯一在统计上显著不同的组。有趣的是,它没有提到2组和6组在边缘上显著不同,而许多学生提到了这一点,尽管它的p值为0.0523。为该模型生成的诊断图表也相似,与R生成的图表相比,QQ图表变形,残差与杠杆关系图旋转。ChatGPT-4o正确地解释了它制作的图表,包括QQ图上残差的非正态性迹象,这与我(以及大多数学生)对R中制作的QQ图表的评估一致。然而,这种一致是基于一个绘制不正确的QQ图表而达成的,这使得它值得怀疑。
接下来,我要求ChatGPT-4o(和学生们)使用总植物数量作为响应变量,地貌作为唯一的预测变量进行Poisson回归。ChatGPT-4o/Python能够正确拟合模型,总结统计数据与R中提供的数据相同。ChatGPT-4o/Python在创建一个效果图方面遇到了困难,类似于R中的plot.effects()命令创建的图。相反,它生成了一个显示基线水平(地貌1)与所有其他水平之间估计差异及95%置信区间的图。这可以说是对效果图的不同定义。当要求在基线水平显示估计均值时,ChatGPT-4o/Python添加了,但没有改变其他水平以显示估计均值。当要求复制R的操作时,它仍无法复制R的输出。这让人感到特别恼火,因为它一直在标记图并声称实际上显示的是效果图。
当询问根据植物总数,哪些地貌群体在这个模型中彼此显着不同时,它正确地解释了总结统计数据,显示群体2、4和6与群体1不同,但与群体3不同。 它没有做所有成对比较,但我也没有要求学生做同样的事情,因为我没有要求他们使用emmeans()包,所以这是相似的。 ChatGPT-4o正确计算了这个泊松模型的AIC值(与2个单位的绝对差异),并创建了具有相同问题的诊断图。 当要求比较这个模型与相同响应变量上的ANOVA模型时,它正确地判断ANOVA模型基于更低的AIC值为更好的拟合。
当我要求ChatGPT-4o运行泊松回归时,结果再次基本相似,以Carpinus caroliniana数量作为响应变量,地貌学作为唯一的预测变量。摘要统计数据是正确的,甚至AIC值与R中获得的值相同。ChatGPT-4o能够正确地说明哪些地貌学组与基准组显著不同。然而,“效果”图产生了与上一个模型相同的问题。
在该会话中出现的最大问题是当我要求ChatGPT-4o将ANOVA模型与泊松回归模型进行比较,用于对Carpinus caroliniana植物的总数进行决策。它为泊松模型创建了诊断图,解决了先前问题,并诊断出了过度离散。基于此,以及ANOVA模型较低的AIC值,尽管明显违背了正态性假设,但它仍建议ANOVA作为正确的模型,这正是该模型所诊断的。它没有记住响应变量具有高度倾斜的分布。虽然一些学生在期中考试中也犯过同样的错误,但这仍然令人失望。
接下来,我要求ChatGPT-4o创建一个以植物总数为响应变量,地貌和密度及其交互作用为预测变量的双向因子方差分析。起初这让我感到困惑,因为密度不是一个分类变量,而是一个连续的数值变量,我不得不澄清这一点才能继续进行。即使在此之后,尽管ChatGPT-4o/Python能够复制地貌(不显著)和交互项(显著)的摘要统计信息,但在密度变量上报告的F值和p值与R中的不同。即使将OLS公式中的预测变量顺序倒转以与R中的相同,结果也没有改变。将学生在R中使用的默认Type II转换为Type I方差分析,并没有改善这些统计数据,只是还改变了地貌的摘要统计信息。经过一番努力,我发现Python总是先将分类变量放在顺序方差分析的结果中,没有一个简单的方法可以更改,而R允许用户先放入数值变量。就我所知,没有办法精确地复制R中的摘要统计数据。因此,尽管存在这些问题,与学生在R中发现的相比,ChatGPT-4o对这个变量的显著性得出了不同的定性结论。尽管存在这些问题,ChatGPT-4o/Python能够复制在R中创建的95%置信区间。它还正确计算了这个模型的R平方,并正确解释它是由预测变量及其交互作用中的变化所解释的响应变量方差的比例。它还正确计算了这个模型的AIC值(与R相差通常为2个绝对单位),并正确地得出结论,即应该将密度变量包含在模型中,考虑到这个模型的AIC值较低,尽管它并未发现其主效应显著。
当我要求ChatGPT-4o运行以Carpinus caroliniana植物数量为响应变量和相同预测变量的双向因子方差分析时,结果再次基本相似。总结统计仍然正确复制了分类变量和交互项(均为非显著)的内容,但未能正确复制在R中顺序类型I方差分析中首先出现的连续变量。然而,这并没有导致定性不同的结论,因为密度在任何一个平台上都没有显著的主效应。ChatGPT-4o/Python能够正确复制效果图,并正确计算和解释模型的R平方。当要求比较这个模型与仅包含地形的简单方差分析模型时,它正确计算了模型的AIC(除了2个单位的差异)并正确建议了简单模型,因为更复杂模型的AIC改善不到1个单位,且没有显著的主效应和交互项。
接下来,我让ChatGPT-4o/Python(以及学生们)运行了一个混合效应模型,其中植物总数作为响应变量,密度作为固定效应,地貌作为随机截距。ChatGPT-4o/Python可以运行混合效应模型,并复制模型的系数,但没有固定效应的标准误差和p值相同(ChatGPT-4o/Python中为p=0.014,而R中为p=0.0091)。我还注意到,R中的摘要统计信息列出了t值,而ChatGPT-4o/Python中的同一表格列出了z分数。这是因为据我所知,Python中的“mixedlm”函数使用正态近似进行假设检验,而R中的“lme”函数不是。尽管这似乎是一个小差异,但对于小数据集和接近显著性水平的数据,可能会导致定性差异。ChatGPT-4o建议使用Pymer4软件包在Python中使用R,但服务器上没有安装该软件包。ChatGPT-4o/Python无法对固定效应项的显著性进行空假设检验(就像R中的anova.lme()命令一样),因为这些测试不支持在R中的混合效应模型——但它能够根据摘要统计信息正确得出密度对植物总数有显著影响的结论。一如以往,尽管它能够正确复制估计的最佳拟合线,但无法正确复制密度固定效应的95%置信区间,尽管它提供了一个声称是正确的图表。不幸的是,该图表使用了瓦尔德近似,没有将随机效应纳入到预测中,而在Python中的混合效应模型中显然不可能。
ChatGPT-4o/Python正确计算了组内相关系数,并正确解释为响应变量方差的一部分由不同地貌之间的差异解释。它无法获取混合效应模型的AIC值,正如我们之前看到的,Python在获取混合效应模型的似然值方面存在问题,AIC值将建立在此上。然而,ChatGPT-4o能够正确地论证何时选择基于分析需求的完全因子二因素方差分析或混合效应模型。
当我要求ChatGPT-4o/Python拟合一个混合效应模型,以Carpinus caroliniana植物数量作为响应变量,再次使用密度作为唯一的固定预测变量,而地貌作为随机截距时,结果通常是类似的。模型的系数再次与在R中获得的系数相同,但标准误差或p值不同,因为使用了正态近似。由于Wald近似和在R中未考虑随机效应,效果图再次能够正确复制最佳拟合线,但无法复制95%的置信区间。
ChatGPT-4o/Python再次能夠正確地得出結論,即密度對這種特定植物的數量沒有顯著影響,這是基於摘要統計數據,盡管它無法測試模型項的重要性。它還能夠正確計算並解釋植物數量變化中地形差異所解釋的內類相關係數。它再次無法為模型獲得AIC值,但能夠根據建模需求正確辯明全因子二因子方差分析和混合模型之間的選擇。然而,它沒有強調兩個模型都是不正確的,因為兩者都依賴於正態性假設,而我們知道這是違反的,一些學生確實強調了這一點。在討論一些在R中生成的輸出與之間的差異並試圖找出原因後,我要求它刪除了數據集,它也執行了。
ChatGPT-4o/Python 在期中考试中表现如何?我认为它与部分学生水平相当。它成功运行了我请求的所有模型,但在诊断模型和解释结果方面遇到了一些困难。它制作了所有的探索性数据可视化,但无法识别植物总数是否正态分布。它一般难以复制准确的95%置信区间效果图,这是因为使用了Wald或正态近似,没有包含随机效应,或者对效果图应该展示的内容存在简单的误解。一些问题可能可以通过迭代反馈来解决,但这不会公平地与学生进行比较。ChatGPT-4o/Python 在创建准确的诊断图方面遇到了真正的困难,尤其是QQ图,这导致了错误的结论(如检测到正态性的违反)。ChatGPT-4o 在关于以正态性响应变量为基础选择ANOVA模型而不是Poisson回归的讨论中犯了规范性错误,仅基于较低的AIC值,忽视了此响应变量正态性假设的违反。这是非常有问题的,不是因为学生会犯这个错误,而是因为它突显了传播基本误解的潜力。再次,在被质疑时,ChatGPT-4o 承认了自己的错误,但对于没有统计经验的用户可能不会发生这种情况。ChatGPT-4o 还存在其他问题,比如无法复制 R 中按预期顺序的 Type I 顺序ANOVA 的精确结果,导致不同的定性结论。它也无法复制包含随机截距的混合效应模型的精确标准误差和p值,由于无法包含随机效应,无法为效果图生成准确的95%置信带,无法测试固定模型术语的显著性,或者为这些模型获得似然度或AIC值。然而,总体而言,ChatGPT-4o 得出了正确的定性结论,提供了正确的汇总统计数据和ICC和AIC值(在可能的情况下),正确识别了显著不同的群组,正确比较了模型,正确解释了不同模型,并大多从(有时不正确的)诊断图中得出了正确的结论。
如果ChatGPT-4o是我的课程中的一名研究生,根据以上情况,它在这个作业中可能会得到40分中的约30分。这比我的课堂上实际学生在这个期中考试中获得的35分左右的平均分要低一些,但并不罕见。大多数错误要么是因为Python无法完全复制R的方法,要么是因为ChatGPT-4o编写的Python代码可以做到,但与R中的操作不匹配。其中有一些错误是ChatGPT-4o本身实际上犯了规范性错误,比如仅仅基于AIC选择ANOVA而不是Poisson,或者没有在直方图上识别正态分布。ChatGPT-4o让我想起了偶尔会完全搞砸作业,不完全按照指示做,产生错误结果的学生,但随后能够在很大程度上正确地解释这些错误分析的结果。他们确实表现出对概念的理解,尽管有限,这还不足以完全正确地完成作业,但是他们也在正确的方向上。我通常不是根据他们本应该得到的确切值来评分这些作业,而是根据他们得到的结果的解释,并解释他们犯了什么错误,以及为什么他们的结果与同龄人不同。如果我们按照这个类比,我们可以希望ChatGPT-4o/Python能够正确地分析和解释我们的数据,如果我们要求它做的事情是:(1)在Python中可以正确执行;并且(2)我们要确保ChatGPT-4o编写的Python代码实际上是正确的复制R中的操作方式。然后,除了一些规范性错误,我们应该相对有信心认为ChatGPT-4o能够得出正确的结果,并得出适当的结论。一些规范性错误,比如违反假设的程度,涉及图像识别,高度主观,这似乎对生成式人工智能目前构成特殊问题。基于这一切,我相信我可以推荐在相对简单的单变量统计中使用ChatGPT-4o/Python,但是对于更复杂的模型,我呼吁越来越严格的审查水平。
下周,我们将继续进行多元统计,测试ChatGPT-4o/Python对主成分分析、冗余分析、对应分析和规范对应分析的运行和解释能力。我会继续向您报告最新进展!