1 votos

Problemas de regresión y predicción

Me estoy divirtiendo mucho con el análisis de regresión en este momento, y por diversión me refiero a golpearme repetidamente en la cabeza. Tengo un conjunto de 200 puntos de datos, al filtrar sobre una propiedad de interés, termino con 153 puntos de uso.

Inicialmente utilicé estos 153 puntos para generar una regresión lineal, con un excelente R ${^2}$ y un gráfico de las variables ajustadas frente a las reales de una diagonal casi perfecta. Muy bien. Sin embargo, se sugirió que esto podría ser sólo un modelo internamente predictivo (que como yo lo entiendo significa que el modelo se ajusta a los datos, en lugar de lo contrario). Así que probé lo siguiente: Seleccioné al azar una muestra de 100 de los 153 resultados, y construí el mismo modelo, que seguía dando un ajuste relativamente bueno. A continuación, utilicé la función predict en R para intentar predecir el resultado de los otros 53 registros. No me fue bien. Lo que obtuve fue una de dos cosas.

  1. las predicciones no tenían ningún sentido, ni siquiera en la misma escala que los valores reales.
  2. la mayoría de las predicciones tenían sentido (aunque no eran muy precisas) y una o dos, estaban en una escala totalmente diferente (órdenes de magnitud mayores, o menores).

Dado que el modelo que estoy ajustando tiene el tiempo como variable de respuesta, se sugirió que utilizara una regresión de ajuste gamma en lugar de una regresión lineal simple. Probé esto y terminé esencialmente con el resultado.

Entonces, ¿estoy usando R correctamente, fue Gamma una buena opción para esto? Estoy bastante seguro de que mis datos son buenos (no sesgados), así que si soy incapaz de predecir, a pesar del buen modelo - ¿significa esto que mi modelo es inútil? He estado trabajando en esto durante algunas semanas, y sería genial si pudiera salvar algo.

Los comandos de R que he utilizado:

modelSet<-sample(1:nrow(myData),100)
modelData<-myData[modelSet,]
predictData<-myData[-modelSet,]

fit<-lm("time~(x1+x2+x3+x4+x5+x6)^3", data=modelData)
pred<-predict(fit, predictData)
plot(predictData$time, pred) <- gives a really not useful plot

fit2<-glm("time~(x1+x2+x3+x4+x5+x6)^3", data=modelData, family=Gamma) # tried with link=log too
pred2<-predict(fit2, predictData)
plot(predictData$time, pred2) <- gives an even less useful plot

3voto

jasonmray Puntos 1303

En el código R se esconde la información de que está intentando estimar 42 coeficientes de regresión a partir de 153 observaciones, & sin duda sobreajuste . Si ese modelo, que incluye todas las interacciones bidireccionales y tridireccionales entre seis predictores, es de especial interés, debe recopilar más observaciones para ajustarlo bien; de lo contrario, ajuste uno de tamaño más apropiado para el número de observaciones que tiene, tal vez seis para los términos lineales y sólo unas pocas interacciones probables o términos no lineales.

Las reglas generales dicen que en la mayoría de las situaciones en las que se desea ajustar un modelo de regresión a datos observacionales se necesitan al menos entre 10 y 20 observaciones para cada coeficiente estimado, además del intercepto, para evitar un ajuste excesivo. Los folletos de @Frank Harrell Estrategias de modelización de la regresión curso explicar cómo utilizar el estimador heurístico de reducción de le Cessie & van Houwelingen para ayudar a decidir cuántos coeficientes se pueden estimar de forma sensata en un caso particular, cuando el modelo que se ideó al principio está sobreajustado (§4.7.7, "¿Cuánta reducción de datos es necesaria?").

Su forma de comprobar la capacidad de predicción del modelo se basa en una idea sólida, y parece haber mostrado acertadamente un problema en este caso; pero los resultados van a variar mucho dependiendo de las 53 observaciones que se excluyan. Validación cruzada divide la muestra aleatoriamente muchas veces y promedia la métrica de ajuste fuera de la muestra, para dar una estimación más estable. Tenga en cuenta que cuando se hace una regresión ordinaria por mínimos cuadrados, el suma de cuadrados residuales predichos (PRESS) puede obtenerse analíticamente. En R press <- sum((residuals(fit)/(1 - lm.influence(fit)$hat))^2) .

Como dice @Glen_b, piensa primero en el sobreajuste y luego lee su respuesta aquí en los GLM gamma. Ajustar un modelo logarítmico normal sería más sencillo que un MLG gamma con un enlace logarítmico, y supongo que con tan pocas observaciones habría poco que elegir entre ellos.

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