Kiểm tra giả định tỷ lệ cược giữ trong hồi quy logistic thứ tự bằng cách sử dụng hàm polr


9

Tôi đã sử dụng hàm 'polr' trong gói MASS để chạy hồi quy logistic thứ tự cho một biến phản ứng phân loại thứ tự với 15 biến giải thích liên tục.

Tôi đã sử dụng mã (hiển thị bên dưới) để kiểm tra xem mô hình của tôi có đáp ứng giả định tỷ lệ cược theo tỷ lệ theo lời khuyên được cung cấp trong hướng dẫn của UCLA không . Tuy nhiên, tôi hơi lo lắng về đầu ra ngụ ý rằng không chỉ các hệ số trên các điểm cắt khác nhau giống nhau, mà chúng giống hệt nhau (xem hình bên dưới).

FGV1b <- data.frame(FG1_val_cat=factor(FGV1b[,"FG1_val_cat"]), 
                    scale(FGV1[,c("X","Y","Slope","Ele","Aspect","Prox_to_for_FG", 
                          "Prox_to_for_mL", "Prox_to_nat_border", "Prox_to_village", 
                          "Prox_to_roads", "Prox_to_rivers", "Prox_to_waterFG", 
                          "Prox_to_watermL", "Prox_to_core", "Prox_to_NR", "PCA1", 
                          "PCA2", "PCA3")]))
b     <- polr(FG1_val_cat ~ X + Y + Slope + Ele + Aspect + Prox_to_for_FG + 
                            Prox_to_for_mL + Prox_to_nat_border + Prox_to_village + 
                            Prox_to_roads + Prox_to_rivers + Prox_to_waterFG + 
                            Prox_to_watermL + Prox_to_core + Prox_to_NR, 
              data=FGV1b, Hess=TRUE)

Xem tóm tắt của mô hình:

summary(b)
(ctableb <- coef(summary(b)))
q        <- pnorm(abs(ctableb[, "t value"]), lower.tail=FALSE) * 2
(ctableb <- cbind(ctableb, "p value"=q))

Và bây giờ chúng ta có thể xem xét các khoảng tin cậy cho các ước tính tham số:

(cib <- confint(b)) 
confint.default(b)

Nhưng những kết quả này vẫn còn khá khó diễn giải, vì vậy hãy chuyển đổi các hệ số thành tỷ lệ cược

exp(cbind(OR=coef(b), cib))

Kiểm tra giả định. Vì vậy, đoạn mã sau sẽ ước tính các giá trị được biểu đồ. Đầu tiên, nó cho chúng ta thấy các phép biến đổi logit của xác suất lớn hơn hoặc bằng với mỗi giá trị của biến mục tiêu

FG1_val_cat <- as.numeric(FG1_val_cat)
sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}
(t <- with(FGV1b, summary(as.numeric(FG1_val_cat) ~ X + Y + Slope + Ele + Aspect + 
                             Prox_to_for_FG + Prox_to_for_mL + Prox_to_nat_border + 
                             Prox_to_village + Prox_to_roads + Prox_to_rivers + 
                             Prox_to_waterFG + Prox_to_watermL + Prox_to_core + 
                             Prox_to_NR, fun=sf)))

Bảng trên hiển thị các giá trị dự đoán (tuyến tính) mà chúng ta sẽ nhận được nếu chúng ta hồi quy biến phụ thuộc vào các biến dự đoán của chúng ta tại một thời điểm, mà không có giả định độ dốc song song. Vì vậy, bây giờ, chúng ta có thể chạy một loạt các hồi quy logistic nhị phân với các điểm cắt khác nhau trên biến phụ thuộc để kiểm tra sự bằng nhau của các hệ số trên các điểm cắt

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,7:8]))

kiểm tra giả định polr

Xin lỗi rằng tôi không phải là chuyên gia thống kê và có lẽ tôi đang thiếu một cái gì đó rõ ràng ở đây. Tuy nhiên, tôi đã mất một thời gian dài để tìm hiểu xem có vấn đề gì trong cách tôi kiểm tra giả định mô hình hay không và cũng cố gắng tìm ra các cách khác để chạy cùng một mô hình.

Ví dụ, tôi đọc trong nhiều danh sách gửi thư trợ giúp rằng những người khác sử dụng hàm vglm (trong gói VGAM) và hàm lrm (trong gói rms) (ví dụ xem tại đây: Giả định tỷ lệ cược theo tỷ lệ hồi quy logistic trong R với các gói VGAM và rms ). Tôi đã cố gắng chạy các mô hình tương tự nhưng liên tục đưa ra các cảnh báo và lỗi.

