Hồi quy logistic sẽ, đến mức không chính xác về số, sẽ đưa ra chính xác sự phù hợp với tỷ lệ phần trăm được lập bảng. Do đó, nếu các biến độc lập của bạn là các đối tượng yếu tốfactor1
, v.v. và kết quả phụ thuộc (0 và 1) là x
, thì bạn có thể thu được các hiệu ứng với một biểu thức như
aggregate(x, list(factor1, <etc>), FUN=mean)
So sánh điều này với
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
Ví dụ: hãy tạo một số dữ liệu ngẫu nhiên:
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)))
Tóm tắt thu được với
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
Đầu ra của nó bao gồm
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
Để tham khảo trong tương lai, ước tính cho các yếu tố ở các mức (1,2,0) trong hàng 6 của đầu ra là 0,5.
Hồi quy logistic từ bỏ các hệ số của nó theo cách này:
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
Để sử dụng chúng, chúng ta cần chức năng logistic:
logistic <- function(x) 1 / (1 + exp(-x))
Để có được, ví dụ: ước tính cho các yếu tố ở cấp độ (1,2,0), hãy tính toán
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(Lưu ý cách bao gồm tất cả các tương tác trong mô hình và tất cả các hệ số liên quan phải được áp dụng để có được ước tính chính xác.) Đầu ra là
(Intercept)
0.5
đồng ý với kết quả của aggregate
. (Tiêu đề "(Chặn)" trong đầu ra là một dấu tích của đầu vào và thực sự vô nghĩa đối với phép tính này.)
Thông tin tương tự ở dạng khác xuất hiện trong đầu ra củatable
. Ví dụ: đầu ra (dài) của
table(x, factor1, factor2, factor3)
bao gồm bảng này:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
Cột cho factor1
= 1 tương ứng với ba yếu tố ở các mức (1,2,0) và cho thấy trong các giá trị bằng , đồng ý với những gì chúng ta đọc được và .121/(21+21)=0.5x
1aggregate
glm
Cuối cùng, sự kết hợp của các yếu tố mang lại tỷ lệ cao nhất trong bộ dữ liệu được lấy một cách thuận tiện từ đầu ra của aggregate
:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429