2015-10-16 13 views
5

मैं आर में एक साधारण बहुपद प्रतिगमन bootstrap करने के लिए कोशिश कर रहा हूँ, और मैं एक त्रुटि हो रही है:आर में बूटस्ट्रैप Multinomial प्रतिगमन

Error in is.data.frame(data) : object 'd' not found

क्या वास्तव में अजीब बात है कि मैं एक ही कोड का उपयोग कर रहा है (यह करने के लिए समायोजित विशेष समस्या) बूट पैकेज at Quick-R के लिए एक ट्यूटोरियल में, और जब मैं अलग-अलग फ़ंक्शन (जैसे lm()) का उपयोग कर रहा हूं तो वही कोड भी काम करता है। निश्चित रूप से, मैं कुछ बेवकूफ कर रहा हूं, लेकिन मुझे नहीं पता कि क्या। कृपया, अगर कोई मदद कर सकता है, तो मैं बहुत सराहना करता हूं।

require(foreign) 
require(nnet) 
require(boot) 

# an example for multinomial logistic regression 
ml = read.dta('http://www.ats.ucla.edu/stat/data/hsbdemo.dta') 
ml = ml[,c(5,7,3)] 

bs <- function(formula, data, indices) { 
    d = data[indices,] # allows boot to select sample 
    fit = multinom(formula, data=d) 
    s = summary(fit) 
    return(list(fit$coefficients, fit$standard.errors)) 
} 

# 5 replications 
results = list() 
results <- boot(
    data=ml, statistic=bs, R=5, parallel='multicore', 
    formula=prog~write 
) 
+0

कृपया अपने प्रश्न में 'traceback()' के आउटपुट को पोस्ट करें। –

+0

मैंने कुछ सुस्त कर दिया, और इससे समाधान हो सकता है: पर्यावरण के साथ कुछ चल रहा है ('बीएस 'फ़ंक्शन के अंदर से स्ट्रिंग (फिट) प्रिंट करके देखा गया है। यह वैश्विक रूप से सेट है, जब आप एक फॉर्मूला पास करते हैं और सूत्र के पास वेवेशन है जिसमें वे बनाए गए थे (देखें? फॉर्मूला)। हालांकि इसे अभी ठीक करने का तरीका न देखें। – Heroka

उत्तर

0

त्रुटि summary() भाग में होता है, यह भी वस्तु multinom() द्वारा दिया coefficients और standard.errors नहीं है:

यह एक उदाहरण है। ऐसा लगता है कि summary.multinom() बदले में आपके डेटा, d से हेसियन की गणना करता है, जो कि किसी कारण से (शायद एक स्कोपिंग समस्या) नहीं मिल सकता है। एक त्वरित सुधार Hess = TRUE जोड़ने के लिए है:

bs <- function(formula, data, indices) { 
    d = data[indices,] # allows boot to select sample 
    fit = multinom(formula, data=d, Hess = TRUE) 
    s = summary(fit) 
    return(cbind(s$coefficients, s$standard.errors)) 
} 

# 5 replications 
results = list() 
results <- boot(
    data=ml, statistic=bs, R=5, parallel='multicore', 
    formula=prog~write 
) 
0

Multinomial रसद प्रतिगमन coef() समारोह का उपयोग कर गुणांकों के एक मैट्रिक्स देता है। यह lm या glm मॉडल से भिन्न है जो गुणांक का वेक्टर देता है।

library(foreign)  # read.dta() 
library(nnet)  # multinom() 
require(boot)  # boot() 

# an example for multinomial logistic regression 
ml = read.dta('http://www.ats.ucla.edu/stat/data/hsbdemo.dta') 
ml = ml[,c(5,7,3)] 

names(ml) 

bs <- function(formula, data, indices) { 
    d = data[indices,] # allows boot to select sample 
    fit = multinom(formula, data=d, maxit=1000, trace=FALSE) 
    #s = summary(fit) 
    #return(list(fit$coefficients, fit$standard.errors)) 

    estimates <- coef(fit) 
    return(t(estimates)) 
} 

# enable parallel 

library(parallel) 
cl <- makeCluster(2) 
clusterExport(cl, "multinom") 

# 10000 replications 
set.seed(1984) 

results <- boot(
    data=ml, statistic=bs, R=10000, parallel = "snow", ncpus=2, cl=cl, 
    formula=prog~write 
) 

# label the estimates 

subModelNames <- colnames(results$t0) 
varNames <- rownames(results$t0) 

results$t0 

estNames <- apply(expand.grid(varNames,subModelNames),1,function(x) paste(x,collapse="_")) 

estNames 

colnames(results$t) <- estNames 

# summary of results 

library(car) 

summary(results) 

confint(results, level=0.95, type="norm") 
confint(results, level=0.95, type="perc") 
confint(results, level=0.95, type="bca") 

# plot the results 

hist(results, legend="separate") 
संबंधित मुद्दे