勾配制約のある線形回帰


18

で非常に単純な線形回帰を実行したいですR。式はと同じくらい簡単です。ただし、スロープ()が間隔内、たとえば1.4から1.6の間にあるようにします。y=ax+ba

これをどのように行うことができますか?

回答:


24

実行したい... Rの線形回帰。これをどのように行うことができますか?

(i)簡単な方法:

  • 回帰に適合します。それが境界内にあれば、完了です。

  • 境界内にない場合は、勾配を最も近い境界に設定し、

  • すべての観測値の平均として切片を推定します。yaバツ

(ii)より複雑な方法:勾配にボックス制約がある最小二乗を行う。多くの最適化ルーチンは、ボックス制約を実装します。たとえばnlminb(Rに付属)実装します。

編集:実際には(以下の例で説明されているように)、バニラRではnlsボックス制約を行うことができます 例に示すように、これは非常に簡単です。

制約付き回帰をより直接使用できます。私が思うにpcls、パッケージ「mgcv」との機能nnlsパッケージ「NNLS」から機能を両方行います。

-

編集してフォローアップの質問に答えます-

nlminbRに付属しているので、どのように使用するかをお見せしますが、nls制約付き最小二乗を実装するために同じルーチン(PORTルーチン)を既に使用していることに気付きました。

注意:以下の私の例では、インターセプトされ、スロープ(統計では、より一般的な慣例)です。ここに入れた後、あなたは別の方法で始めたことに気付きました。ただし、あなたの質問に対して「後方」の例を残すことにします。ab

最初に、範囲内の 'true'勾配でいくつかのデータを設定します。

 set.seed(seed=439812L)
 x=runif(35,10,30)
 y = 5.8 + 1.53*x + rnorm(35,s=5)  # population slope is in range
 plot(x,y)
 lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
     12.681        1.217  

...しかし、LSの推定値は、ランダムな変動が原因で発生する範囲外です。ので、制約付き回帰を使用してみましょうnls

 nls(y~a+b*x,algorithm="port",
   start=c(a=0,b=1.5),lower=c(a=-Inf,b=1.4),upper=c(a=Inf,b=1.6))

Nonlinear regression model
  model: y ~ a + b * x
   data: parent.frame()
    a     b 
9.019 1.400 
 residual sum-of-squares: 706.2

Algorithm "port", convergence message: both X-convergence and relative convergence (5)

ご覧のように、境界線上に傾斜があります。適合モデルを渡すと、summary標準エラーとt値さえ生成されますが、これらがどの程度意味/解釈可能かはわかりません。

では、私の提案(1)はどのように比較されますか?(つまり、勾配を最も近い境界に設定し、残差を平均して切片を推定します)ybバツ

 b=1.4
 c(a=mean(y-x*b),b=b)
       a        b 
9.019376 1.400000

それは同じ見積もりです...

以下のプロットでは、青い線は最小二乗であり、赤い線は制約付き最小二乗です。

制約付きおよびLSライン


この答えをありがとうございます...これらの機能のいずれかを使用して例を挙げていただけますか?
イニゴエルナエスコレス

1
+1パラメーターの推定値で信頼区間を見つけることは、いずれにしても課題となります。
whuber

@IñigoHernáezCorresは私の答えの更新を参照し、nlsそれを使用して説明します。
Glen_b-モニカを復元

2つの方法でつながりを持ち、素晴らしい回答を1つ獲得しましょう!
ハイタオデュ

15

Glen_bの2番目の方法であるボックス制約付きの最小二乗法は、リッジ回帰を介してより簡単に実装できます。リッジ回帰の解は、重みベクトルのノルムの大きさ(およびその傾き)に制限がある回帰のラグランジアンと見なすことができます。したがって、以下のwhuberの提案に従って、アプローチは(1.6 + 1.4)/ 2 = 1.5のトレンドを減算してから、リッジ回帰を適用し、勾配の大きさが0.1以下になるまでリッジパラメータを徐々に増やします。

このアプローチの利点は、R(および他の多くのパッケージ)で既に利用可能なリッジ回帰だけで、派手な最適化ツールが必要ないことです。

ただし、Glen_bのシンプルなソリューション(i)は私にとって賢明なようです(+1)


5
これは賢い方法ですが、説明どおりに機能しますか?適切なアプローチは、(1.6 + 1.4)/ 2 = 1.5のトレンドを取り除き、勾配の絶対値が0.1以下になるまでリッジパラメーターを制御することです。
whuber

1
はい、それは確かにより良い提案です。制限が勾配の大きさに制限されている場合、リッジ回帰アプローチは実際により適切であり、かなり奇妙な問題のように聞こえます!私の答えはもともと、ボックス制約に関するGlen_bのコメントに触発されたもので、リッジ回帰は基本的にボックス制約を実装するための簡単な方法です。
ディクランマースピアル

私のコメントを認めてくれて感謝していますが、私はそれがあなたの答えの内容をそらします。私たちは可能な限りどこでも作業を改善するために一緒にいますので、あなたが私の提案に基づいて行動したことは十分に認めています。そのために、あなたは評判の増分に値します。追加の編集を行う場合は、不要な素材を削除してテキストを合理化することを検討してください。
whuber

余分な資料を編集しましたが、私はコラボレーションを楽しんでおり、常に協力者に彼らにふさわしいクレジットを与えようとしていますが、道徳的には賛成票の半分に値すると思います。; o)
ディクランマースピアル

10

別のアプローチは、ベイジアン法を使用して回帰に適合させ、上の事前分布を選択することです a

ウェブ上および回帰にベイジアン法を使用するソフトウェアには多くの例があります。これらの例のいずれかに従って、前の例を変更できます a

この結果は、関心のあるパラメーターの信頼できる区間を提供します(もちろん、これらの区間の意味は、傾斜に関する以前の情報の妥当性に基づいています)。


+1、これも私の最初の考えでした。私は他の提案が好きですが、これは私にとって最高のようです。
GUNG -復活モニカ

0

別のアプローチは、回帰を最適化問題として再定式化し、オプティマイザーを使用することです。この方法で再定式化できるかどうかはわかりませんが、Rオプティマイザーに関するこのブログ投稿を読んだときに、この質問について考えました。

http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.