Ridge penalizou GLMs usando aumento de linha?

12

Eu li que a regressão de crista pode ser alcançada simplesmente adicionando linhas de dados à matriz de dados original, onde cada linha é construída usando 0 para as variáveis ​​dependentes e a raiz quadrada de k ou zero para as variáveis ​​independentes. Uma linha extra é então adicionada para cada variável independente.

Eu queria saber se é possível obter uma prova para todos os casos, incluindo regressão logística ou outros GLMs.

Floco de neve
fonte
Não, obtive-o em ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/… e foi mencionado brevemente na página 335-4
Floco de neve
1
Desculpe por excluir o comentário sobre você lá. Decidi que estava enganado antes de ver sua resposta e a excluí.
Glen_b -Reinstala Monica
2
Uma ligeira generalização desse problema é solicitada e respondida em stats.stackexchange.com/questions/15991 . Como ele não trata da parte da regressão logística desta questão, não estou votando para mesclar os dois threads.
whuber
Os GLMs são adequados usando mínimos quadrados com ponderação iterativa, como em bwlewis.github.io/GLM , e assim, em cada iteração, pode-se substituir o passo de mínimos quadrados ponderados regulares com um passo de mínimos quadrados ponderados penalizados de crista para obter um GLM penalizado de crista. De fato, em combinação com as penalidades adaptativas da cordilheira, isso é usado para ajustar GLMs penalizados por L0, como no pacote l0ara, consulte biodatamining.biomedcentral.com/articles/10.1186/… e journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers 29/08/19

Respostas:

13

A regressão de Ridge minimiza .i=1n(yixiTβ)2+λj=1pβj2

(Geralmente, é necessária uma constante, mas não reduzida. Nesse caso, ela está incluída no e nos preditores - mas se você não deseja reduzi-la, não possui uma linha correspondente para a pseudo observação. você quer reduzi-lo, você faz tem uma linha para ele. Eu vou escrevê-lo como se ele não é contado no p , e não encolhido, como é o caso mais complicado. o outro caso é uma mudança trivial a partir deste. )βp

Podemos escrever o segundo termo como pseudo-observações se pudermos escrever cada "y" e cada um dos vetores ( p + 1 ) correspondentes "x", de modo quep(p+1)

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

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

Então

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

Isso funciona para regressão linear. Não funciona para a regressão logística, porque a regressão logística comum não minimiza uma soma de resíduos quadrados.

[A regressão de Ridge não é a única coisa que pode ser feita por meio de truques de pseudo-observação - eles aparecem em vários outros contextos]

Glen_b -Reinstate Monica
fonte
Obrigado, eu já estava lutando para reescrever tudo, desde a regressão logística, mas simplesmente não conseguia implementar o método de dados falsos. E não confio em minhas próprias habilidades o suficiente para poder dizer que isso é impossível.
Snowflake
Pelo menos eu não acho. Vou dar uma outra olhada na função de probabilidade.
Glen_b -Reinstala Monica
3
+1 Os truques de regressão relacionados adicionais são introduzidos nas respostas em stats.stackexchange.com/a/32753 e stats.stackexchange.com/a/26187 , entre outros .
whuber
No entanto, os GLMs são adequados usando mínimos quadrados com ponderação iterativa, como em bwlewis.github.io/GLM , e assim, em cada iteração, pode-se substituir o passo de mínimos quadrados ponderados regulares com um passo de mínimos quadrados ponderados penalizado de crista para obter um GLM penalizado de crista. De fato, em combinação com as penalidades adaptativas da cordilheira, isso é usado para ajustar GLMs penalizados por L0, como no pacote l0ara, consulte biodatamining.biomedcentral.com/articles/10.1186/… e journals.plos.org/plosone/article?id=10.1371 /…
Tom Wenseleers 29/08/19
@TomWenseleers graças, sim, isso faz todo o sentido
Glen_b -Reinstate Monica
0

A generalização desta receita para os GLMs não é realmente difícil, pois os GLMs geralmente são adequados usando mínimos quadrados com ponderação iterativa . Portanto, dentro de cada iteração, pode-se substituir a etapa regular de mínimos quadrados ponderada com uma etapa de mínimos quadrados ponderada penalizada de crista para obter um GLM penalizado de crista. De fato, em combinação com penalidades adaptativas da crista, esta receita é usada para ajustar GLMs penalizados por L0 (também conhecido como melhor subconjunto, ou seja, GLMs em que o número total de coeficientes diferentes de zero é penalizado). Isso foi implementado, por exemplo, no pacote l0ara , consulte este documento e este para obter detalhes.

Também é importante notar que a maneira mais rápida e fechada de resolver uma regressão regular de cume é 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 o caso em que n>=p, ou usando

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

quando p>ne para um modelo sem interceptação.

Isso é mais rápido do que usar a receita de aumento de linha , ou seja, fazer

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 você precisar de restrições de não-negatividade em seus coeficientes ajustados , basta fazer

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 então dá um resultado um pouco mais preciso entre

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 estritamente falando, apenas a solução nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x é a correta).

Ainda não descobri como o caso restrito da não-negatividade poderia ser otimizado ainda mais para o p > ncaso - deixe-me saber se alguém saberia como fazer isso ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xnão funciona]

Tom Wenseleers
fonte