Regresja logistyczna, aż do nieprecyzyjności liczbowej, da dokładnie takie same pasowania jak odsetki w tabelach. Dlatego jeśli twoje niezależne zmienne są obiektami czynnikówfactor1 itp., A zależnymi wynikami (0 i 1) są x, możesz uzyskać efekty za pomocą wyrażenia takiego jak
aggregate(x, list(factor1, <etc>), FUN=mean)
Porównaj to z
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
Na przykład wygenerujmy losowe dane:
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)))
Podsumowanie uzyskuje się za pomocą
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Jego wyniki obejmują
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
Dla przyszłego odniesienia szacunek dla czynników na poziomach (1,2,0) w wierszu 6 wyniku wynosi 0,5.
Regresja logistyczna rezygnuje ze swoich współczynników w ten sposób:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Aby z nich skorzystać, potrzebujemy funkcji logistycznej:
logistic <- function(x) 1 / (1 + exp(-x))
Aby uzyskać np. Oszacowanie czynników na poziomach (1,2,0), oblicz
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Zwróć uwagę, jak wszystkie interakcje muszą zostać uwzględnione w modelu i wszystkie powiązane współczynniki muszą być zastosowane, aby uzyskać prawidłowe oszacowanie.)
(Intercept)
0.5
zgadzając się z wynikami aggregate. (Nagłówek „(przechwytuj)” w danych wyjściowych jest pozostałością danych wejściowych i w rzeczywistości nie ma znaczenia dla tego obliczenia.)
Ta sama informacja w jeszcze innej formie pojawia się na wyjściutable . Np. (Długi) wynik działania
table(x, factor1, factor2, factor3)
zawiera ten panel:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
factor121 / ( 21 + 21 ) = 0,5x1aggregateglm
Wreszcie, kombinacja czynników dających najwyższy odsetek w zbiorze danych jest dogodnie otrzymywana z danych wyjściowych aggregate:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429