2 votos

Comprender cómo probar un modelo Logit con datos nuevos

Tengo dificultades para entender algo. Digamos que tengo datos y construyo un modelo logit sobre esos datos. Ahora, digamos que tengo un conjunto de datos similar y más reciente con esas mismas variables, y me pregunto si el modelo original predice lo mismo en los nuevos datos. ¿Son los valores expresados en el primer modelo logit también similares en los nuevos datos? Correcto, así que me preguntaba cómo se hace esto en R. ¿Es sólo una cuestión de especificar los nuevos datos cuando se trata de predecir.

No entiendo del todo el concepto ni la aplicación de esta idea. Se agradece cualquier ayuda.

df = data.frame(sell=c("0","1","0","0","1"), home=c("own","rent","rent","rent","own"),
                income=c(50,20,20,50,50), gender=c("M","M","F","F","F"))
df$sell = as.factor(df$sell)
df$home = as.factor(df$home)
df$income = as.factor(df$income)
df$gender = as.factor(df$gender)
str(df)
m1 = glm(factor(sell) ~ home + income + gender,
         data=df, family=binomial(link="logit"))
summary(m1)

new.df = data.frame(sell=c("1","1","1","0","0"), home=c("own","own","rent","rent","own"),
                    income=c(30,30,30,50,50), gender=c("M","M","F","M","F"))
m2 = glm(factor(sell) ~ home + income + gender,
         data=new.df, family=binomial(link="logit"))
summary(m2)

¿Cómo puedo responder a la pregunta de si el modelo original (m1) predijo correctamente los valores de los nuevos datos (new.df)?

Gracias.

1voto

bhagyas Puntos 101

¿Qué pasaría si sólo ajustara el primer modelo m1 y luego utilizara la función "predecir" para predecir las respuestas (vender) para los nuevos datos (véase, por ejemplo. http://stat.ethz.ch/R-manual/R-patched/library/stats/html/predict.glm.html ).

A continuación, puede utilizar una prueba de Hosmer-Lemeshow (ya que la respuesta es binaria) para comparar los valores previstos con la respuesta observada (venta) en el nuevo conjunto de datos y evaluar si el modelo se ajusta correctamente (véase http://sas-and-r.blogspot.co.uk/2010/09/example-87-hosmer-and-lemeshow-goodness.html ).

1voto

Funkatron Puntos 757

Consulte la función crossval en el paquete bootstrap para comprobar la proporción de respuestas predichas correctamente en los nuevos datos.

Código de ejemplo:

fitLogistic = function(x,y){
  tmp=data.frame(cbind(y,x))
  fit=glm(y~.,family=binomial,data=tmp)
  fit
} 
predict.logistic = function(fitLog,x){
  x=as.data.frame(x)
  pred.logistic=predict(fitLog,newdata=x,type='response')
  ifelse(pred.logistic>=.5,1,0)
} 
resCVLog = crossval(data1[,-1], data1[,1], fitLogistic, predict.logistic, ngroup = 10)
sum(resCVLog$cv.fit==data1[,1]) / length(data1[,1])

Esto supone que sus datos están almacenados en un marco de datos llamado data1 donde la primera columna son las respuestas y el punto de corte para determinar la clasificación es .5.

Una "buena" tasa de predicción depende de su campo, aunque debería ser mejor que adivinar al azar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X