Ridge dihukum GLM menggunakan augmentasi baris?

12

Saya telah membaca bahwa regresi ridge dapat dicapai dengan hanya menambahkan baris data ke matriks data asli, di mana setiap baris dibangun menggunakan 0 untuk variabel dependen dan akar kuadrat dari atau nol untuk variabel independen. Satu baris tambahan kemudian ditambahkan untuk setiap variabel independen.k

Saya bertanya-tanya apakah mungkin untuk mendapatkan bukti untuk semua kasus, termasuk untuk regresi logistik atau GLM lainnya.

Kepingan salju
sumber
Tidak, saya mendapatkannya dari ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… dan disebutkan secara singkat di halaman 335-4
Snowflake
1
Maaf karena menghapus komentar Anda di sana. Saya memutuskan saya salah sebelum saya melihat balasan Anda dan menghapusnya.
Glen_b -Reinstate Monica
2
Sedikit generalisasi masalah ini ditanyakan dan dijawab di stats.stackexchange.com/questions/15991 . Karena tidak membahas bagian regresi logistik dari pertanyaan ini, saya tidak memilih untuk menggabungkan dua utas.
whuber
GLM cocok menggunakan kuadrat terkecil yang berulang secara berulang, seperti pada bwlewis.github.io/GLM , dan dalam setiap iterasi seseorang dapat menggantikan langkah kuadrat terkecil tertimbang biasa dengan punggungan yang diberi penalti, pangkat kuadrat terkecil tertimbang untuk mendapatkan punggungan yang dihukum GLM. Bahkan, dalam kombinasi dengan hukuman punggungan adaptif ini digunakan untuk menyesuaikan L0 dihukum GLMS, seperti dalam paket l0ara, lihat biodatamining.biomedcentral.com/articles/10.1186/... dan journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers

Jawaban:

13

Regresi meminimalkan .i=1n(yixiTβ)2+λj=1pβj2

(Seringkali sebuah konstanta diperlukan, tetapi tidak menyusut. Dalam hal ini dimasukkan dalam dan prediktor - tetapi jika Anda tidak ingin mengecilkannya, Anda tidak memiliki baris yang sesuai untuk pengamatan semu. Atau jika Anda ingin mengecilkan itu, Anda jangan memiliki baris untuk itu. aku akan menulis seolah-olah itu tidak dihitung dalam , dan tidak menyusut, karena itu kasus yang lebih rumit. kasus lainnya adalah perubahan sepele dari ini .)pβp

Kita dapat menulis istilah kedua sebagai -pseudo-observasi jika kita dapat menulis setiap "y" dan masing-masing vektor (x sesuai "x" sehingga( p + 1 )p(p+1)

(yn+jxn+jTβ)2=λβj2,j=1,,p

Tetapi dengan inspeksi, cukup biarkan , biarkan dan biarkan semua lainnya (termasuk biasanya).yn+j=0xn+j,j=λxn+j,k=0xn+j,0=0

Kemudian

(yn+j[xn+j,0β0+xn+j,1β1+xn+j,2β2+...+xn+j,pβp])2=λβj2 .

Ini berfungsi untuk regresi linier. Itu tidak bekerja untuk regresi logistik, karena regresi logistik biasa tidak meminimalkan jumlah residu kuadrat.

[Regresi Ridge bukan satu-satunya hal yang dapat dilakukan melalui trik pengamatan semu - mereka muncul dalam sejumlah konteks lain]

Glen_b -Reinstate Monica
sumber
Terima kasih, saya sudah berjuang dengan menulis ulang semuanya dari regresi logistik, tetapi saya tidak bisa menerapkan metode data palsu. Dan saya tidak cukup percaya pada kemampuan saya sendiri untuk dapat mengatakan bahwa itu tidak mungkin.
Snowflake
Setidaknya saya tidak berpikir begitu. Saya akan melihat lagi fungsi kemungkinan.
Glen_b -Reinstate Monica
3
+1 Trik regresi tambahan terkait diperkenalkan dalam jawaban di stats.stackexchange.com/a/32753 dan stats.stackexchange.com/a/26187 , antara lain .
whuber
GLMs cocok menggunakan kuadrat terkecil berulang berulang, seperti di bwlewis.github.io/GLM , dan dalam setiap iterasi seseorang dapat menggantikan langkah kuadrat terkecil tertimbang biasa dengan punggungan yang dikenai sanksi, pangkat kuadrat terkecil tertimbang untuk mendapatkan punggungan yang dihukum GLM. Bahkan, dalam kombinasi dengan hukuman punggungan adaptif ini digunakan untuk menyesuaikan L0 dihukum GLMS, seperti dalam paket l0ara, lihat biodatamining.biomedcentral.com/articles/10.1186/... dan journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers
@ TomWenseleers terima kasih, ya, itu masuk akal
Glen_b -Reinstate Monica
0

Menggeneralisasi resep ini ke GLM memang tidak sulit karena GLM biasanya cocok digunakan dengan kuadrat terkecil yang berulang secara berulang . Oleh karena itu, dalam setiap iterasi seseorang dapat menggantikan langkah kuadrat terkecil tertimbang reguler dengan punggungan dihukum kuadrat terkecil kuadrat langkah untuk mendapatkan punggungan yang dihukum GLM. Faktanya, dalam kombinasi dengan penalti ridge adaptif resep ini digunakan untuk menyesuaikan L0 GLM yang dihukum (alias subset terbaik, yaitu GLMs di mana jumlah total koefisien bukan nol dihukum). Ini telah diterapkan misalnya dalam paket l0ara , lihat makalah ini dan ini untuk detailnya.

Perlu dicatat juga bahwa cara tercepat untuk menyelesaikan regresi ridge biasa adalah bentuk tertutup

lmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  solve(crossprod(X) + diag(lambdas), crossprod(X, y))[, 1]
}

untuk kasus di mana n>=p, atau menggunakan

lmridge_solve_largep = function (X, Y, lambda) (t(X) %*% solve(tcrossprod(X)+lambda*diag(nrow(X)), Y))[,1]

kapan p>ndan untuk model tanpa intersep.

Ini lebih cepat daripada menggunakan resep augmentasi baris , yaitu melakukan

lmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  qr.solve(rbind(X, diag(sqrt(lambdas))), c(y, rep(0, ncol(X))))
}

Jika Anda akan membutuhkan kendala nonnegativitas pada koefisien yang dipasang Anda maka Anda bisa melakukannya

library(nnls)

nnlmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x
}

yang kemudian memberikan hasil yang sedikit lebih akurat daripada

nnlmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=rbind(X,diag(sqrt(lambdas))), b=c(Y,rep(0,ncol(X))))$x 
}

(dan sebenarnya hanya solusinya nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x yang benar).

Saya belum menemukan bagaimana kasus yang dibatasi nonnegativitas dapat dioptimalkan lebih lanjut untuk p > nkasus ini - beri tahu saya jika ada yang tahu cara melakukan ini ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xtidak berfungsi]

Tom Wenseleers
sumber