Định dạng đầu vào để đáp ứng trong nhị phân glm trong R


13

Trong Rđó, có ba phương thức định dạng dữ liệu đầu vào cho hồi quy logistic bằng glmhàm:

  1. Dữ liệu có thể ở định dạng "nhị phân" cho mỗi quan sát (ví dụ: y = 0 hoặc 1 cho mỗi quan sát);
  2. Dữ liệu có thể ở định dạng "Wilkinson-Rogers" (ví dụ y = cbind(success, failure):) với mỗi hàng đại diện cho một điều trị; hoặc là
  3. Dữ liệu có thể ở định dạng có trọng số cho mỗi quan sát (ví dụ: y = 0,3, trọng số = 10).

Tất cả ba phương pháp đều tạo ra các ước tính hệ số giống nhau, nhưng khác nhau về mức độ tự do và dẫn đến các giá trị sai lệch và điểm AIC. Hai phương pháp cuối cùng có ít quan sát hơn (và do đó mức độ tự do) bởi vì chúng sử dụng mỗi phương pháp điều trị cho số lượng quan sát trong khi phương pháp đầu tiên sử dụng mỗi quan sát cho số lượng quan sát.

Câu hỏi của tôi: Có những lợi thế về số hoặc thống kê để sử dụng một định dạng đầu vào so với định dạng khác không? Ưu điểm duy nhất tôi thấy là không phải định dạng lại dữ liệu của một người Rđể sử dụng với mô hình.

Tôi đã xem tài liệu glm , tìm kiếm trên web và trang web này và tìm thấy một bài đăng liên quan , nhưng không có hướng dẫn về chủ đề này.

Dưới đây là một ví dụ mô phỏng thể hiện hành vi này:

# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
    (d - c)/ (1 + exp(-b * (log(x)  - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
                              prob = drc4(dfLong$dose, b = 2, e = 5))

# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose), 
                     FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality 
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps

fitShort <- glm( cbind(mortality, survival) ~ dose, 
                 data = dfShort, 
                 family = "binomial")
summary(fitShort)

fitShortP <- glm( mortalityP ~ dose, data = dfShort, 
                  weights = nReps,     
                  family = "binomial")
summary(fitShortP)

fitLong <- glm( mortality ~ dose, data = dfLong, 
                family = "binomial")
summary(fitLong)

1
Trong ví dụ của bạn, sự khác biệt giữa độ lệch null và độ lệch dư là bằng nhau cho cả ba mô hình. Nếu bạn thêm hoặc xóa tham số, thay đổi trong AIC cũng giống nhau cho cả ba.
Jonny Lomond

1
Bạn tự trả lời: nếu sử dụng cùng một dữ liệu, cho cùng một kết quả, thì làm thế nào chúng có thể khác nhau? Hơn nữa, nếu phương thức sẽ cho các kết quả khác nhau chỉ vì cung cấp dữ liệu ở định dạng khác nhau, thì sẽ có điều gì đó sai lầm sâu sắc với nó hoặc với việc thực hiện.
Tim

Định dạng WR cuối cùng là một khả năng có trọng số. Vấn đề với trọng số là R không thể biết được chúng là trọng số tần số, trọng số xác suất hay khác. Với trọng số khảo sát, ví dụ, bạn chỉ có thể có n quan sát nhưng chúng đại diện cho các phân đoạn của khung dân số / khung lấy mẫu. Vì vậy, mức độ tự do thực sự là 100. svyglmtừ gói khảo sát cung cấp cho bạn các phương pháp tốt hơn để xử lý đối số trọng số.
AdamO

Nhưng nếu bạn phù hợp với mô hình quasibinomial bằng cả ba cách mã hóa thì chúng sẽ tạo ra các kết quả khác nhau, vì người ta có thể có sự thay thế tích cực khi được mã hóa thành dữ liệu nhị thức nhưng không được mã hóa thành dữ liệu logistic / nhị phân. Hay tôi sai về điều này?
Tom Wenseleers

Câu trả lời:


9

Không có lý do thống kê để thích cái này hơn cái kia, bên cạnh sự rõ ràng về khái niệm. Mặc dù các giá trị sai lệch được báo cáo là khác nhau, những khác biệt này hoàn toàn do mô hình bão hòa. Vì vậy, bất kỳ so sánh sử dụng độ lệch tương đối giữa các mô hình là không bị ảnh hưởng, vì khả năng đăng nhập mô hình bão hòa hủy bỏ.

Tôi nghĩ rằng nó hữu ích để đi qua tính toán sai lệch rõ ràng.

inTôiipiiyijji

Mẫu dài

ij(log(pi)yij+log(1pi)(1yij))

ij(log(yij)yij+log(1yij)(1yij)).
yijlog(0)0log(0)limx0+xlog(x)

Hình thức ngắn (có trọng số)

Lưu ý rằng phân phối nhị thức thực sự không thể lấy các giá trị không nguyên, nhưng dù sao chúng ta cũng có thể tính toán "khả năng ghi nhật ký" bằng cách sử dụng tỷ lệ thành công được quan sát trong mỗi ô làm phản hồi và tính trọng số của từng phép tính trong tính toán khả năng ghi nhật ký số lượng quan sát trong tế bào đó.

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

j

Trong khi đó sự lệch lạc bão hòa là khác nhau. Vì chúng tôi không còn có phản hồi 0-1, ngay cả với một tham số cho mỗi lần quan sát, chúng tôi không thể nhận được chính xác 0. Thay vào đó, khả năng đăng nhập mô hình bão hòa là

ini(log(jyij/ni)jyij/ni+log(1jyij/ni)(1jyij/ni)).

Trong ví dụ của bạn, bạn có thể xác minh rằng hai lần số tiền này là sự khác biệt giữa giá trị sai lệch null và giá trị sai lệch được báo cáo cho cả hai mô hình.

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance

Tôi nghĩ bạn sẽ phải làm rõ biểu thức cho sự sai lệch của các mô hình bão hòa. Nhật ký 0 không hoạt động tốt.
AdamO

Cảm ơn, tôi nên đã làm rõ những gì tôi có ý nghĩa. Tôi đã thêm một chỉnh sửa để làm rõ rằng bằng 0log (0) Ý tôi là 0 trong ngữ cảnh này.
Jonny Lomond

OK nhưng tôi thực sự bối rối (tha thứ cho tôi Tôi không bao giờ nói sai lệch về bất kỳ chi tiết tuyệt vời nào): nếu bạn có log (y) y - log (1-y) (1-y) là độ lệch mô hình bão hòa, không phải là tất cả quan sát chỉ 0?
AdamO

2
"Mô hình bão hòa" là một mô hình tưởng tượng với một tham số cho mỗi lần quan sát. Vì vậy, xác suất dự đoán của nó cho mỗi quan sát là 1 hoặc 0, tùy thuộc vào giá trị quan sát thực tế. Vì vậy, trong trường hợp này, khả năng nhật ký của mô hình bão hòa thực sự là 0, dữ liệu là dữ liệu duy nhất có thể được tạo ra bởi mô hình bão hòa.
Jonny Lomond

Nhưng nếu bạn phù hợp với mô hình quasibinomial bằng cả ba cách mã hóa thì chúng sẽ tạo ra các kết quả khác nhau, vì người ta có thể có sự thay thế tích cực khi được mã hóa thành dữ liệu nhị thức nhưng không được mã hóa thành dữ liệu logistic / nhị phân. Hay tôi sai về điều này?
Tom Wenseleers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.