Làm thế nào người ta có thể chứng minh bằng thực nghiệm trong R phương pháp xác thực chéo mà AIC và BIC tương đương với?


26

Trong một câu hỏi khác trên trang web này, một số câu trả lời đã đề cập rằng AIC tương đương với xác thực chéo một lần (LOO) và BIC tương đương với xác thực chéo K-Fold. Có cách nào để chứng minh bằng thực nghiệm điều này trong R sao cho các kỹ thuật liên quan đến LOO và K-Fold được làm rõ và được chứng minh là tương đương với các giá trị AIC và BIC không? Mã nhận xét tốt sẽ hữu ích trong vấn đề này. Ngoài ra, để chứng minh BIC, vui lòng sử dụng gói lme4. Xem bên dưới để biết dữ liệu mẫu ...

library(lme4) #for the BIC function

generate.data <- function(seed)
{
    set.seed(seed) #Set a seed so the results are consistent (I hope)
    a <- rnorm(60) #predictor
    b <- rnorm(60) #predictor
    c <- rnorm(60) #predictor
    y <- rnorm(60)*3.5+a+b #the outcome is really a function of predictor a and b but not predictor c
    data <- data.frame(y,a,b,c) 
    return(data)    
}

data <- generate.data(76)
good.model <- lm(y ~ a+b,data=data)
bad.model <- lm(y ~ a+b+c,data=data)
AIC(good.model)
BIC(logLik(good.model))
AIC(bad.model)
BIC(logLik(bad.model))

Theo các bình luận trước đó, bên dưới tôi đã cung cấp một danh sách các hạt giống từ 1 đến 10000 trong đó AIC và BIC không đồng ý. Điều này được thực hiện bằng một tìm kiếm đơn giản thông qua các hạt giống có sẵn, nhưng nếu ai đó có thể cung cấp cách tạo dữ liệu có xu hướng tạo ra các câu trả lời khác nhau từ hai tiêu chí thông tin này thì nó có thể đặc biệt nhiều thông tin.

notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed

Bên cạnh đó, tôi nghĩ về việc đặt mua những hạt giống này theo mức độ mà AIC và BIC không đồng ý mà tôi đã cố gắng định lượng là tổng của sự khác biệt tuyệt đối của AIC và BIC. Ví dụ,

AICDiff <- AIC(bad.model) - AIC(good.model) 
BICDiff <- BIC(logLik(bad.model)) - BIC(logLik(good.model))
disagreement <- sum(abs(c(AICDiff,BICDiff)))

trong đó chỉ số bất đồng của tôi chỉ áp dụng hợp lý khi các quan sát là đáng chú ý. Ví dụ,

are.diff <- sum(sign(c(AICDiff,BICDiff)))
notable <- ifelse(are.diff == 0 & AICDiff != 0,TRUE,FALSE)

Tuy nhiên, trong trường hợp AIC và BIC không đồng ý, giá trị bất đồng được tính toán luôn giống nhau (và là một hàm của cỡ mẫu). Nhìn lại cách tính toán AIC và BIC tôi có thể thấy tại sao đây có thể là trường hợp tính toán, nhưng tôi không chắc tại sao nó lại là trường hợp về mặt khái niệm. Nếu ai đó cũng có thể làm sáng tỏ vấn đề đó, tôi sẽ đánh giá cao nó.


+1 Mã sẽ đơn giản để viết, nhưng tôi vẫn rất thích xem một bộ dữ liệu minh họa rõ ràng.

Tôi không chắc chắn tất cả những gì cần có trong một tập dữ liệu rõ ràng và minh họa, nhưng tôi đã cố gắng đưa vào một tập dữ liệu mẫu.
russellpierce

Vì vậy, hãy nhìn: những gì bạn cung cấp là một ví dụ về một tập hợp vô dụng, bởi vì BIC và AIC cho kết quả giống nhau: 340 v. 342 cho AIC và 349 v. 353 cho BIC - vì vậy good.model thắng trong cả hai trường hợp. Toàn bộ ý tưởng với sự hội tụ đó là việc xác thực chéo nhất định sẽ chọn cùng một mô hình với IC tương ứng của nó.

Tôi đã thực hiện quét đơn giản và ví dụ cho hạt giống 76, các IC không đồng ý.

1
Wow, đây là thứ thậm chí còn khó hơn để tôi có được; Điểm chung của tôi trong toàn bộ cuộc thảo luận là sự hội tụ của các định lý đó quá yếu nên sự khác biệt có thể xuất hiện từ các dao động ngẫu nhiên. (Và nó không hoạt động cho máy học, nhưng tôi hy vọng điều này là hiển nhiên.)

Câu trả lời:


5

Trong nỗ lực trả lời một phần câu hỏi của riêng tôi, tôi đã đọc mô tả của Wikipedia về xác nhận chéo một lần

liên quan đến việc sử dụng một quan sát duy nhất từ ​​mẫu ban đầu làm dữ liệu xác nhận và các quan sát còn lại làm dữ liệu huấn luyện. Điều này được lặp lại sao cho mỗi quan sát trong mẫu được sử dụng một lần làm dữ liệu xác nhận.

Trong mã R, tôi nghi ngờ rằng điều đó có nghĩa là gì đó như thế này ...

resid <- rep(NA, Nobs) 
for (lcv in 1:Nobs)
    {
        data.loo <- data[-lcv,] #drop the data point that will be used for validation
        loo.model <- lm(y ~ a+b,data=data.loo) #construct a model without that data point
            resid[lcv] <- data[lcv,"y"] - (coef(loo.model)[1] + coef(loo.model)[2]*data[lcv,"a"]+coef(loo.model)[3]*data[lcv,"b"]) #compare the observed value to the value predicted by the loo model for each possible observation, and store that value
    }

... được cho là mang lại giá trị trong phần dư có liên quan đến AIC. Trong thực tế, tổng số dư bình phương từ mỗi lần lặp của vòng lặp LOO được nêu chi tiết ở trên là một công cụ dự đoán tốt về AIC cho đáng chú ý.sebed, r ^ 2 = .9776. Tuy nhiên, một nơi khác , một người đóng góp cho rằng LOO nên tương đương với AIC (ít nhất là đối với các mô hình tuyến tính), vì vậy tôi hơi thất vọng vì r ^ 2 không gần hơn 1. Rõ ràng đây không thực sự là một câu trả lời - giống như mã bổ sung để cố gắng khuyến khích ai đó cố gắng cung cấp câu trả lời tốt hơn.

Phụ lục: Do AIC và BIC cho các mô hình có cỡ mẫu cố định chỉ thay đổi theo một hằng số, nên mối tương quan của BIC với phần dư bình phương cũng giống như thực tế của AIC đối với phần dư bình phương, do đó cách tiếp cận tôi thực hiện ở trên dường như không có kết quả.


lưu ý rằng đây sẽ là câu trả lời được chấp nhận của bạn cho tiền thưởng (trong trường hợp bạn không chọn câu trả lời, tiền thưởng sẽ tự động chọn câu trả lời có nhiều điểm nhất)
robin girard

1
tốt - trao tiền thưởng cho bản thân tôi có vẻ ngớ ngẩn - nhưng không ai khác đã gửi câu trả lời.
russellpierce
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.