2015-10-16 22 views
5

Ben R basit multinomial gerileme bootstrap çalışıyorum ve bir hata alıyorum:Bootstrap Multinomial regresyon

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

Gerçekten garip ben aynı kodu kullanıyorum olmasıdır (bu ayarlanabilir özel sorun) at Quick-R önyükleme paketi için bir öğreticide olduğu gibi, ve aynı işlev (lm() gibi) farklı işlevler kullandığımda da çalıştı. Elbette, aptalca bir şey yapıyorum ama ne olduğunu görmüyorum. Lütfen, eğer birileri yardım edebilirse, çok memnun olurum.

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

Sorunuzdaki 'traceback()' çıktısını gönderin. –

+0

Ben biraz terbiye ettim ve bu bir çözüm yol açabilir: çevreye giren bir şey var (sts (fit) 'i bs' işlevinin içinden yazdırmakla görülür. Bir formül geçirirken global olarak ayarlanır. ve formüller, yaratıldıkları enivronmente sahipler (bkz. formül). Şimdi nasıl düzeltileceğini görmüyorum. – Heroka

cevap

0

hata, multinom() tarafından döndürülen nesne coefficients ve standard.errors sahip değildir, summary() bölümünde gerçekleşir:

Bu

bir örnektir. Görünüşe göre, summary.multinom(), bir nedenle (muhtemelen bir kapsam belirleme sorunu) bulunamayan, d verilerinden kendir hesaplar. Hızlı bir düzeltme Hess = TRUE eklemektir:

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

Multinominal lojistik regresyon coef() işlevini kullanarak bir katsayılar matrisi döndürür. Bu, katsayıların bir vektörünü döndüren lm veya glm modelinden farklıdır.

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")