Sou relativamente novo em R e estou tentando ajustar um modelo aos dados que consistem em uma coluna categórica e uma coluna numérica (número inteiro). A variável dependente é um número contínuo.
Os dados têm o seguinte formato:
predCateg, predIntNum, ResponseVar
Os dados são mais ou menos assim:
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
Como eu modelaria isso (presumivelmente, usando um GLM), em R?
[[Editar]]
Apenas me ocorreu (depois de analisar os dados mais detalhadamente), que a variável independente categórica é de fato ordenada. Por isso, modifiquei a resposta fornecida anteriormente da seguinte maneira:
> 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
Estou um pouco confuso com o que ordered(ranking).C
, ordered(ranking).Q
e ordered(ranking).L
média na saída, e gostaria de receber alguma ajuda na compreensão desta saída, e como usá-lo para prever a variável resposta.
fonte
factor(ranking)
e nãoas.factor(ranking)
?factor(x)
para poder incluir olevels
argumento, se desejar. Você também pode usar,as.factor(x)
se desejar, e pode ser mais rápido, mas acho que você precisaria de um conjunto de dados bastante grande para que a velocidade dessas funções seja importante.ordered(ranking).C
,ordered(ranking).Q
eordered(ranking).L
- o que eles significam e como usá-lo para prever a variável de resposta?) - qualquer ajuda será muito apreciada. Obrigado.L
,,.Q
e.C
são, respectivamente, os coeficientes para o fator ordenado codificado com contrastes linear, quadrático e cúbico. O comandocontr.poly(4)
mostrará a matriz de contraste para um fator ordenado com 4 níveis (3 graus de liberdade, e é por isso que você obtém um polinômio de terceira ordem).contr.poly(4)[2, '.L']
lhe dirá o que conectar para o segundo nível ordenado no termo linear. Esteja ciente de que isso pressupõe que faz sentido considerar os níveis igualmente espaçados. Caso contrário, codifique sua própria matriz de contraste.Recentemente, respondi a variável dependente contínua com variável independente ordinal , recomendando a
ordSmooth
função noordPens
pacote. Isso usa regressão penalizada para suavizar os coeficientes fictícios nos níveis de uma variável ordinal, para que eles não variem muito de um nível para o outro. Por exemplo, você provavelmente não gostaria quecategory_A
o coeficiente fosse muito mais diferente docategory_B
quecategory_N
. Você provavelmente desejaria que os coeficientes aumentassem ou diminuíssem monotonicamente, ou pelo menos mudassem gradualmente entre fileiras. Minha resposta à pergunta vinculada lista referências para mais informações.ordSmooth
também pode acomodar variáveis contínuas (e nominais); no seu caso, o código pode ser:ordSmooth
requer entrada numérica para dados ordinais, daí aas.numeric(ordered())
reformatação.z
é para um vetor numérico / matriz /data.frame
de preditores contínuos.lambda
é o coeficiente de suavização - valores maiores empurrarão seus coeficientes para mais perto de zero. Pode ser sensato começar pequeno aqui. A impressãoSmoothFit
fornecerá coeficientes e valores adequados, mas receio que deixe o resto para você.No seu método, os coeficientes
ordered(ranking).C
/.Q
/.L
parecem rotulados como cúbicos, quadráticos e lineares, respectivamente. Se você tentarglm(rnorm(10)~ordered(rep(1:5,2)))
, também receberá um coeficienteordered(rep(1:5, 2))^4
. Não sei ao certo por que esses são indicados com expoentes; Não acho que esteja modelando esses termos como termos polinomiais, porque os coeficientes são diferentesglm(y~x+I(x^2)+I(x^3)+I(x^4))
e variam em escala disso. Eles devem ser códigos fictícios básicos .fonte