¿Ridge penalizó los GLM usando el aumento de filas?

12

He leído que la regresión de crestas podría lograrse simplemente agregando filas de datos a la matriz de datos original, donde cada fila se construye usando 0 para las variables dependientes y la raíz cuadrada de o cero para las variables independientes. Luego se agrega una fila adicional para cada variable independiente.k

Me preguntaba si es posible obtener una prueba para todos los casos, incluida la regresión logística u otros GLM.

Copo de nieve
fuente
No, lo obtuve de ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… y se mencionó brevemente en la página 335-4
Copo de nieve
1
Perdón por eliminar el comentario sobre ti allí. Decidí que me había equivocado antes de ver tu respuesta y eliminarla.
Glen_b -Reinstale a Monica
2
Se solicita y se responde una ligera generalización de este problema en stats.stackexchange.com/questions/15991 . Debido a que no aborda la parte de regresión logística de esta pregunta, no voy a votar para fusionar los dos hilos.
whuber
Los GLM se ajustan utilizando mínimos cuadrados repesados ​​de forma iterativa, como en bwlewis.github.io/GLM , por lo que dentro de cada iteración se puede sustituir el paso regular de mínimos cuadrados ponderados con un paso de mínimos cuadrados ponderados con crestas para obtener un GLM penalizado con crestas. De hecho, en combinación con penalizaciones de cresta adaptativa, esto se usa para ajustar GLM penalizados L0, como en el paquete l0ara, consulte biodatamining.biomedcentral.com/articles/10.1186/… y journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers

Respuestas:

13

La regresión de cresta minimiza .i=1n(yixiTβ)2+λj=1pβj2

(A menudo se requiere una constante, pero no se reduce. En ese caso, se incluye en elβp

p(p+1)

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

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

Luego

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

Esto funciona para la regresión lineal. No funciona para la regresión logística, porque la regresión logística ordinaria no minimiza una suma de residuos al cuadrado.

[La regresión de cresta no es lo único que se puede hacer a través de estos trucos de pseudoobservación: surgen en varios otros contextos]

Glen_b -Reinstate a Monica
fuente
Gracias, ya estaba luchando con reescribir todo, desde la regresión logística, pero simplemente no podía implementar el método de datos falsos. Y no confío en mis propias habilidades lo suficiente como para poder decir que es imposible.
Copo de nieve
Al menos no lo creo. Echaré otro vistazo a la función de probabilidad.
Glen_b -Reinstale a Monica
3
+1 Se introducen trucos de regresión relacionados adicionales en las respuestas en stats.stackexchange.com/a/32753 y stats.stackexchange.com/a/26187 , entre otros .
whuber
Sin embargo, los GLM se ajustan utilizando mínimos cuadrados repesados ​​de forma iterativa, como en bwlewis.github.io/GLM , por lo que dentro de cada iteración se puede sustituir el paso regular de mínimos cuadrados ponderados con un paso de mínimos cuadrados ponderados con cresta para obtener un GLM penalizado con cresta. De hecho, en combinación con penalizaciones de cresta adaptativa, esto se usa para ajustar GLM penalizados L0, como en el paquete l0ara, consulte biodatamining.biomedcentral.com/articles/10.1186/… y journals.plos.org/plosone/article?id=10.1371 / ...
Tom Wenseleers
@TomWenseleers gracias, sí, eso tiene mucho sentido
Glen_b -Reinstate Mónica
0

De hecho, generalizar esta receta a GLM no es difícil, ya que los GLM generalmente se ajustan utilizando mínimos cuadrados repesados ​​de forma iterativa . Por lo tanto, dentro de cada iteración, se puede sustituir el paso regular de mínimos cuadrados ponderados con un paso de mínimos cuadrados ponderado de cresta para obtener un GLM penalizado de cresta. De hecho, en combinación con penalizaciones de cresta adaptativa, esta receta se utiliza para ajustar GLM penalizados L0 (también conocido como el mejor subconjunto, es decir, GLM donde se penaliza el número total de coeficientes distintos de cero). Esto se ha implementado, por ejemplo, en el paquete l0ara , consulte este documento y este para obtener más detalles.

También vale la pena señalar que la forma más rápida de resolver una regresión de cresta regular es usar

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

para el caso donde n>=p, o usando

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

cuando p>ny para un modelo sin intercepción.

Esto es más rápido que usar la receta de aumento de filas , es decir, hacer

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

Si resulta que necesita restricciones de no negatividad en sus coeficientes ajustados, entonces simplemente puede hacer

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
}

que luego da un resultado un poco más preciso por cierto que

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 
}

(y estrictamente hablando, solo la solución nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x es la correcta).

Todavía no he descubierto cómo el caso restringido de no negatividad podría optimizarse aún más para el p > ncaso; avíseme si alguien sabe cómo hacer esto ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xno funciona]

Tom Wenseleers
fuente