ANOVA để so sánh các mô hình


9

Tôi đang xem trang web này để xem hội thảo về GAM trong R: http://qcbs.ca/wiki/r_workshop8

Cuối phần 2. Multiple smooth termshọ trình bày một ví dụ, nơi họ sử dụng anovađể so sánh ba mô hình khác nhau để xác định mô hình phù hợp nhất. Đầu ra là

  Analysis of Deviance Table
  Model 1: y ~ x0 + s(x1)
  Model 2: y ~ x0 + s(x1) + x2
  Model 3: y ~ x0 + s(x1) + s(x2)
    Resid. Df Resid. Dev      Df Deviance  Pr(>Chi)    
  1    394.08     5231.6                               
  2    393.10     4051.3 0.97695   1180.2 < 2.2e-16 ***
  3    385.73     1839.5 7.37288   2211.8 < 2.2e-16 ***
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Dựa trên điều này họ kết luận rằng mô hình 3 là tốt nhất. Câu hỏi của tôi là làm thế nào họ nhìn thấy điều đó?

Hiểu biết hiện tại của tôi là: Giá Pr(>Chi)trị nhỏ cho cả mô hình 2 và 3, vì vậy những giá trị này tốt hơn mô hình 1. Tuy nhiên, họ đang sử dụng biến nào khác để xác định rằng 3 tốt hơn 2?


3
Gợi ý: biến (s) nào xuất hiện trong Mô hình 3 không xuất hiện trong Mô hình 2? Để trả lời điều này, bạn cần biết "s (x2)" nghĩa là gì - và điều đó phụ thuộc vào cách sxác định hàm . (. Tôi đoán đó là một số loại spline, nhưng tôi miễn cưỡng để cho bất kỳ nhiều hơn thế) Chúng ta có thể nói từ đầu ra rằng nó khá phức tạp - di chuyển từ x2để s(x2)thêm bậc tự do - nhưng đó là tất cả chúng ta có thể xác định về nó từ đầu ra này. 7.37288
whuber

1
Làm AIC(model1, model2, model3)tiết lộ rằng mô hình 3 có thấp hơn AIC. Đây có thể là một bằng chứng nữa cho thấy đây là mô hình tối ưu trong số ba người
BillyJean

3
Sự khác biệt lớn về độ lệch giữa các mô hình (2) và (3) là hấp dẫn.
whuber

Câu trả lời:


12

Đầu ra từ anova()là một loạt các thử nghiệm tỷ lệ khả năng. Các dòng trong đầu ra là:

  1. Dòng đầu tiên trong đầu ra tương ứng với mô hình đơn giản nhất chỉ bằng một số x1(tôi bỏ qua yếu tố này x0vì nó không được xem xét trong ví dụ của bạn) - điều này không được kiểm tra đối với bất kỳ điều gì đơn giản hơn do đó một vài mục nhập cột cuối cùng là trống.
  2. Dòng thứ hai là phép thử tỷ lệ khả năng giữa mô hình ở dòng 1 và mô hình ở dòng 2. Với chi phí 0.97695thêm độ tự do, độ lệch còn lại được giảm đi 1180.2. Việc giảm độ lệch này (hoặc ngược lại, tăng độ lệch được giải thích), với chi phí <1 độ tự do, rất khó xảy ra nếu hiệu quả thực sự x2là 0.

    Tại sao 0.97695mức độ tự do tăng? Chà, hàm tuyến tính x2sẽ thêm 1 df vào mô hình nhưng mượt mà hơn x1sẽ bị phạt trở lại một chút so với trước đây và do đó sử dụng mức độ tự do hiệu quả ít hơn một chút, do đó <1 thay đổi về mức độ tự do tổng thể.

  3. Dòng thứ ba hoàn toàn giống như tôi đã mô tả ở trên nhưng để so sánh giữa mô hình ở dòng thứ hai và mô hình ở dòng thứ ba: tức là dòng thứ ba đang đánh giá sự cải thiện trong việc chuyển từ mô hình hóa x2thành thuật ngữ tuyến tính sang mô hình hóa x2như một Chức năng mịn. Một lần nữa, sự cải thiện về mức độ phù hợp của mô hình (thay đổi độ lệch hiện 2211.8tại phải trả giá bằng 7.37288nhiều mức độ tự do hơn) là không thể nếu các tham số bổ sung liên quan đến s(x2)đều bằng 0.

