Y at-il une équivalence de « ANOVA » (pour lm) à un objet rpart?
-
25-09-2019 - |
Question
Lorsque vous utilisez la fonction rpart
de R, je peux facilement adapter un modèle avec elle. par exemple:
# Classification Tree with rpart
library(rpart)
# grow tree
fit <- rpart(Kyphosis ~ Age + Number + Start,
method="class", data=kyphosis)
printcp(fit) # display the results
plotcp(fit)
summary(fit) # detailed summary of splits
# plot tree
plot(fit, uniform=TRUE,
main="Classification Tree for Kyphosis")
text(fit, use.n=TRUE, all=TRUE, cex=.8)
Ma question est - Comment puis-je mesurer la « importance » de chacun de mes trois variables explicatives (âge, nombre, Start) au modèle?
Si tel était un modèle de régression, je pourrais avoir l'air à des valeurs de p de la « ANOVA » F-test (entre modèles lm
avec et sans la variable). Mais ce qui est l'équivalence de l'utilisation « ANOVA » sur lm
à un objet rpart
?
(je l'espère, je réussi à faire ma question claire)
Merci.
La solution
Bien sûr ANOVA serait impossible, comme le calcul de la variance implique une variation totale de la variable de réponse et le partitionnement dans les composants d'information (SSA, SSE). Je ne vois pas comment on pourrait calculer la somme des carrés pour une variable comme cyphose.
Je pense que ce que vous parlez en fait est d'attribut de sélection (ou l'évaluation). J'utiliser la mesure de information gain
par exemple. Je pense que c'est ce qui est utilisé pour sélectionner l'attribut de test à chaque noeud dans l'arbre et l'attribut avec le gain d'information le plus élevé (ou plus grande réduction d'entropie) est choisie comme l'attribut de test pour le noeud courant. Cet attribut minimise les informations nécessaires pour classer les échantillons dans les partitions résultantes.
Je ne sais pas s'il existe une méthode d'attributs classement en fonction de leur gain d'information en R, mais je sais qu'il ya dans WEKA et est nommé InfoGainAttributeEval Il évalue la valeur d'un attribut en mesurant le gain d'information par rapport à la classe. Et si vous utilisez Ranker
comme Search Method
, les attributs sont classés par leurs évaluations individuelles.
EDIT
J'ai finalement trouvé un moyen de le faire en utilisant R CORElearn
Library
estInfGain <- attrEval(Kyphosis ~ ., kyphosis, estimator="InfGain")
print(estInfGain)