R语言双因子三水平带交互项线性模型的截距与斜率计算
线性模型斜率计算与事后检验问题
我正在用R计算线性模型的斜率,已通过以下代码聚合数据集:
agg_df <- aggregate(cbind(rate.output, crit.intercept) ~ lvl + treatment, data = d, FUN = mean)
可复现数据示例
lvl <- as.factor(rep(c(1, 2, 3), 3)) treatment <- as.factor(c(rep(c("green"), 3), rep(c("purple"), 3), rep(c("red"), 3))) o2 <- c(0.035941608, 0.042206981, 0.023556132, 0.016169792, 0.041431159, 0.054221145, 0.007571207, 0.008033468, 0.012353746) df <- as.data.frame(cbind(lvl, treatment, o2))
模型拟合
随后拟合了含交互项的线性模型:
o2 <- lm(rate.output ~ treatment*lvl, data = agg_df) |> summary()
返回的系数结果(自行标注了对应处理组与水平):
Coefficients: Estimate (Intercept) 0.035942 Green Level 1 treatmentpurple -0.019772 Purple Level 1 treatmentRed -0.028370 Red Level 1 lvl2 0.006265 Green Level 2 lvl3 -0.012385 Green Level 3 treatmentpurple:lvl2 0.018996 Purple Level 2 treatmentRed:lvl2 -0.005803 Red Level 2 treatmentpurple:lvl3 0.050437 Purple Level 3 treatmentRed:lvl3 0.017168 Red Level 3
问题与困惑
我需要计算不同处理组的截距和斜率,但尝试的计算方式得到了错误结果。比如计算Purple处理组lvl2的斜率时,我用0.035942+(-0.019772)+0.018996 == 0.035166,但用单独拟合Purple组模型的方式验证:
o2_purp <- agg_df[agg_df$treatment=="purple",] fit_p <- lm(rate.output ~ lvl, data = o2_purp) |> summary()
得到的结果是:
Coefficients: Estimate Std. Error t value Pr(|t|) (Intercept) 0.035942 NaN NaN NaN lvl2 0.006265 NaN NaN NaN lvl3 -0.012385 NaN NaN NaN
该结果显示Purple处理组Level 2的斜率为0.02526,和我之前的计算值不符。
请问我哪里出错了?如何正确计算Purple和Red处理组Level 2、Level 3的斜率?计算完成后,我想通过Tukey事后检验等方法检验处理组-水平均值间的差异。
补充说明
我的研究目的是比较暴露于不同测试介质的无脊椎动物的常氧摄氧量,处理组为梯度设置,因此需要检验不同水平间是否存在差异,这也是计算各水平斜率的原因。
内容的提问来源于stack exchange,提问作者asellus
相关产品推荐
相关产品推荐

