Ridge ukarał GLM za pomocą powiększania rzędów?


12

Czytałem, że regresję grzbietu można osiągnąć, po prostu dodając wiersze danych do oryginalnej macierzy danych, gdzie każdy wiersz jest konstruowany przy użyciu 0 dla zmiennych zależnych i pierwiastka kwadratowego k lub zero dla zmiennych niezależnych. Następnie dodaje się jeden dodatkowy wiersz dla każdej niezależnej zmiennej.

Zastanawiałem się, czy można uzyskać dowód dla wszystkich przypadków, w tym dla regresji logistycznej lub innych GLM.


Nie, dostałem to od ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… i zostało krótko wspomniane na stronie 335-4
Płatek śniegu

1
Przepraszamy za usunięcie tam komentarza. Uznałem, że się mylę, zanim zobaczyłem twoją odpowiedź i usunąłem ją.
Glen_b

2
Niewielkie uogólnienie tego problemu jest zadawane i udzielane na stronie stats.stackexchange.com/questions/15991 . Ponieważ nie dotyczy części regresji logistycznej tego pytania, nie głosuję za połączeniem dwóch wątków.
whuber

GLM są dopasowane przy użyciu iteracyjnie przeważonego najmniejszego kwadratu, tak jak w bwlewis.github.io/GLM , a więc w każdej iteracji można zastąpić regularny ważony krok najmniejszych kwadratów krokiem karanym ważonym najmniejszych kwadratów, aby uzyskać karę GLM karaną. W rzeczywistości w połączeniu z adaptacyjnymi karami grzebieniowymi jest to stosowane w celu dopasowania do GLM karanych L0, jak w pakiecie L0ara, patrz biodatamining.biomedcentral.com/articles/10.1186/... i journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers

Odpowiedzi:


14

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

βp

p(p+1)

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

yn+j=0xn+j,j=λxn+j,k=0xn+j,0=0

Następnie

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

Działa to w przypadku regresji liniowej. Nie działa w przypadku regresji logistycznej, ponieważ zwykła regresja logistyczna nie minimalizuje sumy kwadratów reszt.

[Regresja grzbietu nie jest jedyną rzeczą, którą można zrobić za pomocą takich pseudoobserwacyjnych sztuczek - pojawiają się one w wielu innych kontekstach]


Dzięki, już miałem problem z przepisaniem wszystkiego od regresji logistycznej, ale po prostu nie mogłem wdrożyć metody danych telefonicznych. I nie ufam moim umiejętnościom wystarczająco, aby móc powiedzieć, że jest to niemożliwe.
Płatek śniegu

Przynajmniej tak mi się nie wydaje. Przyjrzę się jeszcze raz funkcji prawdopodobieństwa.
Glen_b

3
+1 Także związanych sztuczki regresji wprowadzony w odpowiedzi na stats.stackexchange.com/a/32753 i stats.stackexchange.com/a/26187 , między innymi .
whuber

GLM są dopasowane przy użyciu iteracyjnie ponownie ważonych najmniejszych kwadratów, tak jak w bwlewis.github.io/GLM , więc w każdej iteracji można zastąpić regularny ważony krok najmniejszych kwadratów krokiem karanym ważonym najmniejszych kwadratów, aby uzyskać karę GLM karaną. W rzeczywistości w połączeniu z adaptacyjnymi karami grzebieniowymi jest to stosowane w celu dopasowania do GLM karanych L0, jak w pakiecie L0ara, patrz biodatamining.biomedcentral.com/articles/10.1186/... i journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers

@TomWenseleers dzięki, tak, to ma sens
Glen_b -Reinstate Monica

0

Uogólnienie tego przepisu na GLM rzeczywiście nie jest trudne, ponieważ GLM są zwykle dopasowane przy użyciu iteracyjnie przeważonych najmniejszych kwadratów . Dlatego w ramach każdej iteracji można zastąpić regularny ważony krok najmniejszych kwadratów krokiem karnym ważonym krokiem najmniejszych kwadratów, aby uzyskać punkt GLM karany kalenicą. W rzeczywistości, w połączeniu z adaptacyjnymi karami kalenicowymi, przepis ten stosuje się, aby dopasować GLM z karą L0 (czyli najlepszy podzbiór, tj. GLM, w których karana jest całkowita liczba niezerowych współczynników). Zostało to zaimplementowane na przykład w pakiecie L0ara , zobacz ten dokument i ten, aby uzyskać szczegółowe informacje.

Warto również zauważyć, że stosuje się najszybszy zamknięty sposób rozwiązywania regularnej regresji grzbietu

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]
}

w przypadku n>=p, gdy lub przy użyciu

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

kiedy p>ni dla modelu bez przechwytywania.

Jest to szybsze niż stosowanie przepisu powiększania wierszy , tj. Robienie

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))))
}

Jeśli będziesz potrzebować ograniczeń nieujemności względem dopasowanych współczynników , możesz to zrobić

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
}

co daje nieco dokładniejszy wynik btw niż

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 
}

(i ściśle mówiąc, tylko rozwiązanie nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x jest wtedy poprawne).

Jeszcze nie zorientowałem się, w jaki sposób można zoptymalizować przypadek ograniczony nieegatywnością dla tej p > nsprawy - daj mi znać, jeśli ktoś będzie wiedział, jak to zrobić ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xnie działa]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.