我在R中使用lme4来适应混合模型
lmer(value~status+(1|experiment)))
其中值是连续的,状态(N / D / R)和实验是因素,我得到
Linear mixed model fit by REML
Formula: value ~ status + (1 | experiment)
AIC BIC logLik deviance REMLdev
29.1 46.98 -9.548 5.911 19.1
Random effects:
Groups Name Variance Std.Dev.
experiment (Intercept) 0.065526 0.25598
Residual 0.053029 0.23028
Number of obs: 264, groups: experiment, 10
Fixed effects:
Estimate Std. Error t value
(Intercept) 2.78004 0.08448 32.91
statusD 0.20493 0.03389 6.05
statusR 0.88690 0.03583 24.76
Correlation of Fixed Effects:
(Intr) statsD
statusD -0.204
statusR -0.193 0.476
我想以图形方式表示固定效果评估。但是这些对象似乎没有绘图功能。有什么方法可以用图形方式描述固定效应吗?
答案 0 :(得分:20)
使用coefplot2
(在r-forge上):
从@Thierry窃取模拟代码:
set.seed(101)
dataset <- expand.grid(experiment = factor(seq_len(10)),
status = factor(c("N", "D", "R"), levels = c("N", "D", "R")),
reps = seq_len(10))
X <- model.matrix(~status,dataset)
dataset <- transform(dataset,
value=rnorm(nrow(dataset), sd = 0.23) + ## residual
rnorm(length(levels(experiment)), sd = 0.256)[experiment] + ## block effects
X %*% c(2.78,0.205,0.887)) ## fixed effects
适合模特:
library(lme4)
model <- lmer(value~status+(1|experiment), data = dataset)
简介:
install.packages("coefplot2",repos="http://r-forge.r-project.org")
library(coefplot2)
coefplot2(model)
修改强>:
我经常遇到R-Forge版本的问题。如果R-Forge构建不起作用,则此回退应该有效:
install.packages("coefplot2",
repos="http://www.math.mcmaster.ca/bolker/R",
type="source")
请注意,必须已安装coda
依赖项。
答案 1 :(得分:15)
我喜欢系数置信区间图,但考虑一些额外的图来理解固定效应可能很有用。
从@Thierry窃取模拟代码:
library(ggplot2)
library(lme4)
library(multcomp)
dataset <- expand.grid(experiment = factor(seq_len(10)), status = factor(c("N", "D", "R"), levels = c("N", "D", "R")), reps = seq_len(10))
dataset$value <- rnorm(nrow(dataset), sd = 0.23) + with(dataset, rnorm(length(levels(experiment)), sd = 0.256)[experiment] + ifelse(status == "D", 0.205, ifelse(status == "R", 0.887, 0))) + 2.78
model <- lmer(value~status+(1|experiment), data = dataset)
查看数据的结构......看起来很平衡..
library(plotrix); sizetree(dataset[,c(1,2)])
跟踪固定效应之间的相关性可能会很有趣,特别是如果您适合不同的相关结构。以下链接提供了一些很酷的代码......
http://hlplab.wordpress.com/2012/03/20/correlation-plot-matrices-using-the-ellipse-library/
my.plotcorr(
matrix(c(1, .891, .891,
.891, 1, .891,
.891, .891, 1), nrow=3)
)
最后,看看10个实验的变异性以及实验中“状态”的可变性似乎是相关的。我正在研究这个代码,因为我在非平衡数据上打破它,但想法是......
My2Boxes(m=4,f1=dataset$experiment,f2=dataset$status,x=dataset$value,color=c("red","yellow","green"))
最后,已经提到过的Piniero和Bates(2000)的书强烈赞成格子从我撇去的那些小东西。所以你可能会给它一个机会。也许就像绘制原始数据......
lattice::xyplot(value~status | experiment, groups=experiment, data=dataset, type=c('p','r'), auto.key=F)
然后绘制拟合值......
lattice::xyplot(fitted(model)~status | experiment, groups=experiment, data=dataset, type=c('p','r'), auto.key=F)
答案 2 :(得分:13)
以下是一些建议。
library(ggplot2)
library(lme4)
library(multcomp)
# Creating datasets to get same results as question
dataset <- expand.grid(experiment = factor(seq_len(10)),
status = factor(c("N", "D", "R"),
levels = c("N", "D", "R")),
reps = seq_len(10))
dataset$value <- rnorm(nrow(dataset), sd = 0.23) +
with(dataset, rnorm(length(levels(experiment)),
sd = 0.256)[experiment] +
ifelse(status == "D", 0.205,
ifelse(status == "R", 0.887, 0))) +
2.78
# Fitting model
model <- lmer(value~status+(1|experiment), data = dataset)
# First possibility
tmp <- as.data.frame(confint(glht(model, mcp(status = "Tukey")))$confint)
tmp$Comparison <- rownames(tmp)
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) +
geom_errorbar() + geom_point()
# Second possibility
tmp <- as.data.frame(confint(glht(model))$confint)
tmp$Comparison <- rownames(tmp)
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) +
geom_errorbar() + geom_point()
# Third possibility
model <- lmer(value ~ 0 + status + (1|experiment), data = dataset)
tmp <- as.data.frame(confint(glht(model))$confint)
tmp$Comparison <- rownames(tmp)
ggplot(tmp, aes(x = Comparison, y = Estimate, ymin = lwr, ymax = upr)) +
geom_errorbar() + geom_point()
答案 3 :(得分:1)
此答案说明了较新的dotwhisker::dwplot
+ broom.mixed
解决方案。
在模拟中再添加一个变量:
dataset <- transform(dataset,
value=rnorm(nrow(dataset), sd = 0.23) + ## residual
rnorm(length(levels(experiment)), sd = 0.256)[experiment] + ## block effects
X %*% c(2.78,0.205,0.887),
var2=rnorm(nrow(dataset))) ## fixed effects
拟合两个不同的模型:
library(lme4)
model <- lmer(value~status+var2 + (1|experiment), data = dataset)
model2 <- update(model, . ~ . -var2)
绘图:
library(broom.mixed)
library(dotwhisker)
dwplot(list(first=model,second=model2), effects="fixed")+
geom_vline(xintercept=0, lty=2)
(使用effects="fixed"
可以得到固定效果参数,默认情况下会删除截距)。
broom.mixed
还有许多其他选择。当我想做一些复杂的事情时,可以使用ggplot
+ ggstance::geom_pointrangeh
(+ position="position_dodgev"
)来制作自己的自定义图,而不要依赖dotwhisker::dwplot()
。