La regressione logistica, fino all'imprecisione numerica, darà esattamente gli stessi adattamenti delle percentuali tabulate. Pertanto, se le variabili indipendenti sono oggetti fattorefactor1
, ecc., E i risultati dipendenti (0 e 1) lo sono x
, è possibile ottenere gli effetti con un'espressione come
aggregate(x, list(factor1, <etc>), FUN=mean)
Confronta questo con
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
A titolo di esempio, generiamo alcuni dati casuali:
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)))
Il sommario è ottenuto con
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Il suo output include
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
Per riferimento futuro, la stima per i fattori ai livelli (1,2,0) nella riga 6 dell'output è 0,5.
La regressione logistica rinuncia ai suoi coefficienti in questo modo:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Per usarli, abbiamo bisogno della funzione logistica:
logistic <- function(x) 1 / (1 + exp(-x))
Per ottenere, ad esempio, la stima per i fattori ai livelli (1,2,0), calcolare
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Notare come tutte le interazioni devono essere incluse nel modello e tutti i coefficienti associati devono essere applicati per ottenere una stima corretta.) L'output è
(Intercept)
0.5
d'accordo con i risultati di aggregate
. (L'intestazione "(Intercetta)" nell'output è una traccia dell'input ed effettivamente priva di significato per questo calcolo.)
Le stesse informazioni in ancora un'altra forma appaiono nell'output ditable
. Ad esempio, l'output (lungo) di
table(x, factor1, factor2, factor3)
include questo pannello:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
factor1
21 / ( 21 + 21 ) = 0,5x
1aggregate
glm
Infine, una combinazione di fattori che producono la proporzione più elevata nel set di dati viene convenientemente ottenuta dall'output di aggregate
:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429