Tính toán AIC bằng tay bằng tay trong R


15

Tôi đã thử tính AIC của hồi quy tuyến tính trong R nhưng không sử dụng AIChàm, như thế này:

lm_mtcars <- lm(mpg ~ drat, mtcars)

nrow(mtcars)*(log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))+(length(lm_mtcars$coefficients)*2)
[1] 97.98786

Tuy nhiên, AICđưa ra một giá trị khác:

AIC(lm_mtcars)
[1] 190.7999

Ai đó có thể cho tôi biết những gì tôi đang làm sai?


5
(chưa kiểm tra câu trả lời của bạn): Bạn không nhất thiết phải làm gì sai, vì khả năng thực sự chỉ được xác định cho đến một hằng số nhân; hai người có thể tính toán khả năng đăng nhập và nhận được các số khác nhau (nhưng sự khác biệt về khả năng đăng nhập là như nhau).
Glen_b -Reinstate Monica

1
Câu trả lời của Hong Oois có liên quan đến câu hỏi này, tôi nghĩ vậy. Công thức mà hàm AICsử dụng là -2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1).
COOLSerdash

luciano: "+1" trong công thức đó @COOLSerdash chỉ ra từ thuật ngữ tham số phương sai. Cũng lưu ý rằng hàm logLiknói rằng đối với lmcác mô hình, nó bao gồm 'tất cả các hằng số' ... vì vậy sẽ có một cái log(2*pi)ở đó ở đâu đó
Glen_b -Reinstate Monica

1
@Glen_b: Tại sao nói khả năng chỉ được xác định tối đa là hằng số nhân? Xét cho cùng, khi so sánh các mô hình không lồng nhau từ các họ phân phối khác nhau (ví dụ với AIC hoặc với thử nghiệm Cox), bạn cần nhớ hằng số đó.
Scortchi - Phục hồi Monica

@Scortchi định nghĩa không phải là của tôi! Bạn sẽ phải đưa nó lên với RAFisher. Đó là cách đó từ đầu, tôi nghĩ (1921). Rằng nó vẫn được định nghĩa theo cách đó, ít nhất là trong trường hợp liên tục, xem ở đây , ví dụ, ở câu bắt đầu 'Chính xác hơn,'.
Glen_b -Reinstate Monica

Câu trả lời:


18

Lưu ý rằng trợ giúp về chức năng logLiktrong R nói rằng đối với lmcác mô hình, nó bao gồm 'tất cả các hằng số' ... vì vậy sẽ có một số log(2*pi)ở đó ở đâu đó, cũng như một thuật ngữ không đổi khác cho số mũ trong khả năng. Ngoài ra, bạn không thể quên tính thực tế rằng là một tham số.σ2

L(μ^,σ^)=(12πsn2)nexp(12i(ei2/sn2))

2logL=nlog(2π)+nlogsn2+i(ei2/sn2)

=n[log(2π)+logsn2+1]

AIC=2p2logL

nhưng lưu ý rằng đối với một mô hình có 1 biến độc lập, p = 3 (hệ số x, hằng số và )σ2

Điều đó có nghĩa đây là cách bạn nhận được câu trả lời của họ:

nrow(mtcars)*(log(2*pi)+1+log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))
       +((length(lm_mtcars$coefficients)+1)*2)

Tại sao trong tính toán của bạn về bạn chỉ chia cho chứ không phải ? n n - ps2nnp
Luke Thorburn

1
Xem định nghĩa của AIC: trong đó vectơ của tham số, được ước tính ở mức tối đa (tức là tất cả các phần tử của là MLE); ví dụ: xem tiêu chí thông tin Wikipedia Akaike: Định nghĩa . Nếu bạn không chia cho ở đó trong tính toán của , thì bạn không tính được MLE của và do đó không thực sự tính toán AIC - thực tế bạn sẽ điều chỉnh hai lần cho ảnh hưởng của các tham số phù hợp. (Vâng, rất nhiều người đã làm sai)θ θ n σ 2 σ 22logL(θ^)+2pθθ^nσ^2σ2
Glen_b -Reinstate Monica

Có một lỗi đánh máy trong phương trình thứ hai? Nó phải là Ok tôi thấy, bạn đang sử dụng2logL=nlog(2π)+nlogsn+i(ei2/sn2)2πsn2
giai điệu

10

Các AICchức năng cung cấp cho , nơi là khả năng & là số thông số ước tính (bao gồm cả đánh chặn, và phương sai). Bạn đang sử dụng , trong đó là tổng bình phương còn lại, & là cỡ mẫu. Các formulæ này khác nhau bởi một hằng số phụ gia; miễn là bạn đang sử dụng cùng một công thức và xem xét sự khác biệt trong AIC giữa các mô hình khác nhau nơi các hằng số hủy bỏ, điều đó không thành vấn đề.2k2logLLknlogSrn+2(k1)Srn

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.