Nhận giá trị p cho nhiều loại mạng trong R (gói nnet)


19

Làm cách nào để có được giá trị p bằng cách sử dụng multinomchức năng của nnetgói trong R?

Tôi có một bộ dữ liệu bao gồm điểm số Bệnh lý học của điểm số (vắng mặt, nhẹ, nặng) là hai biến số kết quả và hai tác động chính: Tuổi tác (hai yếu tố: hai mươi ba mươi ngày) và Nhóm điều trị (bốn yếu tố: bị nhiễm mà không mắc ATB; ATB1; bị nhiễm + ATB2; bị nhiễm + ATB3).

Đầu tiên tôi đã cố gắng để phù hợp với một mô hình hồi quy thứ tự, có vẻ phù hợp hơn với các đặc điểm của biến phụ thuộc của tôi (thứ tự). Tuy nhiên, giả định về tỷ lệ cược đã bị vi phạm nghiêm trọng (về mặt đồ họa), điều đó thôi thúc tôi sử dụng mô hình đa phương thức thay thế, sử dụng nnetgói.

Đầu tiên tôi chọn mức kết quả mà tôi cần sử dụng làm danh mục cơ bản:

Data$Path <- relevel(Data$Path, ref = "Absent")

Sau đó, tôi cần đặt các loại đường cơ sở cho các biến độc lập:

Data$Age <- relevel(Data$Age, ref = "Twenty")
Data$Treat <- relevel(Data$Treat, ref="infected without ATB") 

Ngươi mâu:

test <- multinom(Path ~ Treat + Age, data = Data) 
# weights:  18 (10 variable) 
initial value 128.537638 
iter 10 value 80.623608 
final  value 80.619911 
converged

Đầu ra:

Coefficients:
         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   -2.238106   -1.1738540      -1.709608       -1.599301        2.684677
Severe     -1.544361   -0.8696531      -2.991307       -1.506709        1.810771

Std. Errors:
         (Intercept)    infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   0.7880046    0.8430368       0.7731359       0.7718480        0.8150993
Severe     0.6110903    0.7574311       1.1486203       0.7504781        0.6607360

Residual Deviance: 161.2398
AIC: 181.2398

Trong một thời gian, tôi không thể tìm ra cách lấy giá trị cho mô hình và ước tính khi sử dụng . Hôm qua tôi đã tình cờ thấy một bài đăng mà tác giả đưa ra một vấn đề tương tự liên quan đến ước tính giá trị cho các hệ số ( Cách thiết lập và ước tính mô hình logit đa phương thức trong R? ). Ở đó, một blogger cho rằng việc lấy giá trị từ kết quả khá dễ dàng, bằng cách đầu tiên nhận các giá trị như sau:pnnet:multinomppsummarymultinomt

pt(abs(summary1$coefficients / summary1$standard.errors), df=nrow(Data)-10, lower=FALSE) 

         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate 0.002670340   0.08325396      0.014506395     0.02025858       0.0006587898
Severe   0.006433581   0.12665278      0.005216581     0.02352202       0.0035612114

Theo Peter Dalgard, "Có ít nhất 2 yếu tố bị thiếu cho giá trị hai đuôi . Thông thường, việc sử dụng phân phối cho những gì thực sự là một -statistic; đối với dữ liệu tổng hợp, có thể là một sai lầm một sai lầm rất tệ. " Theo Brian Ripley, "đó cũng là một sai lầm khi sử dụng các bài kiểm tra Wald cho phù hợp, vì chúng gặp phải các vấn đề tương tự (có khả năng nghiêm trọng) như phù hợp với nhị thức. Sử dụng các khoảng tin cậy khả năng hồ sơ (mà gói cung cấp phần mềm), hoặc nếu bạn phải kiểm tra, các thử nghiệm tỷ lệ khả năng (ditto). "ptzmultinom

Tôi chỉ cần có thể lấy được giá trị đáng tin cậy .p


Bạn có thể sử dụng so sánh mô hình với kiểm tra tỷ lệ khả năng cho một mô hình đầy đủ và giảm sử dụng nnetcủa anova()chức năng.
caracal

Câu trả lời:


14

Còn việc sử dụng

z <- summary(test)$coefficients/summary(test)$standard.errors
# 2-tailed Wald z tests to test significance of coefficients
p <- (1 - pnorm(abs(z), 0, 1)) * 2
p

Về cơ bản, điều này sẽ dựa trên các hệ số ước tính liên quan đến sai số chuẩn của chúng và sẽ sử dụng thử nghiệm az để kiểm tra sự khác biệt đáng kể với số 0 dựa trên thử nghiệm hai đuôi. Yếu tố của hai cách khắc phục vấn đề mà Peter Dalgaard đã đề cập ở trên (bạn cần nó vì bạn muốn thử nghiệm hai đuôi chứ không phải một thử nghiệm một đuôi) và nó sử dụng thử nghiệm z, thay vì thử nghiệm t, để giải quyết vấn đề khác vấn đề mà bạn đề cập.

Bạn cũng có thể nhận được kết quả tương tự (Wald z-tests) bằng cách sử dụng

library(AER)
coeftest(test)

Các thử nghiệm tỷ lệ khả năng thường được coi là chính xác hơn so với các thử nghiệm Wald z (sau này sử dụng xấp xỉ bình thường, các thử nghiệm LR không) và chúng có thể được sử dụng

library(afex)
set_sum_contrasts() # use sum coding, necessary to make type III LR tests valid
library(car)
Anova(test,type="III")

Nếu bạn muốn thực hiện các thử nghiệm Tukey posthoc cặp, thì chúng có thể được lấy bằng cách sử dụng lsmeansgói như được giải thích trong bài đăng khác của tôi !


Giải thích thêm một chút về các bước có thể giúp OP.
Momo

1
Đã thêm một chút giải thích ngay bây giờ ...
Tom Wenseleers

1
Đây là một trang tốt mở rộng trên tùy chọn Wald z-test: stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats
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.