Je suis relativement nouveau dans R et j'essaie d'adapter un modèle à des données qui se composent d'une colonne catégorielle et d'une colonne numérique (entière). La variable dépendante est un nombre continu.
Les données ont le format suivant:
predCateg, predIntNum, ResponseVar
Les données ressemblent à ceci:
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
Comment pourrais-je modéliser cela (probablement, en utilisant un GLM), dans R?
[[Éditer]]
Il m'est venu à l'esprit (après une analyse plus approfondie des données), que la variable indépendante catégorielle est en fait ordonnée. J'ai donc modifié la réponse fournie précédemment comme suit:
> 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
Je suis un peu confus par ce que ordered(ranking).C
, ordered(ranking).Q
et ordered(ranking).L
moyenne dans la production, et apprécierait un peu d' aide pour comprendre cette sortie, et comment l'utiliser pour prédire la variable de réponse.
la source
factor(ranking)
et nonas.factor(ranking)
?factor(x)
pour pouvoir inclure l'levels
argument si je le souhaite. Vous pouvez également l'utiliseras.factor(x)
si vous le souhaitez, et cela peut en fait être plus rapide, mais je pense que vous auriez besoin d'un ensemble de données assez important pour que la vitesse de ces fonctions soit importante.ordered(ranking).C
,ordered(ranking).Q
etordered(ranking).L
- que signifient-ils et comment puis-je l'utiliser pour prédire la variable de réponse?) - toute aide sera très appréciée. Merci.L
,,.Q
et.C
sont, respectivement, les coefficients du facteur ordonné codés avec des contrastes linéaires, quadratiques et cubiques. La commandecontr.poly(4)
vous montrera la matrice de contraste pour un facteur ordonné à 4 niveaux (3 degrés de liberté, c'est pourquoi vous obtenez un polynôme de troisième ordre).contr.poly(4)[2, '.L']
vous dira quoi brancher pour le deuxième niveau ordonné dans le terme linéaire. Sachez que cela suppose qu'il est logique de considérer les niveaux comme étant également espacés. Si ce n'est pas le cas, codez votre propre matrice de contraste.J'ai récemment répondu Variable dépendante continue avec variable indépendante ordinale , recommandant la
ordSmooth
fonction dans leordPens
package. Cette méthode utilise une régression pénalisée pour lisser les coefficients fictifs à travers les niveaux d'une variable ordinale afin qu'ils ne varient pas trop d'un niveau à l'autre. Par exemple, vous ne voudriez probablement pas quecategory_A
le coefficient soit beaucoup plus différent decategory_B
que decategory_N
. Vous voudriez probablement que les coefficients augmentent ou diminuent de façon monotone, ou du moins changent progressivement d'un rang à l'autre. Ma réponse à la question liée répertorie les références pour plus d'informations.ordSmooth
peut également accueillir des variables continues (et nominales); dans votre cas, le code pourrait être:ordSmooth
nécessite une entrée numérique pour les données ordinales, d'où leas.numeric(ordered())
reformatage.z
est pour un vecteur numérique / matrice /data.frame
de prédicteurs continus.lambda
est le coefficient de lissage - des valeurs plus élevées rapprocheront vos coefficients de zéro. Pourrait être sage de commencer petit ici. L'impressionSmoothFit
vous donnera des coefficients et des valeurs ajustées, mais je crains que cela ne vous laisse le reste.Dans votre méthode, les coefficients
ordered(ranking).C
/.Q
/.L
semblent être étiquetés comme cubique, quadratique et linéaire, respectivement. Si vous essayezglm(rnorm(10)~ordered(rep(1:5,2)))
, vous obtiendrez également un coefficient pourordered(rep(1:5, 2))^4
. Je ne sais pas vraiment pourquoi ceux-ci sont indiqués avec des exposants; Je ne pense pas que cela modélise ces termes comme des termes polynomiaux, car les coefficients sont différentsglm(y~x+I(x^2)+I(x^3)+I(x^4))
et leurs variantes sont mises à l'échelle. Il doit s'agir de codes factices de base .la source