Sự khác biệt giữa triển khai hồi quy sườn trong R và SAS


10

Tôi đã đọc mô tả về hồi quy sườn trong Mô hình thống kê tuyến tính ứng dụng , Ed thứ 5 chương 11. Hồi quy sườn được thực hiện trên dữ liệu mỡ cơ thể có sẵn ở đây .

Sách giáo khoa khớp với đầu ra trong SAS, trong đó các hệ số biến đổi ngược được đưa ra trong mô hình được trang bị là:

Y=7.3978+0.5553X1+0.3681X20.1917X3

Điều này được hiển thị từ SAS là:

proc reg data = ch7tab1a outest = temp outstb noprint;
  model y = x1-x3 / ridge = 0.02;
run;
quit;
proc print data = temp;
  where _ridge_ = 0.02 and y = -1;
  var y intercept x1 x2 x3;
run;
Obs     Y    Intercept       X1         X2         X3

 2     -1     -7.40343    0.55535    0.36814    -0.19163
 3     -1      0.00000    0.54633    0.37740    -0.13687

Nhưng R cho các hệ số rất khác nhau:

data <- read.table("http://www.cst.cmich.edu/users/lee1c/spss/V16_materials/DataSets_v16/BodyFat-TxtFormat.txt", 
                   sep=" ", header=FALSE)
data <- data[,c(1,3,5,7)]
colnames(data)<-c("x1","x2","x3","y")
ridge<-lm.ridge(y ~ ., data, lambda=0.02)   
ridge$coef
coef(ridge)

>   ridge$coef
       x1        x2        x3 
10.126984 -4.682273 -3.527010 
>   coef(ridge)
                   x1         x2         x3 
42.2181995  2.0683914 -0.9177207 -0.9921824 
> 

Bất cứ ai có thể giúp tôi hiểu tại sao?


Tôi đã sử dụng cùng một bộ dữ liệu và phân tích nó trong SPSS. Kết quả tương tự như SAS. Tuy nhiên, nếu chúng ta có thể chuẩn hóa dữ liệu như trong sách, giá trị đầu tiên tại c = 0 tương tự như trong R và SPSS (chạy hồi quy tuyến tính đa biến). Tuy nhiên, kết quả khá khác nhau khi chúng ta di chuyển xa hơn như đã chỉ ra ở trên. Tôi cũng không tìm thấy manh mối về sự khác biệt giữa các đầu ra cho cùng một dữ liệu.
Asad

Câu trả lời:


6

Mặc dù hồi quy sườn núi thoạt nhìn giống như thuật toán đơn giản , ma quỷ nằm trong các chi tiết. Rõ ràng các biến ban đầu được chia tỷ lệ và tham số không phải là tham số mà bạn nghĩ nó được đưa ra mô tả ban đầu. Từ những gì tôi thu thập được khi đọc tài liệu tham khảo được đưa ra trong trang trợ giúp của R , không có ai đồng ý cách thực hiện hồi quy sườn núi. Vì vậy, sự khác biệt về kết quả chỉ có thể được giải thích bằng các thuật toán khác nhau được sử dụng bởi R và SAS. Hy vọng ai đó hiểu biết hơn có thể đưa ra câu trả lời chi tiết hơn.λlm.ridge

Bạn có thể thấy loại thuật toán nào được áp dụng trong R bằng cách xem nguồn của lm.ridge. Chỉ cần gõ lm.ridgevào dấu nhắc R.


Tôi thấy liên kết này hữu ích cho việc giải mã cách lm.ridge đang tính toán các hệ số: mail-archive.com/r-help@r-project.org/msg81115.html Nhưng vẫn khó hiểu về kết quả khác với văn bản tôi đã tham chiếu và SAS , cho rằng mỗi cái được cho là trở lại quy mô ban đầu.
B_Miner

@ user2040, kiểm tra xem cùng một dữ liệu được sử dụng bởi SAS và R. Nếu nó giống nhau, thì kết luận duy nhất là các thuật toán khác nhau. Trang trợ giúp của SAS đang nói gì?
mpiktas

@ user2040, tôi đã sao chép hồi quy sườn núi SAS trên R với dữ liệu của bạn. Vì vậy, chúng tôi biết chắc chắn rằng các thuật toán là khác nhau.
mpiktas

1
Bạn chỉ cần đánh tôi đến đó! :) Tôi đã xem trang trợ giúp của SAS mà bạn tham khảo. Tôi đã so sánh RMSE (chỉ dữ liệu trong mẫu, chưa xác thực với CV hoặc bootstrap) và kết quả R là vượt trội. Vì vậy, bạn có nghĩ hồi quy sườn là phù hợp nhất để dự đoán và không diễn giải các hệ số (vì kết quả có thể khác nhau bởi thuật toán)? Tôi đã biết rằng lý thuyết mô hình tuyến tính thông thường (CI, độ tương phản, v.v.) không phù hợp với hồi quy sườn (bootstrapping gần hơn nhưng vẫn có thể gây hiểu nhầm do sai lệch).
B_Miner

0

Sử dụng lm.ridge cũng tạo ra một vectơ tỷ lệ (thử đầu (mô hình) để xem tất cả đầu ra). Để có được các giá trị dự đoán trong R mà bạn thấy trong SAS, hãy lấy các hệ số và chia cho vectơ vô hướng.


2
Tôi không nhận được kết quả đó, bạn có thể minh họa không?
B_Miner
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.