A regressão logística, até a imprecisão numérica, fornecerá exatamente os mesmos ajustes que as porcentagens tabuladas. Portanto, se suas variáveis independentes forem objetos de fatorfactor1
etc. e os resultados dependentes (0 e 1) forem x
, você poderá obter os efeitos com uma expressão como
aggregate(x, list(factor1, <etc>), FUN=mean)
Compare isso com
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
Como exemplo, vamos gerar alguns dados aleatórios:
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)))
O resumo é obtido com
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Sua saída inclui
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 referência futura, a estimativa para fatores nos níveis (1,2,0) na linha 6 da produção é 0,5.
A regressão logística renuncia a seus coeficientes da seguinte maneira:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Para usá-los, precisamos da função logística:
logistic <- function(x) 1 / (1 + exp(-x))
Para obter, por exemplo, a estimativa de fatores nos níveis (1,2,0), calcule
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Observe como todas as interações devem ser incluídas no modelo e todos os coeficientes associados devem ser aplicados para obter uma estimativa correta.)
(Intercept)
0.5
concordando com os resultados de aggregate
. (O cabeçalho "(Intercepto)" na saída é um vestígio da entrada e efetivamente sem sentido para esse cálculo.)
A mesma informação em outra forma aparece na saída detable
. Por exemplo, a (longa) saída de
table(x, factor1, factor2, factor3)
inclui este painel:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
factor1
21 / ( 21 + 21 ) = 0,5x
1aggregate
glm
Finalmente, uma combinação de fatores que produz a maior proporção no conjunto de dados é convenientemente obtida a partir da saída de aggregate
:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429