首页 > 解决方案 > 在 stat_poly_eq() 中添加阻塞因子

问题描述

我正在用 lm() 修复线性回归

model<-lm(y~x+a, data=dat)

其中 a 是具有多个因子水平的阻塞变量。

summary(model)

Call:
lm(formula = y ~ x, data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.45006 -0.20737  0.04593  0.26337  0.91628 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -7.704042   1.088024  -7.081 1.08e-10 ***
x     0.248889   0.036436   6.831 3.81e-10 ***
a1   0.002695   0.150530   0.018  0.98575    
a2   0.491749   0.152378   3.227  0.00162 ** 
a3   0.349772   0.145024   2.412  0.01740 *  
a4  -0.009058   0.138717  -0.065  0.94805    
a5  0.428085   0.128041   3.343  0.00111 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4505 on 119 degrees of freedom
Multiple R-squared:  0.4228,    Adjusted R-squared:  0.3937 
F-statistic: 14.53 on 6 and 119 DF,  p-value: 2.19e-12

在使用 ggplot 绘制原始数据和回归线时,我试图显示与 summary(model) 相同的方程和 R2,但因为我实际上并没有提供 a,所以它没有考虑到 stat_poly_eq( )

ggplot(data=dat, aes(x, y)) +
  geom_point() +
  geom_abline(slope=coef(model)[2], intercept=coef(model)[1], color='red') +
  stat_poly_eq(data=plankton.dat, formula = y ~ x,  
           aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
           parse = TRUE, size=3, colour= "red") 

ggplot

自然,因为 lm() 和 stat_poly_eq() 对模型的拟合不同,所以得到的参数估计值和 R2 是不同的。

是否可以在 stat_poly_eq 中包含阻塞变量,如果可以,如何?

标签: rggplot2ggpmisc

解决方案


由于因子a为六个水平,您已经拟合了六条平行线,因此仅显示一条线和一个方程没有多大意义。如果因子a描述块,则可以使用lme()拟合混合效应模型,它只会为您提供一条线的估计值。您必须考虑 R 中默认使用的对比,并且第一级aora0是“参考”,因此您的示例中绘制的线是块级a0的,对整个数据集无效。

stat_poly_eq()仅支持lm(). 与它一起使用stat_poly_eq()的方式相同。stat_smooth(method = "lm")如果您在 ggplot 之外拟合模型,则需要使用 plotmath 语法手动构建合适的标签,并使用annotate(geom = "text", x = 27, y = 1, label = "<your string>", parse = TRUE). 要创建我用占位符显示的字符串<your string>,您可以按照与geom_abline()绘图示例中类似的方式提取系数估计值,并使用paste()sprintf()组装方程。您也可以coef()与装有lme().

'ggpmisc' 包中的其他统计信息可让您拟合模型,lme()但无论如何您都需要手动组装标签。如果您将制作许多地块,您可能会发现值得查看软件包“ggpmisc”的用户指南以获取详细信息。


推荐阅读