Soy relativamente nuevo en R, y estoy tratando de ajustar un modelo a los datos que consisten en una columna categórica y una columna numérica (entera). La variable dependiente es un número continuo.
Los datos tienen el siguiente formato:
predCateg, predIntNum, ResponseVar
Los datos se parecen a esto:
ranking, age_in_years, wealth_indicator
category_A, 99, 1234.56
category_A, 21, 12.34
category_A, 42, 234.56
....
category_N, 105, 77.27
¿Cómo modelaría esto (presumiblemente, usando un GLM), en R?
[[Editar]]
Se me acaba de ocurrir (después de analizar los datos más a fondo) que la variable independiente categórica está de hecho ordenada. Por lo tanto, he modificado la respuesta proporcionada anteriormente de la siguiente manera:
> fit2 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years, data=amort2)
>
> fit2
Call: glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years,
data = amort2)
Coefficients:
(Intercept) ordered(ranking).L ordered(ranking).Q ordered(ranking).C age_in_years
0.0578500 -0.0055454 -0.0013000 0.0007603 0.0036818
Degrees of Freedom: 39 Total (i.e. Null); 35 Residual
Null Deviance: 0.004924
Residual Deviance: 0.00012 AIC: -383.2
>
> fit3 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years + ordered(ranking)*age_in_years, data=amort2)
> fit3
Call: glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years +
ordered(ranking) * age_in_years, data = amort2)
Coefficients:
(Intercept) ordered(ranking).L ordered(ranking).Q
0.0578500 -0.0018932 -0.0039667
ordered(ranking).C age_in_years ordered(ranking).L:age_in_years
0.0021019 0.0036818 -0.0006640
ordered(ranking).Q:age_in_years ordered(ranking).C:age_in_years
0.0004848 -0.0002439
Degrees of Freedom: 39 Total (i.e. Null); 32 Residual
Null Deviance: 0.004924
Residual Deviance: 5.931e-05 AIC: -405.4
Estoy un poco confundido por lo que ordered(ranking).C
, ordered(ranking).Q
y ordered(ranking).L
media en la salida, y agradecería un poco de ayuda en la comprensión de esta salida, y cómo lo uso para predecir la variable de respuesta.
fuente
factor(ranking)
noas.factor(ranking)
?factor(x)
para poder incluir ellevels
argumento si lo deseo. También puede usarloas.factor(x)
si lo desea, y de hecho puede ser más rápido, pero creo que necesitaría un conjunto de datos bastante grande para que la velocidad de estas funciones sea importante.ordered(ranking).C
,ordered(ranking).Q
yordered(ranking).L
, ¿qué significan y cómo lo uso para predecir la variable de respuesta?), Cualquier ayuda será muy apreciada. Gracias.L
,,.Q
y.C
son, respectivamente, los coeficientes para el factor ordenado codificado con contrastes lineales, cuadráticos y cúbicos. El comandocontr.poly(4)
le mostrará la matriz de contraste para un factor ordenado con 4 niveles (3 grados de libertad, razón por la cual obtiene un polinomio de tercer orden).contr.poly(4)[2, '.L']
le dirá qué conectar para el segundo nivel ordenado en el término lineal. Tenga en cuenta que esto supone que tiene sentido considerar los niveles como igualmente espaciados. Si no es así, codifique su propia matriz de contraste.Recientemente respondí Variable dependiente continua con variable ordinal independiente , recomendando la
ordSmooth
función en elordPens
paquete. Utiliza la regresión penalizada para suavizar los coeficientes ficticios en los niveles de una variable ordinal para que no varíen demasiado de un nivel a otro. Por ejemplo, probablemente no desee quecategory_A
el coeficiente sea mucho más diferente decategory_B
que decategory_N
. Probablemente desee que los coeficientes aumenten o disminuyan monotónicamente, o al menos cambien gradualmente entre los rangos. Mi respuesta a la pregunta vinculada enumera referencias para obtener más información.ordSmooth
también puede acomodar variables continuas (y nominales); en su caso, el código podría ser:ordSmooth
requiere entrada numérica para datos ordinales, de ahí elas.numeric(ordered())
formateo.z
es para un vector numérico / matriz /data.frame
de predictores continuos.lambda
es el coeficiente de suavizado: los valores mayores empujarán sus coeficientes más cerca de cero. Puede ser prudente comenzar de a poco aquí. La impresiónSmoothFit
le dará coeficientes y valores ajustados, pero me temo que le deja el resto a usted.En su método, los coeficientes
ordered(ranking).C
/.Q
/.L
parecen estar etiquetados como cúbicos, cuadráticos y lineales, respectivamente. Si lo intentasglm(rnorm(10)~ordered(rep(1:5,2)))
, también obtendrás un coeficienteordered(rep(1:5, 2))^4
. No estoy realmente seguro de por qué estos se denotan con exponentes; No creo que los esté modelando como términos polinómicos, porque los coeficientes son diferentesglm(y~x+I(x^2)+I(x^3)+I(x^4))
y las variantes escaladas de esto. Deben ser códigos ficticios básicos .fuente