Perbedaan antara implementasi regresi ridge di R dan SAS


10

Saya telah membaca deskripsi regresi ridge dalam Model Statistik Terapan Linier , edisi ke 5 bab 11. Regresi ridge dilakukan pada data lemak tubuh yang tersedia di sini .

Buku teks cocok dengan output dalam SAS, di mana koefisien ditransformasikan kembali diberikan dalam model pas sebagai:

Y=-7.3978+0,5553X1+0,3681X2-0,1917X3

Ini ditunjukkan dari SAS sebagai:

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

Tetapi R memberikan koefisien yang sangat berbeda:

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 
> 

Adakah yang bisa membantu saya memahami mengapa?


Saya telah menggunakan kumpulan data yang sama dan menganalisisnya di SPSS. Hasilnya mirip dengan SAS. Namun jika kita dapat menstandardisasi data seperti dalam buku, nilai pertama pada c = 0 serupa dalam R dan SPSS (menjalankan regresi linier berganda). Namun hasilnya sangat berbeda ketika kita bergerak lebih jauh seperti yang ditunjukkan di atas. Saya juga tidak menemukan petunjuk perbedaan antara output untuk data yang sama.
asad

Jawaban:


6

λlm.ridge

Anda dapat melihat jenis algoritma apa yang diterapkan dalam R dengan melihat sumbernya lm.ridge. Cukup ketik lm.ridgeprompt R.


Saya menemukan tautan ini bermanfaat untuk menguraikan bagaimana lm.ridge menghitung koefisien: mail-archive.com/r-help@r-project.org/msg81115.html Tetapi masih bingung betapa berbedanya hasil dari teks yang saya referensikan dan SAS , mengingat bahwa masing-masing seharusnya kembali ke skala semula.
B_Miner

@ user2040, periksa apakah data yang sama digunakan oleh SAS dan R. Jika itu sama, maka satu-satunya kesimpulan adalah bahwa algoritme berbeda. Apa yang dikatakan halaman bantuan SAS?
mpiktas

@ user2040, saya telah mereplikasi regresi ridge SAS pada R dengan data Anda. Jadi kita tahu pasti bahwa algoritmanya berbeda.
mpiktas

1
Anda baru saja mengalahkan saya untuk itu! :) Saya melihat halaman bantuan SAS yang Anda referensikan. Saya membandingkan RMSE (hanya data sampel, belum memvalidasi dengan CV atau bootstrap) dan hasil R lebih unggul. Jadi, apakah menurut Anda regresi ridge paling cocok untuk prediksi dan tidak menginterpretasikan koefisien (karena hasilnya dapat berbeda dengan algoritma)? Saya sudah tahu bahwa teori model linier biasa (CI, kontras dll.) Keluar untuk regresi ridge (bootstrap semakin dekat tetapi masih bisa menyesatkan karena bias).
B_Miner

0

Menggunakan lm.ridge juga menghasilkan vektor penskalaan (coba kepala (model) untuk melihat semua output). Untuk mendapatkan nilai prediksi dalam R yang Anda lihat di SAS, ambil koefisien dan bagi dengan vektor skalar.


2
Saya tidak mendapatkan hasil itu, bisakah Anda menggambarkannya?
B_Miner
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.