gpt4 book ai didi

r - 如何在具有多个预测变量的混合模型中绘制随机截距和斜率?

转载 作者:行者123 更新时间:2023-12-04 11:03:57 26 4
gpt4 key购买 nike

当混合模型具有多个预测变量时,是否可以绘制混合模型的随机截距或斜率?

使用一个预测器,我会这样做:

#generate one response, two predictors and one factor (random effect)
resp<-runif(100,1, 100)
pred1<-c(resp[1:50]+rnorm(50, -10, 10),resp[1:50]+rnorm(50, 20, 5))
pred2<-resp+rnorm(100, -10, 10)
RF1<-gl(2, 50)

#gamm
library(mgcv)
mod<-gamm(resp ~ pred1, random=list(RF1=~1))
plot(pred1, resp, type="n")
for (i in ranef(mod$lme)[[1]]) {
abline(fixef(mod$lme)[1]+i, fixef(mod$lme)[2])
}

#lmer
library(lme4)
mod<-lmer(resp ~ pred1 + (1|RF1))
plot(pred1, resp, type="n")
for (i in ranef(mod)[[1]][,1]) {
abline(fixef(mod)[1]+i, fixef(mod)[2])
}

但是如果我有一个这样的模型呢?:
mod<-gamm(resp ~ pred1 + pred2, random=list(RF1=~1))

或者用 lmer
mod<-lmer(resp ~ pred1 + pred2 + (1|RF1))

我应该考虑所有系数还是只考虑我正在绘制的变量的系数?

谢谢

最佳答案

## generate one response, two predictors and one factor (random effect)
set.seed(101)
resp <- runif(100,1,100)
pred1<- rnorm(100,
mean=rep(resp[1:50],2)+rep(c(-10,20),each=50),
sd=rep(c(10,5),each=50))
pred2<- rnorm(100, resp-10, 10)

注意 你可能应该 不是 试图适应随机
对只有两个级别的分组变量的影响 - 这将
几乎总是导致估计的随机效应方差为零,
这反过来会将您的预测线放在每个线的顶部
其他 -- 我正在从 gl(2,50) 切换至 gl(10,10) ...
RF1<-gl(10,10)
d <- data.frame(resp,pred1,pred2,RF1)

#lmer
library(lme4)
mod <- lmer(resp ~ pred1 + pred2 + (1|RF1),data=d)
lme4开发版有一个 predict()功能
这使这更容易一些......
  • 预测范围为 pred1pred2等于它的平均值,
    反之亦然。这比它需要的要聪明一点
    是,因为它生成了两个焦点预测变量的所有值
    并一次性使用 ggplot 绘制它们...

  • ()
    nd <- with(d,
    rbind(data.frame(expand.grid(RF1=levels(RF1),
    pred1=seq(min(pred1),max(pred1),length=51)),
    pred2=mean(pred2),focus="pred1"),
    data.frame(expand.grid(RF1=levels(RF1),
    pred2=seq(min(pred2),max(pred2),length=51)),
    pred1=mean(pred1),focus="pred2")))
    nd$val <- with(nd,pred1[focus=="pred1"],pred2[focus=="pred2"])
    pframe <- data.frame(nd,resp=predict(mod,newdata=nd))
    library(ggplot2)
    ggplot(pframe,aes(x=val,y=resp,colour=RF1))+geom_line()+
    facet_wrap(~focus,scale="free")
  • 或者,只关注 pred1并为 pred2 的(小/离散)范围生成预测值 ...

  • ()
    nd <- with(d,
    data.frame(expand.grid(RF1=levels(RF1),
    pred1=seq(min(pred1),max(pred1),length=51),
    pred2=seq(-20,100,by=40))))
    pframe <- data.frame(nd,resp=predict(mod,newdata=nd))
    ggplot(pframe,aes(x=pred1,y=resp,colour=RF1))+geom_line()+
    facet_wrap(~pred2,nrow=1)

    您可能想设置 scale="free"在最后 facet_wrap() ... 或者
    使用 facet_grid(~pred2,labeller=label_both)
    对于演示,您可能需要替换 colour审美的,
    group , 如果您只想区分组
    (即绘制单独的线)而不是识别它们......

    关于r - 如何在具有多个预测变量的混合模型中绘制随机截距和斜率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641512/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com