Cómo arreglar un coeficiente y ajustar otros usando regresión

11

Me gustaría corregir manualmente un cierto coeficiente, digamos , luego ajustar los coeficientes a todos los demás predictores, mientras en el modelo.β 1 = 1.0β1=1.0β1=1.0

¿Cómo puedo lograr esto usando R? En particular, me gustaría trabajar con LASSO ( glmnet) si es posible.

Alternativamente, ¿cómo puedo restringir este coeficiente a un rango específico, digamos ?0.5β11.0

raco
fuente
Para especificar restricciones de recuadro en los coeficientes ajustados, existen los argumentos lower.limits y upper.limits en glmnet, ¿verdad?
Tom Wenseleers

Respuestas:

4

Necesitas usar el offsetargumento así:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
x1=matrix(rnorm(100),100,1)
y=rnorm(100)
fit1=glmnet(x,y,offset=x1)
fit1$offset
print(fit1)

Sobre el rango ... No creo que se haya implementado en glmnet. Si usan algún método numérico, es posible que desee profundizar en el código R e intentar restringirlo allí, pero necesitará un fondo de programación bueno y sólido.

Stat
fuente
2
¿Qué está offsethaciendo realmente? ¿Cómo se 1.1*x1determina el valor de la pregunta?
whuber
Leí la documentación de 'offset' en glmnet, y todavía no estoy seguro de lo que hace. No pude encontrar ningún gran ejemplo, pero la mayoría de los procesos de referencia de Poisson. ¿Por qué se usa 1.1 * x1?
raco
Pensé que estaba arreglando los coeficientes para ser . Acabo de editar la respuesta. El desplazamiento es el término en el que el modelo no estima su coeficiente, pero se supone que tiene el valor 1.β1=1.1
Estadísticas
Estoy bastante feliz con esta respuesta. Puedo iterar sobre diferentes "coeficientes" de compensación y comparar modelos. ¡Gracias!
raco
1
Con respecto a la offsetdel glmnetpaquete, la respuesta proporcionada por Stat no me hace sentido. Cuando ejecuto fit1 beta)] no veo ninguna . ¿Podría aclarar cómo funciona el desplazamiento en su ejemplo? Para el rango de las versiones beta, puede usar los argumentos y . beta[,ncol(fit1β1=1.0lower.limitsupper limits
Mario Nuñez
9

Bueno, pensemos. Tienes:

Y=b0+b1x1+b2x2+e

(para que sea simple) Desea forzar así que quiereb1=1

Y=b0+x1+b2x2+e

así que puedes restar de cada lado dejando:x1

Ynew=Yx1=b0+b2x2+e

que luego puede estimar .b2

Peter Flom - Restablece a Monica
fuente
2
Esa es la parte fácil (y he recordado en otros hilos como recuerdo). ¿Qué hay de restringir el coeficiente a un rango? La parte especialmente difícil de este problema es obtener buenos límites de confianza cuando la estimación se encuentra en el límite de la región de restricción.
whuber
2
Eso es definitivamente más difícil. Me perdí el final del post. Pero creo que debería dejar mi respuesta ya que responde parte de la pregunta
Peter Flom - Restablece a Monica
¿Esto todavía se generaliza si ? Sea lugar de 1, , donde es el coeficiente elegido por la regresión OLS. β 1 = 0.75 Y n e w = Y - .75 x 1 = β 0 + ( β 1- 0.75 ) x 1 + β 2 x 2 + ϵ β 1β11β1=0.75Ynew=Y.75x1=β0+(β10.75)x1+β2x2+ϵβ1
raco
1
Sí, si se fija en .75, entonces hacer lo que diga funcionará. Pero como señala @whuber, esa es la parte fácil de este problema
Peter Flom - Restablece a Monica
2
@whuber, en un marco Bayesiano, podría lanzar un paso de Metrópolis para arrojar cualquier coeficiente fuera de su rango o, alternativamente, podría tomar muestras de una distribución normal multivariada truncada.
John
3

Con respecto a los coeficientes de restricción para estar dentro de un rango, un enfoque bayesiano para la estimación es un medio para lograr esto.

En particular, uno confiaría en una Markov Chain Monte Carlo. Primero, considere un algoritmo de muestreo de Gibbs, que es cómo encajaría el MCMC en un marco bayesiano sin la restricción. En el muestreo de Gibbs, en cada paso del algoritmo, toma muestras de la distribución posterior de cada parámetro (o grupo de parámetros) condicional a los datos y a todos los demás parámetros. Wikipedia proporciona un buen resumen del enfoque.

Una forma de restringir el rango es aplicar un paso Metropolis-Hastings. La idea básica es simplemente descartar cualquier variable simulada que esté fuera de sus límites. A continuación, puede volver a tomar muestras hasta que esté dentro de sus límites antes de pasar a la siguiente iteración. La desventaja de esto es que puede quedarse atascado simulando muchas veces, lo que ralentiza el MCMC. Un enfoque alternativo, desarrollado originalmente por John Geweke en algunos documentos y extendido en un artículo por Rodriguez-Yam, Davis, Sharpe es simular a partir de una distribución normal multivariada restringida. Este enfoque puede manejar restricciones de desigualdad lineales y no lineales en los parámetros y he tenido cierto éxito con él.

John
fuente
Para especificar restricciones de recuadro en los coeficientes ajustados, existen los argumentos lower.limits y upper.limits en glmnet, ¿verdad?
Tom Wenseleers
@TomWenseleers Estaba respondiendo de manera más general. Mire algunas de las otras respuestas con respecto a glmnet.
John
2

No estoy familiarizado con LASSO o glmnet, pero lavaan(abreviatura de "análisis de variables latentes") facilita múltiples modelos de regresión con restricciones de igualdad y restricciones de desigualdad de límite único (consulte la tabla en la página 7 de este PDF, "lavaan: un paquete R para el modelado de ecuaciones estructurales " ). No sé si podría tener límites superiores e inferiores en el coeficiente, pero tal vez podría agregar cada límite con líneas separadas, por ejemplo:

Coefficient>.49999999
Coefficient<1.0000001

Por supuesto, si está estandarizando todo antes de ajustar el modelo, no debería tener que preocuparse por imponer un límite superior de 1 en sus coeficientes de regresión de todos modos. Diría que es mejor omitirlo en este caso, ¡en caso de que algo salga mal! ( todavía lavaan está en beta después de todo ... he visto algunos resultados ligeramente sospechosos en mi propio uso limitado hasta ahora).

Nick Stauner
fuente
Para especificar restricciones de recuadro en los coeficientes ajustados, existen los argumentos lower.limits y upper.limits en glmnet, ¿verdad?
Tom Wenseleers