目的
在上一次氛围统计学分析尝试中(详见:《用AI进行统计学假设验证分析(氛围统计学分析)》),我没能成功使用AI独立完成一次统计学分析。这次成功了。
我的目的其实是教会同事如何做,并且假设同事是完全不会编程的,并且是国内网络环境。所以:
- 问AIstudio,开code execution————不可行,他们根本打不开AIstudio,还要注册个gmail,更是不可能。但这个方案真的是最简单好用并且能够成功得到正确结果的。
- 问让AI写代码,copy到本地运行————不可行,直接去python官网下载个python已经很勉强了,再配置个uv/ conda装个numpy、matplotlib、scipy、pandas,很要命。
- 装个Claude Code/ CodeX/ Gemini Cli,交给Agent去写程序然后运行————不可行,第一步命令行装npm就能卡住。
- 出现问题,看看源代码是不是错了————不可行
- 统计学分析的参数需要在程序中设定————不可行
- 重复多次以粗略判断结果————可行,但如果有随机过程,应当指定随机数种子和迭代次数。
根据上一次的尝试,我发现几个问题:
- 统计学方法应当尽量简洁稳定,不要有太多假设,以免出现需要设定特定参数的过程。
- 统计学方法应当可以直接计算,而不必引用特定的统计学库。能够用scipy、jStatd当然好,但最好整个方法可以直接使用内置的数学库就可以计算。
- 假设检验和置信区间计算都应当有。
还有,我们的目的是为了研发,也就是想真正弄清楚一种治疗方法或者一种药物是否真的对病人有效,很可能要从几个备选中选出一个好的;我们的目的不是为了发文章,不是为了巧取豪夺一个P<0.05的阳性结果;我们的目的也不是为了答辩,说出一个老一辈统计学专家点头认可的假设检验名称。
所以,我这次选择的是置换检验方法和Bootstrap假设检验方法。这两种方法适用于相当多的场景,原理很简单,python或者js的内置数学库就可以搞定,即使AI不用现成的统计学库,让AI自己写代码也不容易出错。当然这两个方法也不是万能的(但其实已经是95%能了),关于这两种统计学方法,请参考置换检验综述:原理、优势、局限与实践框架和Bootstrap 假设检验综述:原理、应用与关键局限性
方法
还是如上次尝试一样,构造一个样例问题。
问题描述
背景:
一家生物制药公司研发了三种新的候选药物:药物A、药物B和药物C。为了评估这些药物的有效性,研究人员进行了一项临床前试验。
实验设计:
研究人员选择了98只生理指标水平相似的实验小鼠,并将它们随机分为四组:
- A组 (n=23):服用药物A。
- B组 (n=25):服用药物B。
- C组 (n=28):服用药物C。
- 对照组 (n=22):服用生理盐水(安慰剂)。
在给药2小时后,测量并记录每只小鼠的某特定生理指标水平。
研究问题:
与对照组相比,药物A、B、C中,有哪些药物能够显著降低实验小鼠的某特定生理指标水平水平?(显著性水平 α = 0.05)
数据假设:
- 各组样本数据均独立。
- 我们无法知道某特定生理指标水平是否是正态分布的。
实验数据
以下是本次实验记录的各组小鼠某特定生理指标水平,数据已经过整理:
对照组 (Control Group)
-
样本量 (n): 22
-
数据:
8.5, 9.1, 7.8, 8.8, 9.5, 7.2, 8.3, 9.9, 8.0, 7.6, 9.2, 8.4, 8.9, 7.1, 9.7, 8.6, 8.1, 7.9, 9.3, 8.7, 9.0, 7.5
A组 (Group A) -
样本量 (n): 23
-
数据:
8.2, 7.5, 9.0, 7.9, 8.8, 7.1, 8.4, 9.4, 7.7, 8.1, 8.9, 7.3, 8.6, 9.2, 7.0, 8.5, 7.8, 9.6, 8.3, 7.6, 9.1, 8.0, 8.7
B组 (Group B)
- 样本量 (n): 25
- 数据:
9.3, 8.0, 8.8, 7.7, 9.7, 8.4, 7.2, 8.9, 9.5, 8.1, 7.5, 9.1, 8.6, 7.9, 9.9, 8.3, 7.0, 9.2, 8.5, 7.8, 9.6, 8.2, 7.6, 9.0, 8.7
C组 (Group C)
- 样本量 (n): 28
- 数据:
6.9, 7.8, 6.2, 7.5, 8.1, 6.5, 7.9, 5.8, 7.1, 8.4, 6.7, 7.3, 8.0, 6.0, 7.6, 8.2, 6.8, 7.7, 5.9, 7.2, 8.5, 6.4, 7.0, 8.3, 6.6, 7.4, 6.3, 8.6
测试对象
- 豆包:注意需要进入“编程”→“创作”模式,链接是: https://www.doubao.com/code/chat
- 千问:应当打开“网页开发”模式,我测试的是Qwen3-VL-235B-A22B模型。链接: https://chat.qwen.ai/
- 智谱GLM:应当打开“full-stack”模式,我测试的是GLM4.6。链接: https://chat.z.ai/
测试方法
- 在对话窗口中输入提示词(后续详述),运行。
- 如果出错,将显示的出错信息复制,粘贴至对话窗口中。如果继续出错则判定为失败。
- 如果点击AI生成的按钮没有反应,或者页面是空白的。在对话框中告知AI,令其进行修复。如果继续出错则判定为失败。
- 完成一次计算后,新开一个页面,再次向对话窗口中输入提示词,重复运行。两次结果数字应当相同,如果不相同,高度怀疑AI没有进行计算。
提示词设计
- 包含上述“问题描述”
- “用置换检验和bootstrap方法分析这组数据,给出假设检验和置信区间估计。使用程序代码进行计算,随机数种子使用42,重采样次数10000次。”
- 如果是用的z.ai, 那么其实可以明确要求使用scipy,这是一个python科学计算包,结果可能更可靠。“用置换检验和bootstrap方法分析这组数据,给出假设检验和置信区间估计。使用程序代码(scipy)进行计算,随机数种子使用42,重采样次数10000次。”
解释:
- 说明要使用的统计方法:置换检验和bootstrap方法。
- 要明确向AI提出用程序来计算,否则有可能AI偷懒只是帮你设计了一个网页其中的数字却是胡诌的。
- 置换检验和bootstrap方法都是“重采样方法”,是对数据反复进行随机重采样,所以其过程是随机的,每次计算出来的结果有可能会有差异。但计算机其实只能产生“伪随机数”,如果指定了随机数种子,则即使是随机过程,也是固定的、可重复的。
结果
- 智谱GLM4.6:测试通过,计算结果正确,两次计算结果相同,生成了美观的网页。
- 千问Qwen3:测试通过,计算结果正确,两次计算结果相同,生成了美观的网页。但其中出现过一次出错,需要将页面中显示的出错信息告知AI。
- 豆包:失败。
讨论
- 这次化简了统计学方法。对AI的要求降低了。
- 置换检验和bootstrap方法都是要重复很多次的大型运算,所以有可能算得很慢。有时候不确定是程序出错了还是算得慢。
- 两次计算结果相同只是结果正确的“必要不充分条件”,也就是说如果AI两次算得结果不同,肯定是有问题,如果计算结果相同,是不是正确其实也不好说。最好还是能有其他方法来佐证。
结论
在提示词设计得当时,可以用智谱GLM4.6( https://chat.z.ai ) 或者 千问Qwen3( https://chat.qwen.ai/ ) 进行置换检验和bootstrap假设检验,获得正确结果。