1つの係数を修正し、回帰を使用して他の係数を近似する方法


11

をモデルに維持したまま、特定の係数(たとえば)を手動で修正してから、係数を他のすべての予測子にます。β 1 = 1.0β1=1.0β1=1.0

Rを使用してこれをどのように達成できますか?特にglmnet可能であればLASSO()で作業したいと思います。

または、この係数を特定の範囲、たとえばに制限するにはどうすればですか?0.5β11.0


当てはめられた係数にボックス制約を指定するには、glmnetに引数lower.limitsとupper.limitsがありますよね?
トムウェンセリアーズ2017

回答:


4

次のoffsetような引数を使用する必要があります。

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)

範囲について...は実装されていないと思いますglmnet。彼らが数値的な方法を使用している場合は、Rコードを掘り下げてそこに制限することをお勧めしますが、プログラミングの十分なバックグラウンドが必要です。


2
offset実際に何をしていますか?の値は1.1*x1質問からどのように決定されますか?
whuber

glmnetの「オフセット」のドキュメントを読みましたが、それが何をするのかまだわかりません。良い例は見つかりませんでしたが、ほとんどの場合、ポアソンプロセスを参照しています。なぜ1.1 * x1が使われるのですか?
raco 2014年

彼は係数をになるように修正していると思いました。答えを編集しました。オフセットは、その係数はモデルによって推定されていませんが、値1を持っていると想定されている用語であるβ1=1.1
Statの

私はこの答えに満足しています。さまざまなオフセット「係数」を反復処理してモデルを比較できます。ありがとう!
raco 2014年

1
offsetglmnetパッケージ、Stat社が提供する答えは私を感じることはありません。fit1 beta)]を実行すると、表示されません。あなたの例でオフセットがどのように機能しているかを明確にできますか?ベータの範囲については、および引数を使用できます。β 1 = 1.0beta[,ncol(fit1β1=1.0lower.limitsupper limits
MarioNuñez16年

9

さて、考えましょう。あなたが持っている:

Y=b0+b1x1+b2x2+e

(簡単にするために)を強制したいので、b1=1

Y=b0+x1+b2x2+e

そのため、各側からを引くだけで済みます。x1

Ynew=Yx1=b0+b2x2+e

次に、を推定できます。b2


2
これは簡単な部分です(私が覚えているように、他のスレッドでも対処されています)。係数を範囲に制限することについてはどうですか?この問題の特に難しい部分は、推定が制約領域の境界上にある場合に良好な信頼限界を取得することです。
whuber

2
それは間違いなく難しいです。投稿の最後を逃しました。しかし、私はそれが質問の一部に答えるので、私の答えは残しておくべきだと思います
ピーターフロム-モニカを元に戻す

場合、これはまだ一般化していますか?ましょうの代わりに1、、ここで 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 2014年

1
はい、それが.75に固定されている場合、あなたが言うことを行うことはうまくいきます。しかし、@ whuberが指摘しているように、それはこの問題の簡単な部分です
ピーターフロム-モニカの

2
@whuber、ベイジアンフレームワークでは、メトロポリスステップをスローして、範囲外の係数を破棄するか、切り捨てられた多変量正規分布からサンプリングすることができます。
John

3

係数を範囲内に制限することに関して、推定へのベイズのアプローチはこれを達成するための1つの手段です。

特に、マルコフ連鎖モンテカルロに依存するでしょう。まず、ギブスサンプリングアルゴリズムについて考えます。これは、MCMCを制限なしのベイジアンフレームワークに適合させる方法です。ギブスサンプリングでは、アルゴリズムの各ステップで、データと他のすべてのパラメーターを条件として、各パラメーター(またはパラメーターのグループ)の事後分布からサンプリングします。ウィキペディアはアプローチの良い要約を提供します。

範囲を制約する1つの方法は、Metropolis-Hastingsステップを適用することです。基本的な考え方は、範囲外にあるシミュレートされた変数を単に破棄することです。その後、次の反復に進む前に、それが範囲内になるまで再サンプリングを続けることができます。これの欠点は、シミュレーションを何度もスタックする可能性があり、MCMCの速度が低下することです。John Gewekeによって最初いくつかの 論文で開発され、Rodriguez-Yam、Davis、Sharpeによって拡張された別のアプローチは、制約付き多変量正規分布からシミュレーションすることです。このアプローチは、パラメーターの線形および非線形の不等式制約を処理でき、私はある程度成功しました。


当てはめられた係数にボックス制約を指定するには、glmnetに引数lower.limitsとupper.limitsがありますよね?
トムウェンセリアーズ2017

@TomWenseleersより一般的に答えていました。に関する他の回答のいくつかを見てくださいglmnet
John

2

私はLASSOまたはglmnetに精通していませんが、lavaan(「潜在変数分析」の略)は、等式制約と単一境界不等式制約の両方を使用して多重回帰モデルを容易にします(このPDFの 7ページの表「lavaan:An R package」を参照)構造方程式モデリング用」)。係数に上限と下限の両方を設定できるかどうかはわかりませんが、おそらくそれぞれの上限を別々の行で追加できます。例:

Coefficient>.49999999
Coefficient<1.0000001

もちろん、モデルをフィッティングする前にすべてを標準化している場合は、いずれにしても、回帰係数に上限1を課すことを心配する必要はありません。この場合は、何か問題が発生した場合に備えて、省略したほうがよいと思います。(lavaan あるすべての後にまだベータ版で...私は、これまでそれを私自身の限られた使用中のいくつかのやや生臭い結果を見てきました。)


当てはめられた係数にボックス制約を指定するには、glmnetに引数lower.limitsとupper.limitsがありますよね?
トムウェンセリアーズ2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.