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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:16:05