编写函数返回数据框的回归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
相关产品推荐
相关产品推荐