Ví dụ: khi tôi cố gắng khớp mô hình vglm với đối số'allel = FALSE '(vì liên kết trước đó đề cập rất quan trọng để kiểm tra giả định tỷ lệ cược tỷ lệ), tôi gặp phải lỗi sau:

Lỗi trong lm.fit (X.vlm, y = z.vlm, ...): NA / NaN / Inf trong 'y'
Ngoài ra: Thông báo cảnh báo:
Trong Deviance.c sortical.data.vgam (mu = mu, y = y, w = w, Residuals = Residuals ,: giá trị được trang bị gần bằng 0 hoặc 1

Tôi muốn hỏi xin vui lòng nếu có bất cứ ai có thể hiểu và có thể giải thích cho tôi tại sao đồ thị tôi sản xuất ở trên trông giống như nó. Nếu thực sự nó có nghĩa là một cái gì đó không đúng, bạn có thể vui lòng giúp tôi tìm cách kiểm tra giả định tỷ lệ cược tỷ lệ khi chỉ sử dụng hàm polr. Hoặc nếu điều đó là không thể, thì tôi sẽ dùng đến chức năng vglm, nhưng sau đó sẽ cần một số trợ giúp để giải thích lý do tại sao tôi tiếp tục nhận được lỗi ở trên.

LƯU Ý: Làm nền, có 1000 điểm dữ liệu ở đây, đây thực sự là các điểm vị trí trên toàn khu vực nghiên cứu. Tôi đang tìm kiếm để xem liệu có bất kỳ mối quan hệ giữa biến trả lời phân loại và 15 biến giải thích này. Tất cả 15 biến giải thích đó là các đặc điểm không gian (ví dụ: độ cao, tọa độ xy, khoảng cách gần với rừng, v.v.). 1000 điểm dữ liệu được phân bổ ngẫu nhiên bằng cách sử dụng một hệ thống GIS, nhưng tôi đã sử dụng phương pháp lấy mẫu phân tầng. Tôi chắc chắn rằng 125 điểm được chọn ngẫu nhiên trong mỗi 8 mức phản ứng phân loại khác nhau. Tôi hy vọng thông tin này cũng hữu ích.

Câu trả lời:


1

Biến phụ thuộc có 8 cấp độ theo thứ tự, vì vậy trong biểu đồ để kiểm tra giả định tỷ lệ cược tỷ lệ, bạn sẽ thấy 8 ký hiệu khác nhau cho mỗi biến độc lập. Bạn chỉ thấy 2 ký hiệu cho mỗi biến độc lập có thể vì bạn đã chọn một khoảng quá ngắn cho các giá trị của trục x. Nếu phỏng đoán của tôi là chính xác, bạn chỉ cần sử dụng khoảng rộng hơn cho các giá trị của trục x. Hãy thử mã này:

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,3:9]))

5
Điều này không đủ để là một câu trả lời theo tiêu chuẩn của chúng tôi. Bạn có thể xây dựng? Mã này làm gì / nó hoạt động như thế nào để kiểm tra giả định PO? (Ví dụ: làm thế nào một người sử dụng các phần mềm khác nhau sẽ sử dụng cùng một cách tiếp cận này?)
gung - Rebstate Monica

Tôi vừa mới cải thiện câu trả lời của mình. Vui lòng cho tôi biết nếu nó thỏa mãn
John M

1

Vì vậy, tôi đã tìm thấy điều này thông qua việc googling xung quanh và tôi nghĩ rằng một câu trả lời vẫn có thể hữu ích cho lý do đó. Tôi nghĩ rằng lỗi là ở

sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}

nơi bạn sử dụng FG1_val_catchứ không phải y. Sử dụng ví dụ từ các chiến lược mô hình hồi quy của Mitchell:

library(Hmisc)
getHdata(support)
support <- support[complete.cases(support[, c("sfdm2", "adlsc", "sex", "age", "meanbp")]), ]
sfdm <- as.integer (support$sfdm2 ) - 1

sf1 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(sfdm >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(sfdm >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(sfdm >= 3))
  )
}

sf2 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(y >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(y >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(y >= 3))
  )
}

s1 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf1,
              data = support)
s2 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf2,
              data = support)  

plot(s1, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

plot(s2, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

nhập mô tả hình ảnh ở đây đấu với

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

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.