4 votos

¿Deben tratarse las variables discretas continuas como numéricas u ordinales (en un MLG)?

No estoy seguro de cómo tratar una variable continua discretizada / binned en el glm() en R. Veo dos formas posibles de introducirla en el glm. O bien introduzco la variable binned tal cual o bien creo una representación numérica continua de la misma utilizando as.integer() ? ¿Qué método consideraría "estándar" de entre estos métodos?

Esto es lo que he probado: En primer lugar, la variable continua almacenada en mis datos es la edad de un individuo. En este momento he dividido esta variable continua en los siguientes niveles: (16-21 22-27 28-33 34-39 40-45 46-51 52-57 58-63 64-69 70+). Supongamos que la variable binned se llama ageBinned .

Ahora no estoy seguro de cómo alimentar esta variable agrupada a la glm() después del binning. En este momento he ordenado los grupos utilizando factor() y relevel() . Cuando ajusto el MLG basado en esta covariable, no sé cómo interpretar el resultado.

Ajuste del modelo mediante ageBinned

poisson.glm <- glm(NoClaims ~  ageBinned, family = poisson(link=log), 
                   data=data, offset=log(Duration))

Obtengo el siguiente resultado:

Coefficients:
   (Intercept)  ageBinned22-27  ageBinned28-33  ageBinned34-39  ageBinned40-45  
      -2.23763         0.43223         0.43151         0.37040         0.31978  
ageBinned46-51  ageBinned52-57  ageBinned58-63  ageBinned64-69    ageBinned70+  
      -0.21415        -0.80053        -0.08639        -0.27468        -0.74130 

Ajuste del modelo utilizando as.integer(ageBinned):
Si en cambio trato el grupo binned como numérico utilizando as.integer(ageBinned) obtengo el siguiente resultado:

 (Intercept) as.integer(ageBinned) 
 -1.80403065           -0.03616828 

Preguntas:

  1. Cuando miro la segunda salida, al utilizar as.integer(ageBinned) interpreto "Interceptar" como $\beta_0$ y el segundo parámetro de salida como $\beta_{age \; group}$ . Sin embargo, no sé cómo interpretar la salida del primer glm() en el que he utilizado ageBinned .
  2. ¿Qué método consideraría "estándar" de entre estos métodos?
  3. ¿Cómo se calculan los valores de ageBinned se refieren a los parámetros de regresión $\beta_{age \; group}$ ? ¿Existe todavía un único $\beta_{age \; group}$ ? ¿Sigue teniendo la siguiente forma la relación entre las covariables y el parámetro de regresión?

\begin{equation} \log(\mu_i) = \beta_0 + \beta_{\rm age \; group}\cdot x \end{equation}


ACTUALIZACIÓN

Parece como si hacer ageBinned en una variable categórica ordinal es la mejor alternativa para mí. Sin embargo, no sé exactamente cómo conseguirlo. He intentado ordenar las ageBinned mediante el siguiente comando

data$ageBinned = factor(data$ageBinned ,
                              ordered = TRUE,
                              levels = c("16-21", "22-27", "28-33", "34-39",
                                         "40-45", "46-51", "52-57", "58-63","64 69", "70+"))

Al ponerlas en el glm() recibo los siguientes parámetros

                              Estimate Std. Error z value Pr(>|z|)    
(Intercept)                    -2.2939     0.1425 -16.095   <2e-16 ***
claim.data$age.group.factor.L  -1.0050     0.5865  -1.713   0.0866 .  
claim.data$age.group.factor.Q  -0.3142     0.5650  -0.556   0.5781    
claim.data$age.group.factor.C   0.4275     0.5231   0.817   0.4138    
claim.data$age.group.factor^4  -0.4126     0.4821  -0.856   0.3921    
claim.data$age.group.factor^5  -0.3993     0.4590  -0.870   0.3843    
claim.data$age.group.factor^6  -0.1530     0.3979  -0.385   0.7005    
claim.data$age.group.factor^7   0.3577     0.3413   1.048   0.2946    
claim.data$age.group.factor^8   0.3474     0.3202   1.085   0.2779    
claim.data$age.group.factor^9   0.0819     0.2663   0.308   0.7584 

Preguntas

  • ¿Es ésta la forma correcta de ordenar las variables?
  • En caso afirmativo, ¿cómo se relaciona este resultado con el parámetro de regresión $\beta_{age}$ ?
  • Si quiero calcular la log-verosimilitud de este modelo sin utilizar un paquete R, entonces necesito poder calcular \begin{equation} \log(\mu_i) = \beta_0 + \beta_{\rm age \; group}\cdot x \end{equation} ¿cómo lo consigo con las variables categóricas ordenadas (qué pondría para x)?

