मैंने बैचों में संभावना अनुपात परीक्षण करने के लिए एक रैपर फ़ंक्शन लिखने की कोशिश की। मैंने प्रारंभिक मॉडल को अद्यतन करने के लिए अद्यतन() को शामिल करने का प्रयास किया। हालांकि, ऐसा लगता है कि फ़ंक्शन के अंदर वस्तुओं की तलाश करने के बजाय, यह वैश्विक वातावरण में वस्तुओं की खोज करता है।अद्यतन() फ़ंक्शन के अंदर केवल वैश्विक वातावरण की खोज करता है?
fake <- data.frame(subj= rep(1:5, 4),
factor1 = rep(LETTERS[c(1,2,1,2)], each=5),
factor2 = rep(letters[1:2], each=10),
data=sort(rlnorm(20)))
foo <- function(){
temp <- fake
model1 <- lmer(data~factor1*factor2 + (1 |subj), temp)
model1a <- update(model1, ~.-factor1:factor2)
model1a}
और यह नीचे एक त्रुटि संदेश देता है:
Error in eval(expr, envir, enclos) : object 'factor1' not found
वहाँ अद्यतन() फ़ंक्शन के भीतर खोज करने के लिए वैसे भी है? धन्यवाद!
संपादित करें:
मैंने गलती की। मैं "नकली" नहीं चाहता था, न कि "नकली"।
EDIT2: एक सुविधाजनक समाधान सुझाव दिया गया है कि बस डेटा ऑब्जेक्ट निर्दिष्ट करें।
Error in anova(model1, model1b) :
all models must be fit to the same data object
: हालांकि अद्यतन() अब इस के साथ कोई समस्या नहीं है, एनोवा() को लगता है कि मॉडल मैं तुलना करने के लिए कोशिश कर रहा हूँ विभिन्न आंकड़ों पर आधारित हैं वस्तुओं
foo <- function(){
temp <- fake
model1 <- lmer(data~factor1*factor2 + (1 |subj), data=temp)
model1a <- update(model1, ~.-factor1:factor2, data=temp)
anova(model1, model1a)
}
foo()
मैं एक त्रुटि संदेश मिलता रहा है
मुझे लगता है कि यह त्रुटि अद्यतन() से परे है। लेकिन मुझे आश्चर्य है कि अगर कोई जानता है कि इसे कैसे हल किया जा सकता है। ध्यान दें कि यदि मैं अद्यतन() का उपयोग कर और बजाय मॉडल (नीचे देखें) उल्लेख के बिना समारोह लिखते हैं, त्रुटि ऊपर चला जाता है:
foo <- function(){
temp <- fake
model1 <- lmer(data~factor1*factor2 + (1 |subj), data=temp)
model1a <- lmer(data~factor1 + factor2 + (1 |subj), data=temp)
anova(model1, model1a)
}
foo()
Data: temp
Models:
model1a: data ~ factor1 + factor2 + (1 | subj)
model1: data ~ factor1 * factor2 + (1 | subj)
Df AIC BIC logLik Chisq Chi Df Pr(>Chisq)
model1a 5 -4.6909 3.7535 7.3454
model1 6 -8.8005 1.3327 10.4003 6.1097 1 0.01344 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
संपादित करें 3: ऐसा लगता है कि इस मुद्दे को एनोवा के साथ है() । मैं भी जिन्हें आप नीचे देख @hadley
foo2 <- function(){
my_update <- function(mod, formula = NULL, data = NULL) {
call <- getCall(mod)
if (is.null(call)) {
stop("Model object does not support updating (no call)", call. = FALSE)
}
term <- terms(mod)
if (is.null(term)) {
stop("Model object does not support updating (no terms)", call. = FALSE)
}
if (!is.null(data)) call$data <- data
if (!is.null(formula)) call$formula <- update.formula(call$formula, formula)
env <- attr(term, ".Environment")
eval(call, env, parent.frame())}
model1 <- lmer(data~factor1*factor2 + (1 |subj), temp)
model1a <- my_update(model1, ~.-factor1:factor2)
anova(model1, model1a)
}
foo2()
मैं एक त्रुटि संदेश मिला द्वारा सुझाव की कोशिश की:
Error in as.data.frame.default(data) :
cannot coerce class 'structure("mer", package = "lme4")' into a data.frame
आर 2.15 में कोई त्रुटि नहीं के साथ मेरे लिए काम करता है।1, lme4 पैकेज लोड करने की आवश्यकता से अलग – MattBagg
क्या आप 'नकली' के बजाय 'temp'' lmer' को पास करना चाहते थे? – BenBarnes
क्षमा करें, हां, मैं अस्थायी – Alex