Tóm lại, dòng 2 cho biết Mô hình 2 phù hợp hơn Mô hình 1, do đó, hàm tuyến tính x2tốt hơn không có tác dụng x1. Nhưng dòng 3 nói rằng Mô hình 3 phù hợp với dữ liệu tốt hơn Mô hình 2, do đó, chức năng trơn tru x2được ưu tiên hơn chức năng tuyến tính của x2. Đây là một phân tích tuần tự của các mô hình, không phải là một loạt các so sánh so với mô hình đơn giản nhất.

Tuy nhiên…

Những gì họ đang trình bày không phải là cách tốt nhất để làm điều này - lý thuyết gần đây sẽ gợi ý rằng đầu ra từ summary(m3)sẽ có các thuộc tính bảo hiểm "chính xác" nhất. Hơn nữa, để chọn giữa các mô hình, có lẽ nên sử dụng select = TRUEkhi khớp mô hình đầy đủ (mô hình có hai độ mịn), cho phép thu hẹp các thuật ngữ sẽ bao gồm mô hình với tuyến tính x2hoặc thậm chí không có tác dụng của biến này. Chúng cũng không phù hợp bằng cách sử dụng lựa chọn độ mịn của REML hoặc ML, điều mà nhiều người dùng mgcv của chúng tôi sẽ xem xét tùy chọn mặc định (mặc dù đó không phải là mặc định thực tế trong gam())

Những gì tôi sẽ làm là:

library("mgcv")
gam_data <- gamSim(eg=5)
m3 <- gam(y ~ x0 + s(x1) + s(x2), data = gam_data, select = TRUE,
          method = "REML")
summary(m3)

Dòng cuối cùng tạo ra như sau:

> summary(m3)

Family: gaussian 
Link function: identity 

Formula:
y ~ x0 + s(x1) + s(x2)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   8.4097     0.2153  39.053  < 2e-16 ***
x02           1.9311     0.3073   6.284 8.93e-10 ***
x03           4.4241     0.3052  14.493  < 2e-16 ***
x04           5.7639     0.3042  18.948  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Approximate significance of smooth terms:
        edf Ref.df     F p-value    
s(x1) 2.487      9 25.85  <2e-16 ***
s(x2) 7.627      9 76.03  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

R-sq.(adj) =  0.769   Deviance explained = 77.7%
-REML = 892.61  Scale est. = 4.5057    n = 400

Chúng ta có thể thấy rằng cả hai thuật ngữ trơn tru đều khác biệt đáng kể so với các hàm null.

Những gì select = TRUEđang làm là đặt thêm một hình phạt vào khoảng trống của hình phạt (đây là một phần của spline hoàn toàn trơn tru). Nếu bạn không có điều này, lựa chọn độ mịn chỉ có thể xử phạt trở lại trơn tru đối với hàm tuyến tính (vì hình phạt thực hiện lựa chọn độ mịn chỉ hoạt động trên các phần không trơn tru (phần uốn lượn) của cơ sở). Để thực hiện lựa chọn, chúng ta cần phải có khả năng xử phạt không gian rỗng (phần trơn tru của cơ sở).

select = TRUEđạt được điều này thông qua việc sử dụng hình phạt thứ hai được thêm vào tất cả các điều khoản trơn tru trong mô hình (Marra và Wood, 2011). Điều này hoạt động như một loại co rút, kéo tất cả các thuật ngữ trơn tru về 0, nhưng nó sẽ kéo các thuật ngữ thừa về 0 nhanh hơn nhiều, do đó chọn chúng ra khỏi mô hình nếu chúng không có bất kỳ khả năng giải thích nào. Chúng tôi trả giá cho điều này khi đánh giá tầm quan trọng của sự trơn tru; lưu ý Ref.dfcột ở trên (9 xuất phát từ giá trị mặc định của k = 10, đối với các spline tấm mỏng có ràng buộc định tâm có nghĩa là 9 hàm cơ bản), thay vì trả một số thứ như 2,5 và 7,7 độ tự do cho các spline, chúng tôi đang trả 9 độ Tự do mỗi. Điều này phản ánh thực tế rằng chúng tôi đã thực hiện lựa chọn, rằng chúng tôi không chắc chắn nên sử dụng thuật ngữ nào trong mô hình.

