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?

B_Miner
sumber
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.

mpiktas
sumber
Saya menemukan tautan ini bermanfaat untuk menguraikan bagaimana lm.ridge menghitung koefisien: mail-archive.com/[email protected]/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.

Thomas
sumber
2
Saya tidak mendapatkan hasil itu, bisakah Anda menggambarkannya?
B_Miner