Hồi quy logistic: các biến được nhóm và không được nhóm (sử dụng R)


9

Tôi đang đọc A. Agresti (2007), Giới thiệu về Phân tích dữ liệu phân loại , lần 2. phiên bản và không chắc chắn nếu tôi hiểu đoạn này (tr.106, 4.2.1) một cách chính xác (mặc dù nó sẽ dễ dàng):

Trong Bảng 3.1 về ngáy và bệnh tim ở chương trước, có tới 254 đối tượng báo cáo ngáy mỗi đêm, trong đó 30 người mắc bệnh tim. Nếu tệp dữ liệu đã nhóm dữ liệu nhị phân, một dòng trong tệp dữ liệu báo cáo các dữ liệu này là 30 trường hợp mắc bệnh tim trong số cỡ mẫu là 254. Nếu tệp dữ liệu có dữ liệu nhị phân chưa được nhóm, mỗi dòng trong tệp dữ liệu đề cập đến một đối tượng riêng biệt, vì vậy 30 dòng chứa 1 cho bệnh tim và 224 dòng chứa 0 cho bệnh tim. Các ước tính ML và giá trị SE là giống nhau cho cả hai loại tệp dữ liệu.

Việc chuyển đổi một tập hợp dữ liệu chưa được nhóm (1 phụ thuộc, 1 độc lập) sẽ mất nhiều hơn "một dòng" để bao gồm tất cả thông tin!?

Trong ví dụ sau, một tập dữ liệu đơn giản (không thực tế!) Được tạo và mô hình hồi quy logistic được xây dựng.

Dữ liệu được nhóm thực sự trông như thế nào (tab biến?)? Làm thế nào cùng một mô hình có thể được xây dựng bằng cách sử dụng dữ liệu được nhóm?

> dat = data.frame(y=c(0,1,0,1,0), x=c(1,1,0,0,0))
> dat
  y x
1 0 1
2 1 1
3 0 0
4 1 0
5 0 0
> tab=table(dat)
> tab
   x
y   0 1
  0 2 1
  1 1 1
> mod1=glm(y~x, data=dat, family=binomial())

Câu trả lời:


11

Bảng 3.1 được sao chép dưới đây:

nhập mô tả hình ảnh ở đây

Agresti đã xem xét các điểm số sau đây cho mức độ ngáy: {0,2,4,5}.

Có hai cách để khớp GLM với R: kết quả của bạn được cung cấp dưới dạng vectơ 0/1 hoặc hệ số có hai cấp độ, với các yếu tố dự đoán trên rhs trong công thức của bạn; hoặc bạn có thể đưa ra một ma trận có hai cột số đếm thành công / thất bại là lhs của công thức. Cái sau tương ứng với cái mà Agresti gọi là dữ liệu 'được nhóm'. Phương pháp thứ ba, cũng áp dụng cho các cài đặt được nhóm, sẽ là sử dụng weights=đối số để cho biết có bao nhiêu kết quả tích cực tiêu cực được quan sát cho mỗi loại của bảng phân loại.

Dữ liệu trong chế độ xem ma trận sẽ đọc:

snoring <- matrix(c(24,35,21,30,1355,603,192,224), nc=2)

Từ đó, chúng ta có thể tạo data.frameđịnh dạng dài (2484 hàng = sum(snoring)quan sát) như sau:

snoring.df <- data.frame(snoring=gl(4, 1, labels=c("Never", "Occasional",
                                                   "Nearly every night", 
                                                   "Every night")),
                         disease=gl(2, 4, labels=c("Yes", "No")),
                         counts=as.vector(snoring))
snoring.df <- snoring.df[rep(seq_len(nrow(snoring.df)), snoring.df$counts), 1:2]

Và hai mô hình sau đây sẽ mang lại kết quả giống hệt nhau:

levels(snoring.df$snoring) <- c(0, 2, 4, 5)
y <- abs(as.numeric(snoring.df$disease)-2)
x <- as.numeric(as.character(snoring.df$snoring))
fit.glm1 <- glm(y ~ x, family=binomial)

fit.glm2 <- glm(snoring ~ c(0, 2, 4, 5), family=binomial)

Đó là, , sử dụng ký hiệu của Agresti.logit[π^(x)]= =-3,87+0,40x

Ký hiệu thứ hai thường được sử dụng trên bảng tổng hợp với một lệnh như cbind(a, b), trong đó ablà các cột đếm cho một sự kiện nhị phân (xem ví dụ: Mô hình tuyến tính tổng quát ). Có vẻ như nó cũng sẽ hoạt động khi sử dụng bảng thay vì ma trận (như trong ví dụ của bạn), vd

glm(as.table(snoring) ~ c(0, 2, 4, 5), family=binomial)

Cảm ơn rât nhiều! Một câu trả lời hoàn hảo! Tôi có một bổ sung đơn giản: Thay vì as.table (ngáy) tôi sẽ đề xuất bảng (x, y, dnn = c ('ngáy', 'bệnh')) như một ví dụ tương tự của tôi, bởi vì việc chuyển đổi không được nhóm thành nhóm dữ liệu cũng được quan tâm.
FloE

1
@FloE Bạn nói đúng. Bạn vẫn sẽ cần phải xây dựng quảng cáo rhs của bạn . Ví dụ, một cái gì đó tương tự tab <- table(x,y, dnn=c('snoring','disease')); glm(tab ~ as.numeric(rownames(tab)), family=binomial)sẽ hoạt động (trừ đi sự đảo ngược dấu hiệu cho các hệ số vì "Có" được mã hóa 0 thay vì 1).
chl
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.