Estou tentando fazer uma regressão logit ordenada. Estou executando o modelo assim (apenas um pequeno modelo burro que estima o número de empresas em um mercado a partir de medidas de renda e população). Minha pergunta é sobre previsões.
nfirm.opr<-polr(y~pop0+inc0, Hess = TRUE)
pr_out<-predict(nfirm.opr)
Quando executo o prognóstico (que estou tentando usar para obter o y previsto), as saídas são 0, 3 ou 27, o que de forma alguma reflete o que deve parecer a previsão com base nas minhas previsões manuais do coeficiente estimativas e interceptações. Alguém sabe como obter previsões "precisas" para o meu modelo de logit ordenado?
EDITAR
Para esclarecer minha preocupação, meus dados de resposta têm observações em todos os níveis
>head(table(y))
y
0 1 2 3 4 5
29 21 19 27 15 16
onde, como minha variável de previsão parece estar se agrupando
> head(table(pr_out))
pr_out
0 1 2 3 4 5
117 0 0 114 0 0
r
econometrics
logit
ordered-logit
prototoast
fonte
fonte
predict
função diferem dos que você gerou manualmente? Qual é a estrutura da sua variável dependente? Por favor, forneça um exemplo reproduzível.polr()
outras funções? Você poderia tentarlrm()
de pacoterms
:lrmFit <- lrm(y ~ pop0 + inc0); predict(lrmFit, type="fitted.ind")
. Outra opção évglm()
a partir do pacoteVGAM
:vglmFit <- vglm(y ~ pop0 + inc0, family=propodds); predict(vglmFit, type="response")
. Ambos retornam a matriz de probabilidades de categoria previstas. Veja minha resposta para obter as categorias previstas a partir daí.Respostas:
polr()
MASS
polr()
Para possíveis opções implementadas em outras funções, consulte esta resposta . A função logística é o inverso da função logit; portanto, as probabilidades previstas sãop^(Y⩽g)
As probabilidades de categoria previstas são . Aqui está um exemplo reproduzível em R com dois preditores . Para uma variável ordinal , cortei uma variável contínua simulada em 4 categorias.X1,X2YP^(Y=g)=P^(Y≤g)−P^(Y≤g−1) X1,X2 Y
Agora, ajuste o modelo de chances proporcionais
polr()
e obtenha a matriz de probabilidades de categoria previstaspredict(polr(), type="probs")
.Para verificar manualmente esses resultados, precisamos extrair as estimativas de parâmetros, desses calcular os logits previstos, desses logits calcular as probabilidades previstas e vincular as probabilidades da categoria prevista a uma matriz .p^(Y⩽g)
Compare com o resultado de
polr()
.Para as categorias previstas,
predict(polr(), type="class")
basta escolher - para cada observação - a categoria com maior probabilidade.Compare com o resultado
polr()
.fonte