回归模型,置信区间和数据如何绘制?

时间:2018-11-05 18:38:13

标签: r ggplot2 plot regression emmeans

我有以下模型。数据文件位于:https://drive.google.com/open?id=1_H6YZbdesK7pk5H23mZtp5KhVRKz0Ozl

library(nlme)
library(lme4)
library(car)
library(carData)
library(emmeans)
library(ggplot2)
library(Matrix)
library(multcompView)
datos_weight <- read.csv2("D:/investigacion/publicaciones/articulos-escribiendo/pennisetum/pennisetum-agronomicas/data_weight.csv",header=T, sep = ";", dec = ",")

parte_fija_3 <- formula(weight_DM 
                    ~ Genotypes 
                    + Age 
                    + I(Age^2) 
                    + Genotypes*Age 
                    + Genotypes*I(Age^2))
heterocedasticidad_5 <- varComb(varExp(form = ~fitted(.)))
correlacion_4 <- corCompSymm(form = ~ 1|Block/Genotypes)

modelo_43 <- gls(parte_fija_3, 
             weights = heterocedasticidad_5, 
             correlation = correlacion_4, 
             na.action = na.omit, 
             data = datos_weight)
anova(modelo_43)

#response
Denom. DF: 48 
                   numDF  F-value p-value
(Intercept)            1 597.3828  <.0001
Genotypes              3   2.9416  0.0424
Age                    1 471.6933  <.0001
I(Age^2)               1  22.7748  <.0001
Genotypes:Age          3   5.9425  0.0016
Genotypes:I(Age^2)     3   0.7544  0.5253

现在,我想用每种基因型分开的置信区间和数据来绘制回归模型。我使用了ggplot2,并绘制了数据,但无法添加具有置信区间的回归模型。

library(ggplot2)
rango_X <- c(30,90) #x axis
rango_Y <- c(0,175) #y axis
ggplot(datos_weight, aes(x = Age, y = weight_DM)) +
  geom_point() + 
  xlab("Age") + 
  ylab("Dry matter") +
  xlim(rango_X) +
  ylim(rango_Y) +
  facet_wrap(~ Genotypes, ncol = 2)

图形如下:

enter image description here

对于同一数据的下一个分析,在没有与二次年龄交互的情况下:Genotypes*I(Age^2),您如何将具有置信区间的回归模型添加到图中?

parte_fija_3 <- formula(weight_DM 
                        ~ Genotypes 
                        + Age
                        + I(Age^2)
                        + Genotypes*Age) 
                        #+ Genotypes*I(Age^2))
> anova(modelo_44)
Denom. DF: 51 
              numDF  F-value p-value
(Intercept)       1 609.3684  <.0001
Genotypes         3   3.7264  0.0169
Age               1 479.0973  <.0001
I(Age^2)          1  21.9232  <.0001
Genotypes:Age     3   6.4184  0.0009

modelo_44开始的线性斜率是:

(tendencias_em_lin <- emtrends(modelo_44,
                                "Genotypes",
                                var = "Age"))
Genotypes Age.trend        SE df lower.CL upper.CL
C          1.613619 0.1723451 51 1.267622 1.959616
E          1.665132 0.2024104 51 1.258776 2.071488
K          1.888587 0.2001627 51 1.486744 2.290430
M          1.059897 0.1205392 51 0.817905 1.301890

二次方斜率是?

(tendencias_em_quad <- emtrends(modelo_44,
                                "Genotypes",
                                var = "I(Age^2)"))
 Genotypes I(Age^2).trend           SE df    lower.CL   upper.CL
 C            0.013379926 0.0014290639 51 0.010510961 0.01624889
 E            0.013807066 0.0016783618 51 0.010437614 0.01717652
 K            0.015659927 0.0016597235 51 0.012327893 0.01899196
 M            0.008788536 0.0009994958 51 0.006781965 0.01079511

Confidence level used: 0.95 

还是摘要中的摘要:I(Age^2) = -0.01511?我相信斜率对于所有基因型都是恒定的,因为Genotypes*I(Age^2)的相互作用尚未在modelo_44中进行测试:

summary(modelo_44)
Generalized least squares fit by REML
Model: parte_fija_3 
....
Coefficients:
                   Value Std.Error   t-value p-value
(Intercept)    -73.32555 11.236777 -6.525496  0.0000
GenotypesE       7.22267  9.581979  0.753776  0.4544
GenotypesK      -9.83285  9.165962 -1.072757  0.2884
GenotypesM      17.87000  8.085229  2.210203  0.0316
Age              3.43593  0.450041  7.634687  0.0000
I(Age^2)        -0.01511  0.004065 -3.717475  0.0005
GenotypesE:Age   0.05151  0.246724  0.208788  0.8354
GenotypesK:Age   0.27497  0.241923  1.136595  0.2610
GenotypesM:Age  -0.55372  0.195398 -2.833808  0.0066
...

问题

  1. 如果必须为模型绘制图,ggplot2如何在带有独立modelo_43或其他选项的单独图表中添加具有每个基因型的置信区间和数据的回归模型和modelo_44
  2. 我用emtrends正确计算了modelo_44的二次斜率的估计,它正确吗?

非常感谢您的答复

1 个答案:

答案 0 :(得分:0)

这个问题看起来模棱两可-您以前曾张贴过吗?也许我在想别人的类似问题。

您似乎正在尝试以相同的比例绘制苹果,橙子和香蕉。我不确定响应变量(干物质在哪里)的单位;假设以千克为单位。然后,tendencies_em_lin中的结果以千克/年为单位,tendencies_em_quad中的结果以千克/年为单位^ 2。这是三种不同的比例,因此在这些图上“显示数据”是没有意义的。

我认为这样做确实有意义:

emm <- emmeans(modelo_44, ~ Genotype*Age,
    at = list(Age = seq(from = 40, to = 80, by = 5)))

这将获得每种基因型给定年龄的预测。现在,您可以按以下方式绘制它们:

plotobj <- emmip(emm, Genotype ~ Age, CIs = TRUE)
plotobj

返回的plotobj是一个ggplot对象,您可以使用https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html#plots图形部分末尾的示例所示的技术将数据添加到该对象。

或者,您可以将dat = as.data.frame(emm)用作包含所需结果的数据框,并根据需要绘制它们。同样,您可以使用 ggplot2 技术将观测到的数据添加到这些图中。

无论哪种方式,在绘制的EMM中线性趋势都将随着增加或减少而可见,而在这些路径中,二次趋势将随着曲率而可见。