2015-10-16 104 views
5

我試圖引導R中一個簡單的多項式迴歸,而我得到一個錯誤:R中引導多項式迴歸

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()'的輸出。 – 2015-10-16 12:20:41

+0

我做了一些調查,這可能會導致一個解決方案:環境中會出現一些問題(從「bs」函數內部打印str(fit)),它被設置爲全局的,當您通過公式公式的創建就是在這個環境中創建的(參見公式)。但是現在看不到如何解決它。 – Heroka

回答

0

該錯誤發生在summary()部分,也由multinom()返回的對象不具有coefficientsstandard.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

多項Logistic迴歸返回使用coef()函數係數矩陣。這與返回係數向量的lmglm模型不同。

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