Esistono diversi metodi per la previsione di variabili ordinali e categoriali.
Quello che non capisco è quanto conta questa distinzione. C'è un semplice esempio che può chiarire cosa non va se cado l'ordine? In quali circostanze non importa? Ad esempio, se anche le variabili indipendenti fossero tutte categoriali / ordinali, ci sarebbe una differenza?
Questa domanda correlata si concentra sul tipo di variabili indipendenti. Qui sto chiedendo informazioni sulle variabili di risultato.
Modifica: vedo il punto che l'utilizzo della struttura dell'ordine riduce il numero di parametri del modello, ma non sono ancora molto convinto.
Ecco un esempio (tratto da un'introduzione alla regressione logistica ordinata in cui per quanto posso vedere la regressione logistica ordinale non funziona meglio della regressione logistica multinomiale:
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))
che mostra la distribuzione del numero di ipotesi giuste (su 40) di entrambi gli algoritmi.
Edit2: quando uso come metodo di punteggio quanto segue
return(sum(abs(as.numeric(pred)-as.numeric(test_data$apply)))
e penalizzare previsioni "molto sbagliate", polr sembra ancora brutto, cioè la trama sopra non cambia molto.
ordered factor
, il che migliorerebbe i risultati: gradapply$apply <-factor(gradapply$apply, levels= c('unlikely', 'somewhat likely', 'very likely') , ordered = TRUE)
ma non fa differenza. Se si guarda alla precisione, i due sono praticamente simili. Tuttavia, la precisione non è una buona metrica su cui fare affidamento.