मुझे पहले यहां सहायता मांगने के लिए बहुत अच्छे अनुभव हुए हैं और मैं फिर से कुछ मदद प्राप्त करने की उम्मीद कर रहा हूं।मिश्रित प्रभाव मॉडल से केवल "महत्वपूर्ण" यादृच्छिक प्रभावों का एक कैटरपिलर साजिश
मैं एक बड़े मिश्रित प्रभाव मॉडल का अनुमान लगा रहा हूं जिसमें यादृच्छिक प्रभावों में से एक के 150 से अधिक विभिन्न स्तर हैं। इससे मानक कैटरपिलर प्लॉट काफी पढ़ा जा सकता है।
मैं, यदि संभव हो, तो बेहतर शब्द की कमी के लिए यादृच्छिक प्रभाव के स्तरों की कैटरपिलर साजिश प्राप्त करने के लिए, "महत्वपूर्ण" की इच्छा है। यही है: मैं एक कैटरपिलर प्लॉट चाहता हूं जिसमें या तो यादृच्छिक अवरोध या एक अलग गुणांक के लिए यादृच्छिक ढलान में "आत्मविश्वास अंतराल" है (मुझे पता है कि यह काफी नहीं है) जिसमें शून्य शामिल नहीं है।
sleepstudy
डेटा से इस मानक मॉडल पर विचार करें जो lme4
के साथ मानक है।
library(lme4)
fit <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
ggCaterpillar(ranef(fit,condVar=TRUE), QQ=FALSE, likeDotplot=TRUE, reorder=FALSE)[["Subject"]]
मुझे यह कैटरपिलर प्लॉट मिलेगा।
कैटरपिलर भूखंड का उपयोग मैं this code से आता है। ध्यान दें कि मैं अंतराल के लिए कम रूढ़िवादी सीमाओं का उपयोग करता हूं (यानी 1.645 * से और 1.96 * से नहीं)।
मूल रूप से, मैं एक कैटरपिलर साजिश है कि के लिए 308, 309, 310, 330, 331, 335, 337, 349, 350, 352, और 370 के स्तर को शामिल होगा क्योंकि उन स्तरों या तो अवरोध था चाहते या ढलानों जिनके अंतराल में शून्य शामिल नहीं था। मैं पूछता हूं क्योंकि 150 से अधिक विभिन्न स्तरों का मेरा कैटरपिलर प्लॉट अपठनीय है और मुझे लगता है कि यह एक सार्थक समाधान हो सकता है।
प्रजनन कोड निम्नानुसार है। मैं वास्तव में किसी भी मदद की सराहना करता हूं।
# https://stackoverflow.com/questions/34120578/how-can-i-sort-random-effects-by-value-of-the-random-effect-not-the-intercept
ggCaterpillar <- function(re, QQ=TRUE, likeDotplot=TRUE, reorder=TRUE) {
require(ggplot2)
f <- function(x) {
pv <- attr(x, "postVar")
cols <- 1:(dim(pv)[1])
se <- unlist(lapply(cols, function(i) sqrt(pv[i, i, ])))
if (reorder) {
ord <- unlist(lapply(x, order)) + rep((0:(ncol(x) - 1)) * nrow(x), each=nrow(x))
pDf <- data.frame(y=unlist(x)[ord],
ci=1.645*se[ord],
nQQ=rep(qnorm(ppoints(nrow(x))), ncol(x)),
ID=factor(rep(rownames(x), ncol(x))[ord], levels=rownames(x)[ord]),
ind=gl(ncol(x), nrow(x), labels=names(x)))
} else {
pDf <- data.frame(y=unlist(x),
ci=1.645*se,
nQQ=rep(qnorm(ppoints(nrow(x))), ncol(x)),
ID=factor(rep(rownames(x), ncol(x)), levels=rownames(x)),
ind=gl(ncol(x), nrow(x), labels=names(x)))
}
if(QQ) { ## normal QQ-plot
p <- ggplot(pDf, aes(nQQ, y))
p <- p + facet_wrap(~ ind, scales="free")
p <- p + xlab("Standard normal quantiles") + ylab("Random effect quantiles")
} else { ## caterpillar dotplot
p <- ggplot(pDf, aes(ID, y)) + coord_flip()
if(likeDotplot) { ## imitate dotplot() -> same scales for random effects
p <- p + facet_wrap(~ ind)
} else { ## different scales for random effects
p <- p + facet_grid(ind ~ ., scales="free_y")
}
p <- p + xlab("Levels of the Random Effect") + ylab("Random Effect")
}
p <- p + theme(legend.position="none")
p <- p + geom_hline(yintercept=0)
p <- p + geom_errorbar(aes(ymin=y-ci, ymax=y+ci), width=0, colour="black")
p <- p + geom_point(aes(size=1.2), colour="blue")
return(p)
}
lapply(re, f)
}
library(lme4)
fit <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
ggCaterpillar(ranef(fit,condVar=TRUE), QQ=FALSE, likeDotplot=TRUE, reorder=FALSE)[["Subject"]]
ggsave(file="sleepstudy.png")
हेह, हेह "मैं हो रही है एक छोटे से दूर ले ... समाप्त हो गया"। आप मजाक नहीं कर रहे हैं। बहुत बढ़िया जवाब! – eipi10
हे, मैंने 'lme4' संदेश बोर्डों को यादृच्छिक प्रभावों के संदर्भ में गंभीरता से "आत्मविश्वास अंतराल" और "महत्वपूर्ण" का उपयोग करने से बेहतर जानने के लिए काफी समय तक पढ़ा है। : पी और यह एक उत्कृष्ट जवाब था। मुझे 'ब्रूम' पैकेज के बारे में भी पता नहीं था। एक बार फिर धन्यवाद! – steve
बेन यह बहुत अच्छा है! क्या आपको बुरा लगेगा अगर मैंने इसे आपके कई झाड़ू योगदानों में जोड़ा? –