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.
la source
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.Réponses:
Il y a des gains de puissance et de précision importants en traitant Y comme ordinal le cas échéant. Cela découle du nombre beaucoup plus faible de paramètres dans le modèle (d'un facteur k où k est inférieur de un au nombre de catégories de Y). Il existe plusieurs modèles ordinaux. Les modèles logistiques ordinaux sont les cotes proportionnelles et le ratio de continuation les plus couramment utilisés.
la source
Si vous ignorez la nature ordonnée des variables, les méthodes appropriées fourniront toujours une analyse correcte, mais l'avantage d'utiliser des méthodes pour les données ordonnées est qu'elles fournissent de plus amples informations sur l'ordre et l'ampleur des variables significatives.
la source
Si vous souhaitez modéliser les données et que la variable catégorielle dépendante n'a pas d'ordre (nominal), vous devez utiliser un modèle logit multinomial. Si la variable dépendante a un ordre (ordinal), vous pouvez utiliser un modèle logit cumulatif (modèle de cotes proportionnelles).
Pour moi personnellement, je trouve les résultats beaucoup plus faciles à interpréter pour un modèle de cotes proportionnelles par rapport à un modèle multinomial, en particulier lorsque vous souhaitez signaler les résultats à une personne qui n'est pas statistiquement compétente.
Ce ne sont pas les seuls modèles que vous pouvez utiliser mais ils sont très typiques.
la source