La regresión logística, hasta la imprecisión numérica, dará exactamente los mismos ajustes que los porcentajes tabulados. Por lo tanto, si sus variables independientes son objetos factorialesfactor1 , etc., y los resultados dependientes (0 y 1) lo son x, puede obtener los efectos con una expresión como
aggregate(x, list(factor1, <etc>), FUN=mean)
Compara esto con
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
Como ejemplo, generemos algunos datos aleatorios:
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)))
El resumen se obtiene con
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Su salida incluye
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
Para referencia futura, la estimación de los factores en los niveles (1,2,0) en la fila 6 de la salida es 0.5.
La regresión logística abandona sus coeficientes de esta manera:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Para usarlos, necesitamos la función logística:
logistic <- function(x) 1 / (1 + exp(-x))
Para obtener, por ejemplo, la estimación de factores en los niveles (1,2,0), calcule
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Observe cómo se deben incluir todas las interacciones en el modelo y se deben aplicar todos los coeficientes asociados para obtener una estimación correcta).
(Intercept)
0.5
de acuerdo con los resultados de aggregate. (El encabezado "(Intercepción)" en la salida es un vestigio de la entrada y efectivamente no tiene sentido para este cálculo).
La misma información en otra forma más aparece en la salida detable . Por ejemplo, la salida (larga) de
table(x, factor1, factor2, factor3)
incluye este panel:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
factor121 / ( 21 + 21 ) = 0,5x1aggregateglm
Finalmente, una combinación de factores que producen la mayor proporción en el conjunto de datos se obtiene convenientemente de la salida de aggregate:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429