Lưu ý: điều quan trọng là bạn không sử dụng anova(m1, m2, m3)các cuộc gọi loại trên các mô hình bằng cách sử dụng select = TRUE. Như đã lưu ý ?mgcv:::anova.gam, phép tính gần đúng được sử dụng có thể rất tệ đối với việc làm mịn với các hình phạt trên khoảng trống null của chúng.

Trong các bình luận, @BillyJean đã đề cập đến việc sử dụng AIC để lựa chọn. Công trình gần đây của Simon Wood và các đồng nghiệp (Wood et al, 2016) đã đưa ra một AIC chiếm tỷ lệ không chắc chắn thêm do chúng tôi đã ước tính các thông số độ mịn trong mô hình. AIC này hoạt động khá tốt, nhưng có một số thảo luận về hành vi của việc tạo ra AIC của chúng khi các độ mịn của IIRC gần với các hàm tuyến tính. Dù sao, AIC sẽ cung cấp cho chúng tôi:

m1 <- gam(y ~ x0 + s(x1), data = gam_data, method = "ML")
m2 <- gam(y ~ x0 + s(x1) + x2, data = gam_data, method = "ML")
m3 <- gam(y ~ x0 + s(x1) + s(x2), data = gam_data, method = "ML")
AIC(m1, m2, m3)

> AIC(m1, m2, m3)
          df      AIC
m1  7.307712 2149.046
m2  8.608444 2055.651
m3 16.589330 1756.890

Lưu ý Tôi đã chỉnh lại tất cả những điều này với lựa chọn độ mịn ML vì tôi không chắc AIC sẽ làm gì khi nào select = TRUEvà bạn phải cẩn thận so sánh các mô hình với các hiệu ứng cố định khác nhau, không bị phạt hoàn toàn, sử dụng REML.

Một lần nữa suy luận là rõ ràng; mô hình với độ mịn x1x2phù hợp hơn đáng kể so với một trong hai mô hình còn lại.


Marra, G. & Wood, SN Lựa chọn biến thực tế cho các mô hình phụ gia tổng quát. Tính toán. Thống kê Dữ liệu hậu môn. 55, 2372 Vang2387 (2011).

Wood, SN, Pya, N. & Säfken, B. Thông số làm mịn và lựa chọn mô hình cho các mô hình mịn chung. Mứt. Thống kê PGS. 111, 1548 bóng1563 (2016).


1
+1 cho câu trả lời chi tiết với mã và tham chiếu. Tôi sẽ đọc và tìm hiểu câu trả lời này một cách chi tiết sau. Một câu hỏi, bạn nói đó là thử nghiệm tỷ lệ khả năng. nhưng trong ?anova.lmđó không có lựa chọn nào như vậy, có thể là F chisq hoặc CP
Haitao Du

1
@ hxd1011 đây mgcv:::anova.gamkhông phải là phương pháp cho lmcác mô hình. Đây là những phân tích về các thử nghiệm sai lệch nhưng đó cũng giống như tỷ lệ khả năng.
Gavin Simpson

1
Cảm ơn. Bạn có thể trả lời câu hỏi của tôi ở đây với một số tóm tắt cấp cao? Hoặc câu trả lời của bạn ở đây đã được bảo hiểm.
Haitao Du

