如何提取lmer输出的固定效果部分的相关性
问题描述:
当您有一个具有许多因素和交互作用的多级模型时,固定效果矩阵的相关大小会变得相当大且不清楚。如何提取lmer输出的固定效果部分的相关性
我可以使用symbolic.cor=T
参数在打印方法,使摘要的更清晰的打印象下面这样:
ratbrain <-
within(read.delim("http://www-personal.umich.edu/~bwest/rat_brain.dat"),
{
treatment <- factor(treatment,
labels = c("Basal", "Carbachol"))
region <- factor(region,
labels = c("BST", "LS", "VDB"))
})
print(mod<-lmer(activate ~ region * treatment + (0 + treatment | animal),ratbrain),symbolic.cor=T)
此图表用于大矩阵稍微更清晰的相关矩阵。尽管这个例子的矩阵并没有那么大。 但是如果我可以绘制相关性的热图,那将会很好。
如何提取固定效果的相关性,以便制作此热图?
编辑:
这里是我创建感谢答案的功能。
fixeff.plotcorr<-function(mod,...)
{
#require(GGally) # contains another correlation plot using ggplot2
require(lme4)
fixNames<-names(fixef(mod))
# Simon O'Hanlon's answer:
# so <- summary(mod)
# df<-as.matrix([email protected]@factors$correlation) for version lme4<1.0
# df<-as.matrix([email protected]$correlation) # lme4 >= 1.0
df<-as.matrix(cov2cor(vcov(mod))) #Ben Bolker's solution
rownames(df)<-fixNames
colnames(df)<-abbreviate(fixNames, minlength = 11)
colsc=c(rgb(241, 54, 23, maxColorValue=255), 'white', rgb(0, 61, 104, maxColorValue=255))
colramp = colorRampPalette(colsc, space='Lab')
colors = colramp(100)
cols=colors[((df + 1)/2) * 100]
# I'm using function my.plotcorr which you can download here:
# http://hlplab.wordpress.com/2012/03/20/correlation-plot-matrices-using-the-ellipse-library/
my.plotcorr(df, col=cols, diag='none', upper.panel="number", mar=c(0,0.1,0,0),...)
# Another possibility is the corrplot package:
# cols <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7",
# "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061"))
# require(corrplot,quiet=T)
# corrplot(df, type="upper", method="number", tl.pos='tl', tl.col='black', tl.cex=0.8, cl.pos='n', col=cols(50))
# corrplot(df,add=TRUE, method='ellipse', type='lower', tl.pos='n', tl.col='black', cl.pos='n', col=cols(50), diag=FALSE)
}
您必须从here下载my.plotcorr功能。 产生的上述使用命令fixeff.plotcorr(mod)
现在的例子中的情节是这样的:
答
使用S4方法列表功能,我们可以返回时print
被称为"mer"
类的一个对象在其上调度的功能:
selectMethod(print , "mer")
望着那被返回,我们可以找到适用的线条给你的源代码:
if (correlation) {
corF <- [email protected]@factors$correlation
so
被定义为你的对象的总结,所以你的情况,你应该只需要提取:
so <- summary(mod)
[email protected]@factors$correlation
答
我不知道直接的方法。但这是解决方法。
diag(diag(1/sqrt(vcov(mod)))) %*% vcov(mod) %*% diag(diag(1/sqrt(vcov(mod))))
+1我认为这不是一种解决方法,而是从v-cov矩阵的相关性的数学推导! :-) – 2013-04-26 13:13:46