【问题标题】:How can I plot fitted lines of a mixed model with a large number of clusters?如何绘制具有大量聚类的混合模型的拟合线?
【发布时间】:2020-04-08 19:25:01
【问题描述】:

我正在处理一个纵向数据集,其中包含数百个人的生长测量值。我正在为建模部分使用 lme4 和 pedigreemm R 包。我想绘制线性混合效应模型的拟合线。但是,我只想可视化一小部分个体以使图表可读。我希望这不是一个愚蠢的问题,但我无法在网上找到任何此类示例。

我使用这个函数用线性趋势线绘制测量值。

ggplot(data_subset, aes(x = age, y = mass, colour = id)) + geom_point() 
+ geom_smooth(method = "lm") + facet_wrap( ~ id)

这次我想做同样的事情,只使用模型中的拟合线。

【问题讨论】:

    标签: ggplot2


    【解决方案1】:

    假设您正在拟合以下增长模型,该模型具有线性 (age0)、二次 (age2) 和三次 (age3) 固定效应预测变量,然后是 age0 的随机斜率:

    m2 <- lmer(weight ~ female + age0 + age2 + age3 + (age0 | id), growth, REML=FALSE)

    您可以从该模型中提取总体水平和个体水平的预测,如下所示:

    growth$predm2 <- predict(m2,re.form=NA)  ## population level
    growth$predm2fit <- predict(m2) ## individual level
    

    首先,你可以绘制人口趋势图,这里我分别为男孩和女孩绘制:

    g1 <- ggplot(growth,aes(age0, weight)) + 
      geom_point() + 
      facet_grid(.~female) #   
    
    g1 + geom_line(colour="red",aes(y=predm2)) 
    

    现在您可以绘制单独的趋势线,其中考虑了随机截距和斜率:

    g1 + geom_line(colour="red",aes(y=predm2)) + 
      geom_line(colour="dark grey",aes(y=predm2fit,group=id)) # fitted lines
    

    附:您可以自己获取这些数据来使用它:

    library(haven)
    growth <- read_dta("http://www.stata-press.com/data/mlmus2/asian.dta")
    growth <- growth %>% mutate(age0 = age-min(age), female = gender-1)
    as_data_frame(growth)
    

    P.P.S.,如果您想随机抽取案例的子集,您可以使用 sample 函数作为 filter in dplyr 的一部分:

    #Sampling 50 students
    JSP_long50 <- JSP_long %>%
      mutate(StudentID=as.factor(StudentID)) %>%
      filter(StudentID %in% sample(levels(StudentID),50))
    

    【讨论】:

      猜你喜欢
      • 2017-10-23
      • 1970-01-01
      • 2021-12-25
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      相关资源
      最近更新 更多