5voto

EdM Puntos 5716

Aunque parezca que sólo tienes un predictor cuando escribes el modelo

glm(NoClaims ~  ageBinned)

En realidad, lo que se ha hecho es definir un nuevo conjunto de predictores, con un predictor para cada casilla a partir de la primera. En su caso son 9 predictores. (El grupo 16-21 es la referencia).

Es posible especificar que los bins representen niveles progresivos de un ordinal predictor, pero usted no lo ha hecho. Por lo tanto, su modelo tratará cada intervalo de edad por separado a pesar del orden natural por edad.

Así que ya no hay un único $\beta_{age}$ . En su modelo, el intercepto es el valor de la franja de edad de referencia (16-21) y (con la codificación habitual por defecto de "contrastes de tratamiento" de un predictor categórico) cada uno de los 9 coeficientes representa la diferencia de una franja de la ubicación de referencia .

Ha añadido 8 predictores más de los que tendría en el modelo simple con la edad como predictor lineal continuo, ha establecido límites arbitrarios que hacen que las predicciones para una persona de 57 años sean notablemente diferentes de las de una de 58, y ha desechado la información proporcionada por el orden natural de las edades. Estas son algunas de las razones por las que el binning es no es una buena idea .

Si utiliza as.integer(age.group) como predictor estás haciendo la suposición de que la diferencia sucesiva entre cada grupo de edad es la misma. El intercepto es el valor para el grupo de referencia de 16-21 años, y la pendiente es el cambio para cada tramo adicional a partir de esa edad. Con grupos espaciados uniformemente como el tuyo, eso supone una relación lineal con la edad (excepto para el grupo de más de 70 años). Eso no te hace ganar nada respecto a un modelo que utilice la edad como predictor lineal. Se sigue descartando la posibilidad de una contribución no lineal de la edad al resultado.

Tratar sus grupos como predictores ordinales respetaría mejor el orden natural, ya que la codificación por defecto en R sería " contrastes polinómicos ". Los coeficientes resultantes no son fáciles de interpretar en términos de los intervalos originales, pero pueden obtenerse predicciones para cualquier edad concreta con la función predict() función. Sin embargo, tendrá que estimar 9 coeficientes además del intercepto.

Si necesita estimaciones a determinadas edades o intervalos de edad para una aplicación posterior, es mucho mejor que utilice un modelo de regresión continua, con splines cúbicos restringidos de la edad como predictor. Probablemente sólo tendrá que añadir de 1 a 3 predictores adicionales mediante el modelo de splines para obtener un ajuste razonable más allá del modelo lineal para la edad, frente a los 8 adicionales con sus intervalos. Esto reduce el riesgo de sobreajuste, por lo que es más probable que el modelo generalice bien. Luego, para la aplicación posterior, extraiga predicciones para las edades o rangos de edad de ejemplo particulares del modelo continuo, utilizando predict() . Ese, en lugar del binning previo, sería el enfoque "estándar" para su problema.

3voto

Sean Hanley Puntos 2428

@EdM ha dado una buena respuesta. El binning no es una buena idea en general, ni aquí en concreto. Permítanme añadir un par de puntos complementarios.

  1. Yo no me fiaría de "la literatura" que dice que no hay diferencia entre los 26 y los 27 años. Es de esperar que las diferencias entre valores casi idénticos sean muy pequeñas. No habrá potencia para detectar esas diferencias. Tenga en cuenta que el uso de intervalos supone que existe una diferencia significativa entre las personas de 27 y 28 años.
  2. En R, si utiliza as.integer(ageBinned) convierte el ageBinned niveles en 1,2,3,...,10 (mientras que el binning convertía los valores originales en bins no relacionados). Esto significa que estás ajustando una serie de funciones escalonadas que se incrementan constantemente.
  3. Si hace la categórica ageBinned en una variable categórica ordinal, utilizará el mismo número de grados de libertad, sólo que se descompondrán en ajustes lineales y curvilíneos cada vez más complejos.

  1. Su mejor opción es reajustar el modelo posterior (o encontrar uno mejor) para que pueda utilizar la edad como continua.
  2. Suponiendo que no pueda, utilice aquí la edad como continua y, a continuación, promedie los valores predichos a partir de este modelo ( $\hat{y}$ s) dentro de cada recipiente para obtener los valores que utilizará para el modelo posterior.
  3. Tenga en cuenta que para ello tendrá que hacer algunas suposiciones sobre la distribución de las edades dentro de los intervalos. Puede que haya algunos datos (por ejemplo, censos) que puedas utilizar, pero también puede que no haya mucha diferencia y que simplemente utilices una distribución uniforme dentro de cada intervalo.

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