で非常に単純な線形回帰を実行したいですR
。式はと同じくらい簡単です。ただし、スロープ()が間隔内、たとえば1.4から1.6の間にあるようにします。
これをどのように行うことができますか?
で非常に単純な線形回帰を実行したいですR
。式はと同じくらい簡単です。ただし、スロープ()が間隔内、たとえば1.4から1.6の間にあるようにします。
これをどのように行うことができますか?
回答:
実行したい... Rの線形回帰。これをどのように行うことができますか?
(i)簡単な方法:
回帰に適合します。それが境界内にあれば、完了です。
境界内にない場合は、勾配を最も近い境界に設定し、
すべての観測値の平均として切片を推定します。
(ii)より複雑な方法:勾配にボックス制約がある最小二乗を行う。多くの最適化ルーチンは、ボックス制約を実装します。たとえばnlminb
(Rに付属)実装します。
編集:実際には(以下の例で説明されているように)、バニラRではnls
ボックス制約を行うことができます 例に示すように、これは非常に簡単です。
制約付き回帰をより直接使用できます。私が思うにpcls
、パッケージ「mgcv」との機能nnls
パッケージ「NNLS」から機能を両方行います。
-
編集してフォローアップの質問に答えます-
nlminb
Rに付属しているので、どのように使用するかをお見せしますが、nls
制約付き最小二乗を実装するために同じルーチン(PORTルーチン)を既に使用していることに気付きました。
注意:以下の私の例では、インターセプトされ、スロープ(統計では、より一般的な慣例)です。ここに入れた後、あなたは別の方法で始めたことに気付きました。ただし、あなたの質問に対して「後方」の例を残すことにします。
最初に、範囲内の '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)はどのように比較されますか?(つまり、勾配を最も近い境界に設定し、残差を平均して切片を推定します)
b=1.4
c(a=mean(y-x*b),b=b)
a b
9.019376 1.400000
それは同じ見積もりです...
以下のプロットでは、青い線は最小二乗であり、赤い線は制約付き最小二乗です。
nls
それを使用して説明します。
Glen_bの2番目の方法であるボックス制約付きの最小二乗法は、リッジ回帰を介してより簡単に実装できます。リッジ回帰の解は、重みベクトルのノルムの大きさ(およびその傾き)に制限がある回帰のラグランジアンと見なすことができます。したがって、以下のwhuberの提案に従って、アプローチは(1.6 + 1.4)/ 2 = 1.5のトレンドを減算してから、リッジ回帰を適用し、勾配の大きさが0.1以下になるまでリッジパラメータを徐々に増やします。
このアプローチの利点は、R(および他の多くのパッケージ)で既に利用可能なリッジ回帰だけで、派手な最適化ツールが必要ないことです。
ただし、Glen_bのシンプルなソリューション(i)は私にとって賢明なようです(+1)
別のアプローチは、ベイジアン法を使用して回帰に適合させ、上の事前分布を選択することです
ウェブ上および回帰にベイジアン法を使用するソフトウェアには多くの例があります。これらの例のいずれかに従って、前の例を変更できます
この結果は、関心のあるパラメーターの信頼できる区間を提供します(もちろん、これらの区間の意味は、傾斜に関する以前の情報の妥当性に基づいています)。
別のアプローチは、回帰を最適化問題として再定式化し、オプティマイザーを使用することです。この方法で再定式化できるかどうかはわかりませんが、Rオプティマイザーに関するこのブログ投稿を読んだときに、この質問について考えました。
http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html