Existem diferentes métodos para previsão de variáveis ordinais e categóricas.
O que eu não entendo é como essa distinção importa. Existe um exemplo simples que pode esclarecer o que dá errado se eu cancelar o pedido? Sob que circunstâncias isso não importa? Por exemplo, se as variáveis independentes também forem categóricas / ordinais, haveria alguma diferença?
Esta questão relacionada se concentra no tipo de variáveis independentes. Aqui estou perguntando sobre variáveis de resultado.
Editar: vejo que a utilização da estrutura da ordem reduz o número de parâmetros do modelo, mas ainda não estou realmente convencido.
Aqui está um exemplo (retirado de uma introdução à regressão logística ordenada, na qual, até onde eu posso ver, a regressão logística ordinal não apresenta um desempenho melhor que a regressão logística multinomial:
library(nnet)
library(MASS)
gradapply <- read.csv(url("http://www.ats.ucla.edu/stat/r/dae/ologit.csv"), colClasses=c("factor", "factor", "factor", "numeric"))
ordered_result <- function() {
train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
train_data <- gradapply[train_rows,]
test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
m <- polr(apply~pared+gpa, data=train_data)
pred <- predict(m, test_data)
return(sum(pred==test_data$apply))
}
multinomial_result <- function() {
train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
train_data <- gradapply[train_rows,]
test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
m <- multinom(apply~pared+gpa, data=train_data)
pred <- predict(m, test_data)
return(sum(pred==test_data$apply))
}
n <- 100
polr_res <- replicate(n, ordered_result())
multinom_res <- replicate(n, multinomial_result())
boxplot(data.frame(polr=polr_res, multinom=multinom_res))
que mostra a distribuição do número de palpites corretos (de 40) de ambos os algoritmos.
Edit2: Quando eu uso como método de pontuação, o seguinte
return(sum(abs(as.numeric(pred)-as.numeric(test_data$apply)))
e penalizar previsões "muito erradas", o polr ainda parece ruim, ou seja, o enredo acima não muda muito.
ordered factor
, o que melhoraria os resultados: gradapply$apply <-factor(gradapply$apply, levels= c('unlikely', 'somewhat likely', 'very likely') , ordered = TRUE)
mas não faz diferença. Se você observar a precisão, os dois são muito parecidos. A precisão não é uma boa métrica em que se possa confiar apenas.