Hoy me di cuenta de un comportamiento extraño con mi código R. Intenté un paquete {boot.StepAIC} que incluye una función de arranque para los resultados de la regresión paso a paso con el AIC. Sin embargo, no creo que el fondo estadístico sea aquí el problema (eso espero).
Puedo usar la función en el nivel superior de R. Este es mi código de ejemplo.funciona (boot.stepAIC) pero arroja un error dentro de otra función: ¿problema de entorno?
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
Sin embargo, quería envolverlo en una función propia. Paso los datos y la fórmula a esa función. Pero me da un error dentro de boot.stepAIC() diciendo:
el ajuste del modelo fracasó en 100 muestras de arranque Error en strsplit (nam.vars, ":"): argumento que no es de carácter
# 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
Entonces, ¿dónde está el error? Supongo que debe tener algo que ver con el entorno local y global, ¿no?
No he usado 'boot.stepAIC' antes, pero sospecho que también puede tener que ver con cómo se pasa la fórmula a la función (que también está relacionada con los problemas del entorno). Consulte http://stackoverflow.com/q/6877534, http://stackoverflow.com/q/7666807 para obtener algunas ideas. En particular, la invocación de 'lm' o' boot.stepAIC' a través de 'do.call' puede ser útil ya que los argumentos se evalúan antes de pasarlos. También puede investigar la sugerencia' as.name' en los comentarios. Estos problemas son difíciles: ¡buena suerte! – Aaron
http://stackoverflow.com/q/8998884/210673 también parece ser el mismo problema. – Aaron
sí. Leí esto ya. Supongo que los problemas están conectados. – Sebastian