Ridge ha penalizzato i GLM utilizzando l'aumento di riga?


12

Ho letto che la regressione della cresta potrebbe essere ottenuta semplicemente aggiungendo righe di dati alla matrice di dati originale, dove ogni riga è costruita usando 0 per le variabili dipendenti e la radice quadrata di o zero per le variabili indipendenti. Viene quindi aggiunta una riga aggiuntiva per ogni variabile indipendente.k

Mi chiedevo se fosse possibile ottenere una prova per tutti i casi, inclusa la regressione logistica o altri GLM.


No, l'ho preso da ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… ed è stato menzionato brevemente a pagina 335-4
Snowflake,

1
Mi dispiace per aver eliminato il commento su di te lì. Ho deciso di sbagliarmi prima di vedere la tua risposta e cancellarla.
Glen_b -Restate Monica

2
Una leggera generalizzazione di questo problema viene richiesta e risolta su stats.stackexchange.com/questions/15991 . Poiché non affronta la parte della regressione logistica di questa domanda, non sto votando per unire i due thread.
whuber

I GLM sono adatti usando i minimi quadrati iterativamente ripesati, come in bwlewis.github.io/GLM , e quindi all'interno di ogni iterazione si può subentrare al gradino dei minimi quadrati ponderati regolari con un gradino dei minimi quadrati ponderati con cresta penalizzato per ottenere un GLM penalizzato con cresta. In effetti, in combinazione con penalità adattive della cresta, questo viene usato per adattarsi ai GLM penalizzati di L0, come nel pacchetto l0ara, vedere biodatamining.biomedcentral.com/articles/10.1186/… e journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers,

Risposte:


13

La regressione della cresta minimizza .i=1n(yixiTβ)2+λj=1pβj2

(Spesso è necessaria una costante, ma non ridotta. In tal caso è inclusa in e predittori - ma se non si desidera ridurla, non si dispone di una riga corrispondente per la pseudo osservazione. Oppure se si vuole ridurlo, si fa hai una riga per questo. io lo scrivo come se non è conteggiato nel , e non rattrappito, come è il caso più complicato. l'altro caso è un cambiamento banale da questo .)pβp

Possiamo scrivere il secondo termine come pseudo-osservazioni se possiamo scrivere ogni "y" e ciascuno dei corrispondenti -vettori "x" tale che( p + 1 )p(p+1)

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

Ma per ispezione, lascia semplicemente , lascia e lascia che tutti gli altri (incluso genere).yn+j=0xn+j,j=λxn+j,k=0xn+j,0=0

Poi

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

Questo funziona per la regressione lineare. Non funziona per la regressione logistica, poiché la regressione logistica ordinaria non riduce al minimo una somma di residui quadrati.

[La regressione della cresta non è l'unica cosa che può essere fatta tramite tali trucchi di pseudo-osservazione: emergono in un numero di altri contesti]


Grazie, stavo già lottando per riscrivere tutto dalla regressione logistica, ma semplicemente non potevo implementare il metodo dei dati fasulli. E non mi fido sufficientemente delle mie capacità per poter dire che è impossibile.
Fiocco di neve

Almeno non penso che lo sia. Dò un'altra occhiata alla funzione di verosimiglianza.
Glen_b -Restate Monica

3
+1 Ulteriori trucchi di regressione correlati sono introdotti nelle risposte su stats.stackexchange.com/a/32753 e stats.stackexchange.com/a/26187 , tra l'altro .
whuber

I GLM sono adatti usando i minimi quadrati iterativamente ripesati , tuttavia, come in bwlewis.github.io/GLM , e così all'interno di ogni iterazione si può subentrare al gradino dei minimi quadrati ponderati regolari con un gradino dei minimi quadrati ponderati con cresta penalizzato per ottenere un GLM penalizzato con cresta. In effetti, in combinazione con penalità adattive della cresta, questo viene usato per adattarsi ai GLM penalizzati di L0, come nel pacchetto l0ara, vedere biodatamining.biomedcentral.com/articles/10.1186/… e journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers,

@TomWenseleers grazie, sì, ha perfettamente senso
Glen_b -Reinstate Monica

0

In effetti, generalizzare questa ricetta con i GLM non è difficile in quanto i GLM sono generalmente adatti usando i minimi quadrati iterativamente ripesati . Quindi, all'interno di ogni iterazione si può sostituire il gradino dei minimi quadrati ponderati regolari con un gradino dei minimi quadrati ponderati con cresta penalizzata per ottenere un GLM penalizzato con cresta. In effetti, in combinazione con penalità adattive della cresta, questa ricetta viene utilizzata per adattarsi a GLM penalizzati L0 (ovvero il miglior sottoinsieme, ovvero GLM in cui viene penalizzato il numero totale di coefficienti diversi da zero). Questo è stato implementato ad esempio nel pacchetto l0ara , vedere questo documento e questo per i dettagli.

Vale anche la pena notare che sta usando il modo più veloce in forma chiusa per risolvere una regressione della cresta regolare

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

nel caso in cui n>=po utilizzando

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

quando p>ne per un modello senza intercettazione.

Questo è più veloce rispetto all'utilizzo della ricetta per l'aumento di riga , ovvero fare

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

Se ti capita di aver bisogno di vincoli di non negatività sui tuoi coefficienti adattati, allora puoi semplicemente farlo

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
}

che quindi dà un risultato leggermente più accurato tra

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 
}

(e a rigor di termini solo la soluzione nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x è quindi quella corretta).

Non ho ancora capito come il caso vincolato dalla non negatività potrebbe essere ulteriormente ottimizzato per il p > ncaso - fammi sapere se qualcuno capita come fare per farlo ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xnon funziona]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.