Comment fixer un coefficient et ajuster les autres à l'aide de la régression

11

Je voudrais fixer manuellement un certain coefficient, par exemple , puis ajuster les coefficients à tous les autres prédicteurs, tout en conservant dans le modèle.β 1 = 1,0β1=1.0β1=1.0

Comment puis-je y parvenir en utilisant R? J'aimerais particulièrement travailler avec LASSO ( glmnet) si possible.

Sinon, comment puis-je limiter ce coefficient à une plage spécifique, disons ?0.5β11.0

raco
la source
Pour spécifier les contraintes de boîte sur les coefficients ajustés, il y a les arguments lower.limits et upper.limits dans glmnet, non?
Tom Wenseleers

Réponses:

4

Vous devez utiliser l' offsetargument comme ceci:

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)

À propos de la gamme ... Je ne pense pas que cela ait été implémenté en glmnet. S'ils utilisent une méthode numérique, vous voudrez peut-être creuser dans le code R et essayer de le restreindre là-bas, mais vous aurez besoin d'un bon fond de programmation solide.

Stat
la source
2
Que offsetfait- on réellement? Comment la valeur de est-elle 1.1*x1déterminée à partir de la question?
whuber
J'ai lu la documentation de 'offset' dans glmnet, et je ne sais toujours pas ce qu'il fait. Je n'ai pas pu trouver de grands exemples, mais la plupart des processus de Poisson de référence. Pourquoi 1.1 * x1 est-il utilisé?
raco
Je pensais qu'il fixait les coefficients à . Je viens de modifier la réponse. Le décalage est le terme dans lequel son coefficient n'est pas estimé par le modèle mais est supposé avoir la valeur 1.β1=1.1
Stat
Je suis assez content de cette réponse. Je peux parcourir différents "coefficients" de décalage et comparer des modèles. Merci!
raco
1
En ce qui concerne offsetle glmnetpaquet, la réponse fournie par Stat n'a pas de sens pour moi. Lorsque j'exécute fit1 beta)] je ne vois aucun . Pourriez-vous clarifier le fonctionnement de l'offset dans votre exemple? Pour la plage des bêtas, vous pouvez utiliser les arguments et . β 1 = 1,0beta[,ncol(fit1β1=1.0lower.limitsupper limits
Mario Nuñez
9

Eh bien, réfléchissons. Vous avez:

Y=b0+b1x1+b2x2+e

(pour faire simple) Vous voulez forcer donc vous voulezb1=1

Y=b0+x1+b2x2+e

vous pouvez donc simplement soustraire de chaque côté en laissant:x1

Ynew=Yx1=b0+b2x2+e

qui peut alors estimer .b2

Peter Flom - Réintégrer Monica
la source
2
C'est la partie facile (et a été abordée dans d'autres discussions si je me souviens). Qu'en est-il de restreindre le coefficient à une plage? La partie particulièrement difficile de ce problème consiste à obtenir de bonnes limites de confiance lorsque l'estimation se situe à la frontière de la région de contrainte.
whuber
2
C'est définitivement plus difficile. J'ai raté la fin du post. Mais je pense que je devrais laisser ma réponse car elle répond à une partie de la question
Peter Flom - Réintégrer Monica
Est-ce que cela se généralise toujours si ? Soit au lieu de 1, , où est le coefficient choisi par la régression OLS. β 1 = 0,75 Y n e w = Y - 0,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
Oui, s'il est fixé à 0,75, alors faire ce que vous dites fonctionnera. Mais comme le souligne @whuber, c'est la partie la plus facile de ce problème
Peter Flom - Réintégrer Monica
2
@whuber, dans un cadre bayésien, vous pouvez lancer une étape Metropolis pour éliminer tous les coefficients en dehors de votre plage ou alternativement vous pouvez échantillonner à partir d'une distribution normale multivariée tronquée.
John
3

En ce qui concerne les coefficients contraignants à se situer dans une fourchette, une approche bayésienne de l'estimation est un moyen d'y parvenir.

En particulier, on s'appuierait sur une chaîne Markov Monte Carlo. Tout d'abord, considérons un algorithme d'échantillonnage de Gibbs, qui est de savoir comment vous adapteriez le MCMC dans un cadre bayésien sans la restriction. Dans l'échantillonnage de Gibbs, à chaque étape de l'algorithme, vous échantillonnez à partir de la distribution postérieure de chaque paramètre (ou groupe de paramètres) en fonction des données et de tous les autres paramètres. Wikipedia fournit un bon résumé de l'approche.

Une façon de contraindre la plage consiste à appliquer une étape Metropolis-Hastings. L'idée de base est de simplement jeter toute variable simulée qui est en dehors de vos limites. Vous pouvez ensuite continuer à rééchantillonner jusqu'à ce que ce soit dans vos limites avant de passer à l'itération suivante. L'inconvénient de ceci est que vous pourriez vous retrouver bloqué en simulant beaucoup de fois, ce qui ralentit le MCMC. Une approche alternative, développée à l'origine par John Geweke dans quelques articles et développée dans un article de Rodriguez-Yam, Davis, Sharpe consiste à simuler à partir d'une distribution normale multivariée contrainte. Cette approche peut gérer les contraintes d'inégalité linéaires et non linéaires sur les paramètres et j'ai eu un certain succès avec elle.

John
la source
Pour spécifier les contraintes de boîte sur les coefficients ajustés, il y a les arguments lower.limits et upper.limits dans glmnet, non?
Tom Wenseleers
@TomWenseleers, je répondais plus généralement. Regardez certaines des autres réponses en ce qui concerne glmnet.
John
2

Je ne connais pas LASSO ou glmnet, mais lavaan(abréviation de "latent variable analysis") facilite plusieurs modèles de régression avec à la fois des contraintes d'égalité et des contraintes d'inégalité à borne unique (voir le tableau à la page 7 de ce PDF, "lavaan: An R package pour la modélisation des équations structurelles " ). Je ne sais pas si vous pourriez avoir des limites supérieures et inférieures sur le coefficient, mais vous pourriez peut-être ajouter chaque limite avec des lignes distinctes, par exemple:

Coefficient>.49999999
Coefficient<1.0000001

Bien sûr, si vous standardisez tout avant d'ajuster le modèle, vous ne devriez pas avoir à vous soucier d'imposer une limite supérieure de 1 à vos coefficients de régression de toute façon. Je dirais qu'il vaut mieux l'omettre dans ce cas, juste au cas où quelque chose se passe mal! ( lavaan est toujours en version bêta après tout ... J'ai vu des résultats légèrement louche dans ma propre utilisation limitée jusqu'à présent.)

Nick Stauner
la source
Pour spécifier les contraintes de boîte sur les coefficients ajustés, il y a les arguments lower.limits et upper.limits dans glmnet, non?
Tom Wenseleers