You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写函数返回数据框的回归p值与t检验p值

完善后的双样本检验对比函数

我帮你把这个函数完善好啦,顺便修正了代码里的关键问题——你之前在t.test里错误传入了x的因子水平标签,而不是对应的y变量值,这会导致检验完全不对。另外也补全了代码的收尾部分:

compare_tests = function(df) {
  # 拟合线性模型,提取ANOVA的F检验p值(对应回归的整体显著性)
  lm_model = lm(y ~ x, data = df)
  regression_p = anova(lm_model)$'Pr(>F)'[1]
  
  # 执行双样本t检验(x是两水平因子,直接用公式形式更简洁)
  t_test_result = t.test(y ~ x, data = df)
  t_test_p = t_test_result$p.value
  
  # 返回命名向量,清晰区分两个p值
  c(回归检验p值 = regression_p, t检验p值 = t_test_p)
}

关键说明:

  • 当x是两个水平的因子时,线性回归的ANOVA F检验p值和双样本t检验的p值是完全相等的(因为F统计量等于t统计量的平方,对应的p值自然一致),这是统计学上的一个小知识点~
  • 如果你更习惯手动分组取y值,也可以把t检验部分改成这样(结果完全一样):
    # 手动分组的t检验写法
    group1 = df$y[df$x == levels(df$x)[1]]
    group2 = df$y[df$x == levels(df$x)[2]]
    t_test_result = t.test(group1, group2)
    

示例用法:

你可以用下面的测试数据验证函数:

set.seed(123) # 设置随机种子保证结果可重复
test_df = data.frame(
  x = factor(rep(c("对照组", "处理组"), each=30)),
  y = c(rnorm(30, mean=5), rnorm(30, mean=7))
)

# 调用函数
compare_tests(test_df)

运行后会输出两个相同的p值,符合我们前面说的结论~

内容的提问来源于stack exchange,提问作者stevie kay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:41:17