Oggi ho realizzato uno strano comportamento con il mio codice R. Ho provato un pacchetto {boot.StepAIC} che include una funzione bootstrap per i risultati della regressione stepwise con AIC. Comunque non credo che lo sfondo statistico sia qui il problema (lo spero).
Posso usare la funzione al livello superiore di R. Questo è il mio codice di esempio.funziona (boot.stepAIC) ma genera un errore all'interno di un'altra funzione: problema di ambiente?
require(MASS)
require(boot.StepAIC)
n<-100
x<-rnorm(n); y<-rnorm(n,sd=2); z<-rnorm(n,sd=3); res<-x+y+z+rnorm(n,sd=0.1)
dat.test<-as.data.frame(cbind(x,y,z,res))
form.1<-as.formula(res~x+y+z)
boot.stepAIC(lm(form.1, dat.test),dat.test) # should be OK - works at me
Tuttavia, ho voluto avvolgerlo in una propria funzione. Trasmetto i dati e la formula a quella funzione. Ma ottengo un errore all'interno boot.stepAIC() dicendo:
l'adattamento del modello non è riuscita in 100 campioni di bootstrap Errore in strsplit (nam.vars, ":"): argomento non-personaggio
# custom function
fun.boot.lm.stepAIC<-function(dat,form) {
if(!inherits(form, "formula")) stop("No formula given")
fit.lm<-lm(formula=form,data=dat)
return(boot.stepAIC(object=fit.lm,data=dat))
}
fun.boot.lm.stepAIC(dat=dat.test,form=form.1)
# results in an error
Quindi dov'è l'errore? Suppongo che debba avere qualcosa a che fare con l'ambiente locale e globale, vero?
Non ho usato 'boot.stepAIC' prima, ma il sospetto che può anche avere a che fare con il modo la formula di essere passato alla funzione (che è legato alle questioni ambientali troppo). Vedi http://stackoverflow.com/q/6877534, http://stackoverflow.com/q/7666807 per alcune idee. In particolare, chiamare 'lm' o' boot.stepAIC' tramite 'do.call' può essere d'aiuto nel momento in cui gli argomenti vengono valutati prima di essere passati. Si può anche indagare sul suggerimento' as.name' nei commenti. Questi problemi sono complicati: buona fortuna! – Aaron
http://stackoverflow.com/q/8998884/210673 sembra essere lo stesso problema. – Aaron
sì. Ho già letto questo. Suppongo che i problemi siano collegati. – Sebastian