1
@ hxd1011 Bạn cần phải cụ thể hơn. Những loại mô hình? Có rất nhiều giả định đằng sau anova()nhưng cái nào phụ thuộc vào mô hình là gì. Thông thường đối với các mô hình không phải Gaussian, chúng thực hiện các thử nghiệm tỷ lệ khả năng hoặc các thử nghiệm tương tự, nhưng các giả định sẽ khác nhau; chúng khác nhau ngay cả đối với GLM và GAM. anova()là một chức năng tiện lợi nhưng nó không làm ANOVA cảm nhận mô hình tuyến tính chung cho bất cứ điều gì ngoại trừ một mô hình tuyến tính chung (được trang bị thông qua lm()nói).
Gavin Simpson

2
@DeltaIV Xin lỗi, đó là từ ngữ kém về phía tôi. Điều gì select = TRUElàm hoàn toàn phạt tất cả các điều khoản trơn tru, mà AFAIU đưa ra so sánh bằng cách sử dụng REML OK. Tôi đã không nhìn vào chi tiết của AIC mới cho GAM để xem nó sẽ làm gì với các hình phạt bổ sung được thêm vào khi sử dụng select = TRUE. Vì vậy, nếu chúng ta rơi select = TRUEvào khía cạnh an toàn, chúng ta có một vấn đề là REML không phải là khả năng thực sự và không được sử dụng trong các so sánh AIC vì nó phụ thuộc vào các hiệu ứng cố định trong mô hình. Kế toán cho cả hai mối quan tâm có nghĩa là tôi đã sử dụng method = "ML"(không method = "REML") khi trang bị lại.
Gavin Simpson

3

Bạn có thể muốn thử nghiệm hai mô hình với lrest.

lrtest(two_term_model, two_smooth_model)

Model 1: y ~ x0 + s(x1) + x2
Model 2: y ~ x0 + s(x1) + s(x2)
      #Df  LogLik    Df  Chisq Pr(>Chisq)    
1  8.1107 -995.22                            
2 15.0658 -848.95 6.955 292.55  < 2.2e-16 ***

Mặc dù việc thêm một chức năng trơn tru vào cả hai thuật ngữ thực sự làm phức tạp mô hình, sự cải thiện khả năng đăng nhập là rất đáng kể. Điều này không đáng ngạc nhiên vì dữ liệu được tạo bởi trình giả lập GAM.

Bạn cũng có thể muốn in ra số liệu thống kê tóm tắt:

Link function: identity 

Formula:
y ~ x0 + s(x1) + x2

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  11.6234     0.3950  29.429  < 2e-16 ***
x02           2.1147     0.4180   5.059 6.48e-07 ***
x03           4.3813     0.4172  10.501  < 2e-16 ***
x04           6.2644     0.4173  15.010  < 2e-16 ***
x2           -6.4110     0.5212 -12.300  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Approximate significance of smooth terms:
        edf Ref.df     F p-value    
s(x1) 2.111  2.626 64.92  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

R-sq.(adj) =  0.583   Deviance explained = 58.9%
GCV = 8.7944  Scale est. = 8.6381    n = 400

Family: gaussian 
Link function: identity 

Formula:
y ~ x0 + s(x1) + s(x2)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   8.3328     0.2074  40.185  < 2e-16 ***
x02           2.1057     0.2955   7.125 5.15e-12 ***
x03           4.3715     0.2934  14.901  < 2e-16 ***
x04           6.1197     0.2935  20.853  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Approximate significance of smooth terms:
        edf Ref.df     F p-value    
s(x1) 2.691  3.343 95.00  <2e-16 ***
s(x2) 7.375  8.356 85.07  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

R-sq.(adj) =  0.796   Deviance explained = 80.2%
GCV = 4.3862  Scale est. = 4.232     n = 400

Lưu ý sự khác biệt về độ lệch được giải thích (nó rất lớn). Mô hình phức tạp hơn cũng có R-sq. (Adj) tốt hơn. Thuật ngữ làm mịn thứ hai rất có ý nghĩa và phù hợp với dữ liệu.


2
Không phải điều này chỉ tạo ra một ví dụ khác như thế trong câu hỏi sao? Bạn có thể chỉ ra rõ ràng hơn cách nó trả lời cho câu hỏi?
whuber
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.