如何绘制 lmer 模型的某些项
How to plot some terms of a lmer model
我试图仅绘制 lmer 对象随机效应的几个项。我借用oshun .
发的数据集
补数据:
tempEf <- data.frame(
N = rep(c("Nlow", "Nhigh"), each=300),
Myc = rep(c("AM", "ECM"), each=150, times=2),
TRTYEAR = runif(600, 1, 15),
site = rep(c("A","B","C","D","E"), each=10, times=12) #5 sites
)
补一些响应数据
tempEf$r <- 2*tempEf$TRTYEAR +
-8*as.numeric(tempEf$Myc=="ECM") +
4*as.numeric(tempEf$N=="Nlow") +
0.1*tempEf$TRTYEAR * as.numeric(tempEf$N=="Nlow") +
0.2*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM") +
-11*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
0.5*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
as.numeric(tempEf$site) + #Random intercepts; intercepts will increase by 1
tempEf$TRTYEAR/10*rnorm(600, mean=0, sd=2) #Add some noise
library(lme4)
model <- lmer(r ~ Myc * N * TRTYEAR + (1|site), data=tempEf)
我可以使用 type = "re" 绘制随机效应,如下所示:
plot_model(model, type = "re")
我只想显示 A 和 E,所以我添加了 'terms' 参数,如下所示:
plot_model(model, type = "re", terms = c("A", "E"))
但这不起作用。关于如何仅显示“A”和“E”的任何指导??
由于某种原因,条款选项不起作用。应该反映给sjplot的作者。这里有两个解决方法:
1) 使用 ggplot2 手动定义术语:
library(ggplot2)
library(sjPlot)
plot_model(model, type = "re") + scale_x_discrete(limits=c("A","D"))
您收到以下警告是因为您丢弃了数据
Scale for 'x' is already present. Adding another scale for 'x', which
will replace the existing scale. Warning messages: 1: Removed 3 rows
containing missing values (geom_point). 2: Removed 3 rows containing
missing values (geom_errorbar).
2) 从 get_model()
绘制
df = get_model_data(model,type="re")
df = subset(df,term %in% c("A","D"))
ggplot(df,aes(x=term,y=estimate,col=group)) +
geom_point(show.legend=FALSE) +
geom_segment(aes(xend=term,y=conf.low,yend=conf.high),show.legend=FALSE)+
scale_colour_brewer(palette = "Set1")+
coord_flip()+ggtitle("Random Effects")
我试图仅绘制 lmer 对象随机效应的几个项。我借用oshun
补数据:
tempEf <- data.frame(
N = rep(c("Nlow", "Nhigh"), each=300),
Myc = rep(c("AM", "ECM"), each=150, times=2),
TRTYEAR = runif(600, 1, 15),
site = rep(c("A","B","C","D","E"), each=10, times=12) #5 sites
)
补一些响应数据
tempEf$r <- 2*tempEf$TRTYEAR +
-8*as.numeric(tempEf$Myc=="ECM") +
4*as.numeric(tempEf$N=="Nlow") +
0.1*tempEf$TRTYEAR * as.numeric(tempEf$N=="Nlow") +
0.2*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM") +
-11*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
0.5*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
as.numeric(tempEf$site) + #Random intercepts; intercepts will increase by 1
tempEf$TRTYEAR/10*rnorm(600, mean=0, sd=2) #Add some noise
library(lme4)
model <- lmer(r ~ Myc * N * TRTYEAR + (1|site), data=tempEf)
我可以使用 type = "re" 绘制随机效应,如下所示:
plot_model(model, type = "re")
我只想显示 A 和 E,所以我添加了 'terms' 参数,如下所示:
plot_model(model, type = "re", terms = c("A", "E"))
但这不起作用。关于如何仅显示“A”和“E”的任何指导??
由于某种原因,条款选项不起作用。应该反映给sjplot的作者。这里有两个解决方法:
1) 使用 ggplot2 手动定义术语:
library(ggplot2)
library(sjPlot)
plot_model(model, type = "re") + scale_x_discrete(limits=c("A","D"))
您收到以下警告是因为您丢弃了数据
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. Warning messages: 1: Removed 3 rows containing missing values (geom_point). 2: Removed 3 rows containing missing values (geom_errorbar).
2) 从 get_model()
绘制 df = get_model_data(model,type="re")
df = subset(df,term %in% c("A","D"))
ggplot(df,aes(x=term,y=estimate,col=group)) +
geom_point(show.legend=FALSE) +
geom_segment(aes(xend=term,y=conf.low,yend=conf.high),show.legend=FALSE)+
scale_colour_brewer(palette = "Set1")+
coord_flip()+ggtitle("Random Effects")