Il existe différentes méthodes de prédiction des variables ordinales et catégorielles.
Ce que je ne comprends pas, c'est l'importance de cette distinction. Existe-t-il un exemple simple qui peut expliquer clairement ce qui ne va pas si je laisse tomber la commande? Dans quelles circonstances cela n'a-t-il pas d'importance? Par exemple, si les variables indépendantes sont également toutes catégorielles / ordinales, y aurait-il une différence?
Cette question connexe se concentre sur le type des variables indépendantes. Ici, je pose des questions sur les variables de résultats.
Edit: Je vois l'intérêt d'utiliser la structure de commande pour réduire le nombre de paramètres du modèle, mais je ne suis toujours pas vraiment convaincu.
Voici un exemple (tiré d'une introduction à la régression logistique ordonnée où, autant que je sache, la régression logistique ordinale ne fonctionne pas mieux que la régression logistique 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))
qui montre la distribution du nombre de bonnes suppositions (sur 40) des deux algorithmes.
Edit2: Lorsque j'utilise comme méthode de notation les éléments suivants
return(sum(abs(as.numeric(pred)-as.numeric(test_data$apply)))
et pénaliser les prédictions "très fausses", polr a toujours l'air mauvais, c'est-à-dire que l'intrigue ci-dessus ne change pas beaucoup.
ordered factor
, ce qui améliorerait les résultats: gradapply$apply <-factor(gradapply$apply, levels= c('unlikely', 'somewhat likely', 'very likely') , ordered = TRUE)
mais cela ne fait aucune différence. Si vous regardez la précision, les deux sont assez similaires. Cependant, la précision n'est pas une bonne mesure sur laquelle s'appuyer uniquement.