Jusqu'à une imprécision numérique, la régression logistique donnera exactement les mêmes ajustements que les pourcentages tabulés. Par conséquent, si vos variables indépendantes sont des objets facteursfactor1
, etc., et que les résultats dépendants (0 et 1) le sont x
, alors vous pouvez obtenir les effets avec une expression comme
aggregate(x, list(factor1, <etc>), FUN=mean)
Comparez cela à
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
À titre d'exemple, générons des données aléatoires:
set.seed(17)
n <- 1000
x <- sample(c(0,1), n, replace=TRUE)
factor1 <- as.factor(floor(2*runif(n)))
factor2 <- as.factor(floor(3*runif(n)))
factor3 <- as.factor(floor(4*runif(n)))
Le résumé est obtenu avec
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Sa sortie comprend
Group.1 Group.2 Group.3 x
1 0 0 0 0.5128205
2 1 0 0 0.4210526
3 0 1 0 0.5454545
4 1 1 0 0.6071429
5 0 2 0 0.4736842
6 1 2 0 0.5000000
...
24 1 2 3 0.5227273
Pour référence future, l'estimation des facteurs aux niveaux (1,2,0) dans la ligne 6 de la sortie est de 0,5.
La régression logistique abandonne ainsi ses coefficients:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Pour les utiliser, nous avons besoin de la fonction logistique:
logistic <- function(x) 1 / (1 + exp(-x))
Pour obtenir, par exemple, l'estimation des facteurs aux niveaux (1,2,0), calculer
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Remarquez comment toutes les interactions doivent être incluses dans le modèle et tous les coefficients associés doivent être appliqués pour obtenir une estimation correcte.) Le résultat est
(Intercept)
0.5
d'accord avec les résultats de aggregate
. (Le titre "(Intercept)" dans la sortie est un vestige de l'entrée et n'a aucun sens pour ce calcul.)
Les mêmes informations sous une autre forme apparaissent dans la sortie detable
. Par exemple, la sortie (longue) de
table(x, factor1, factor2, factor3)
comprend ce panneau:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
La colonne pour factor1
= 1 correspond aux trois facteurs aux niveaux (1,2,0) et montre que des valeurs de égal , en accord avec ce que nous lisons à partir de et .121/(21+21)=0.5x
1aggregate
glm
Enfin, une combinaison de facteurs produisant la proportion la plus élevée dans l'ensemble de données est commodément obtenue à partir des résultats de aggregate
:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429