首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Broom.mixed exp模型预测

Broom.mixed exp模型预测
EN

Stack Overflow用户
提问于 2022-02-21 17:57:20
回答 1查看 167关注 0票数 0

我想寻求一些帮助,从我的模型绘制预测值,以及由lmer()的估计生成的方程。

所以,我所掌握的数据是不同的老鼠在不同的日子里的体积。每只老鼠都有不同的时间点来测量这个体积。

那么,我使用的模型是:

代码语言:javascript
复制
 m1 <- lmer(lVolume ~ Country*Day + (1|Rat))

我这样做是因为我对exp(fitted)值感兴趣,然后得到这个模型的指数方法,而不是使用非线性混合效应模型(暂时)。

为了绘制该模型的预测结果,我的尝试是:

代码语言:javascript
复制
m1%>% 
  augment() %>% 
  clean_names() %>% 
  ggplot(data = .,
         mapping = aes(x = day,
                       y = exp(l_volume),
                       group = rat)) +
  geom_point(alpha = 0.5) +
  geom_line(alpha = 0.5) +
  geom_point(aes(y = exp(fitted)),
             color = "red") + 
  geom_line(aes(y = exp(fitted)),
            color = "red") + 
  expand_limits(x = 0 , y = 0)

这里我画了更多的老鼠,但是,正如你所看到的,(0,0)离lmer的预测太远了。我想知道如何绘制我的模型正在生成的预测,以查看(0,200)中的点。从这里开始,我尝试了一个提示,创建了一个新的数据框架,然后用rats (m1,newdata = new_df)绘制了图,但是我不知道如何创建这个数据框架,因为我有20个老鼠,我不知道如何将其扩展到预测()。

我的尝试:

代码语言:javascript
复制
pframe <- data.frame(Day=seq(0, 200, length.out=101))

pframe$continuous_outcome <- predict(m1, newdata = pframe, level = 0)
ggplot(data, aes(Day,lVolume)) + 
  geom_point() +
  geom_line(data=pframe)

但我有个错误:

错误(predvars,data,env):找不到对象“大鼠”

另外,是否也有一种方法来绘制你从每一次估计中生成的方程,也就是说,从每只老鼠身上,你有一组固定和随机的估计器,我如何绘制lmer为每只老鼠生成的方程(红色曲线)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 00:55:24

事实证明,使用predict比使用broom.mixed::augment更容易。

构造预测

(鼠/国/日的所有组合- 0-150天(每天最多200天,导致一些极端预测,破坏了垂直尺度)

代码语言:javascript
复制
library(tidyverse)
dc <- distinct(dplyr::select(dat1, Rat, Country))
pframe <- (with(dat1,
                expand_grid(Rat = unique(Rat),
                            Day = 0:150))
  %>% full_join(dc, by = "Rat")
  %>% mutate(lVolume = predict(m1, newdata = .))
)

将数据和预测合并到一个数据框架中(您不必这样做,但它使图例变得简单)

代码语言:javascript
复制
comb <- dplyr::bind_rows(list(data = dat1, model = pframe),
                       .id = "type")

情节:

代码语言:javascript
复制
ggplot(comb, aes(Day, exp(lVolume), colour = type)) +
  geom_point(alpha = 0.2) +
  geom_line(aes(group = interaction(type, Rat))) +
  scale_colour_manual(values = c("black", "red"))

重建数据:

代码语言:javascript
复制
dat0 <- list(
    list("rat1", vol=c(78,304,352,690,952,1250), days = c(89,110,117,124,131,138), country = "Chile"),
    list("rat2", vol=c(202,440,520,870,1380), days = c(75,89,96,103,110), country = "Chile"),
    list("rat3", vol=c(186,370,620,850,1150), days = c(75,89,96,103,110), country = "Chile"),
    list("rat4", vol=c(92,250,430,450,510,850,1000,1200), days = c(47,61,75,82,89,97,103,110), country = "England"),
    list("rat5", vol=c(110,510,710,1200), days = c(47,61,75,82), country = "England"),
    list("rat6", vol=c(115,380,480,540,560,850,1150,1350), days = c(47,61,75,82,89,97,103,110), country = "England"))

dat1 <- purrr::map_dfr(dat0,
                       ~ data.frame(Rat = .[[1]],
                                    lVolume = log(.$vol), Day = .$days,
                                    Country = .$country))
m1 <- lmer(lVolume ~ Country*Day + (1|Rat), data = dat1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71210932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档