Em um modelo de logit, existe uma maneira mais inteligente de determinar o efeito de uma variável ordinal independente do que usar variáveis fictícias para cada nível?
Em um modelo de logit, existe uma maneira mais inteligente de determinar o efeito de uma variável ordinal independente do que usar variáveis fictícias para cada nível?
Respostas:
Para adicionar à resposta de @ dmk38, "qualquer conjunto de pontuações fornece um teste válido , desde que elas sejam construídas sem consultar os resultados do experimento. Se o conjunto de pontuações for ruim, distorce gravemente uma escala numérica que realmente está subjacente à classificação ordenada, o teste não será sensível. Portanto, as pontuações devem incorporar a melhor percepção disponível sobre a maneira como a classificação foi construída e usada ". (Cochran, 1954, citado por Agresti, 2002, pp. 88-89). Em outras palavras, tratar um fator ordenado como uma variável numerada é apenas um problema de modelagem. Desde que faça sentido, isso afetará apenas a maneira como você interpreta o resultado, e não há uma regra definitiva sobre como escolher a melhor representação para uma variável ordinal.
Considere o seguinte exemplo sobre o consumo materno de álcool e a presença ou ausência de malformação congênita (Agresti, Análise de dados categóricos , Tabela 3.7 p.89):
0 <1 1-2 3-5 6+
Absent 17066 14464 788 126 37
Present 48 38 5 1 1
Nesse caso em particular, podemos modelar o resultado usando regressão logística ou tabela de associação simples. Vamos fazer isso em R:
tab3.7 <- matrix(c(17066,48,14464,38,788,5,126,1,37,1), nr=2,
dimnames=list(c("Absent","Present"),
c("0","<1","1-2","3-5","6+")))
library(vcd)
assocstats(tab3.7)
As estatísticas usuais (12,08, p = 0,016751) ou LR (6,20, p = 0,184562) (com 4 df) não representam os níveis ordenados no consumo de álcool.
Tratando ambas as variáveis como ordinais com pontuações igualmente espaçadas (isso não tem impacto para variáveis binárias, como malformação, e escolhemos a linha de base como 0 = ausente), poderíamos testar uma associação linear por linear. Vamos primeiro construir uma versão explodida desta tabela de contingência:
library(reshape)
tab3.7.df <- untable(data.frame(malform=gl(2,1,10,labels=0:1),
alcohol=gl(5,2,10,labels=colnames(tab3.7))),
c(tab3.7))
# xtabs(~malform+alcohol, tab3.7.df) # check
Em seguida, podemos testar uma associação linear usando
library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)
que produz com . Observe que essa estatística é simplesmente a correlação entre as duas séries de pontuações (que Agresti chamou ), que é prontamente calculada comop = 0,1764 M 2 = ( n - 1 ) r 2
cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)
Como pode ser visto, não há muita evidência de uma associação clara entre as duas variáveis. Conforme feito por Agresti, se optarmos por recodificar os níveis de álcool como {0,0.5,1.5,4,7}, que está usando valores intermediários para uma escala contínua hipotética, com a última pontuação um tanto puramente arbitrária, concluiríamos para um efeito maior do consumo materno de álcool no desenvolvimento de malformação congênita:
lbl_test(malform ~ alcohol, data=tab3.7.df,
scores=list(alcohol=c(0,0.5,1.5,4,7)))
produz uma estatística de teste de 6,57 com um valor de p associado de 0,01037.
Existem esquemas de codificação alternativos, incluindo midranks (nesse caso, recorremos a Spearman vez de Pearson ) que são discutidos pela Agresti, mas espero que você entenda a ideia geral aqui: É melhor selecionar pontuações que realmente reflitam uma medida razoável da distância entre categorias adjacentes de sua variável ordinal e espaçamento igual geralmente é um bom compromisso (na ausência de justificativa teórica).r
Usando a abordagem GLM, procederíamos da seguinte maneira. Mas primeiro verifique como o álcool é codificado em R:
class(tab3.7.df$alcohol)
É um fator simples e não ordenado ( "factor"
), portanto, um preditor nominal. Agora, aqui estão três modelos nos quais consideramos o álcool como um preditor nominal, ordinal ou contínuo.
summary(mod1 <- glm(malform ~ alcohol, data=tab3.7.df,
family=binomial))
summary(mod2 <- glm(malform ~ ordered(alcohol), data=tab3.7.df,
family=binomial))
summary(mod3 <- glm(malform ~ as.numeric(alcohol), data=tab3.7.df,
family=binomial))
O último caso assume implicitamente uma escala de intervalo igual e o é interpretado como @ dmk38: reflete o efeito de um aumento de uma unidade de álcool no resultado através do link logit, que é o aumento da probabilidade de observar uma malformação (comparada com nenhuma malformação, isto é, o odds ratio) é . O teste de Wald não é significativo no nível usual de 5%. Nesse caso, a matriz de projeto inclui apenas 2 colunas: a primeira é uma coluna constante de 1 para a interceptação, a segunda é o valor numérico (1 a 5) para o preditor, como em uma regressão linear simples. Em suma, este modelo testa um efeito linear do álcool no resultado (na escala logit). exp( θ )=exp(0,228)=1,256
No entanto, nos dois outros casos ( mod1
e mod2
), obtemos resultados diferentes porque a matriz de design usada para modelar o preditor difere, como pode ser verificado usando:
model.matrix(mod1)
model.matrix(mod2)
Podemos ver que a matriz de design associada para mod1
inclui variáveis fictícias para os níveis de álcool (0 é sempre a linha de base) após o termo de interceptação na primeira coluna, enquanto que no caso temos quatro colunas de efeitos codificados por contraste (após a coluna de 1 para a interceptação). O coeficiente para a categoria "3-5" é estimado em 1.03736 abaixo , mas 0.01633 abaixo . Observe que a AIC e outras medidas baseadas em probabilidade permanecem, no entanto, idênticas entre esses dois modelos.mod2
mod1
mod2
Você pode tentar atribuir novas pontuações ao Álcool e ver como isso afetará a probabilidade prevista de uma malformação.
é perfeitamente bom usar um preditor categórico em um modelo de regressão logit (ou OLS) se os níveis forem ordinais. Mas se você tiver um motivo para tratar cada nível como discreto (ou se de fato sua variável categórica for nominal e não ordinal), então, como alternativa à codificação fictícia, você também poderá usar a codificação de contraste ortogonal. Para uma discussão muito completa e acessível, consulte Judd, CM, McClelland, GH & Ryan, Análise de dados do CS: uma abordagem de comparação de modelos, Edn. 2nd. (Routledge / Taylor e Francis, Nova York, NY; 2008), ou apenas "codificação de contraste" do google