指数近似の残差平方和を最小化する方法は?


14

次のデータがあり、負の指数関数的成長モデルを当てはめたいと思います。

Days <- c( 1,5,12,16,22,27,36,43)
Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71)
plot(Days, Emissions)
fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55))
curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", lwd = 4)

コードは機能しており、フィッティングラインがプロットされます。ただし、フィットは視覚的には理想的ではなく、残差平方和は非常に大きいようです(147073)。

どうすればフィット感を改善できますか?データはより良く適合しますか?

ネット上でこの課題に対する解決策を見つけることができませんでした。他のウェブサイト/投稿への直接のヘルプまたはリンクは大歓迎です。


1
あなたは、回帰モデルを検討している場合この場合、、どこε IN 0 σ 、その後、あなたが同様の推定を取得します。信頼領域をプロットすることにより、これらの値がコンフィンデンス領域にどのように含まれているかを観察できます。点を補間するか、より柔軟な非線形モデルを使用しない限り、完全な適合は期待できません。排出量=f日々ab+ϵϵN0σ

「負の指数モデル」は質問で説明されているものとは異なるものを意味するため、タイトルを変更しました。
whuber

質問を明確にしてくれてありがとう(@whuber)、そして答えてくれてありがとう(@Procrastinator)。信頼領域を計算してプロットするにはどうすればよいですか。そして、より柔軟な非線形モデルは何でしょうか?
-Strohmi

4
追加のパラメーターが必要です。 で何が起こるか見てみましょうfit <- nls(Emissions ~ a* (1- u*exp(-b*Days)), start = list(a = 2000, b = 0.1, u=.5)); beta <- coefficients(fit); curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T)
whuber

1
@whuber-答えとしてそれを投稿すべきでしょうか?
-jbowman

回答:


16

(負の)指数則の形式を取ります。あなたは内のユニットの変更を可能にするときのxyの、に言っても、値のy = α のy " + βX = γ X " + δを、そして法律がのように表現されますy=exp(x)xyy=αy+βx=γx+δ

αy+β=y=exp(x)=expγバツδ

これは代数的に等価です

y=1αexpγバツδβ=a1あなたはexpbバツ

3つのパラメータを使用して= - β / αuは= 1 /β EXP δ 、及びB = γ。我々が認識することができるスケールのパラメータとしてYBのスケールパラメータとしてX、及びUに由来するように位置するためのパラメータXa=β/αあなたは=1/βexpδb=γaybxux

経験則として、これらのパラメーターはプロットから一目で識別できます

  • パラメーターは、水平漸近線の値で、2000を少し下回ります。a2000

  • パラメータ は、曲線が原点から水平漸近線まで上昇する相対量です。ここで、上昇はそのため少し未満である2000年- 937。比較的、それは漸近線の約0.55です。u20009370.55

  • なぜならXの3倍の値が等しく1 / B曲線は約上昇しているべきである1 - 0.05または95 の合計。 937からほぼ2000への上昇の95 は、1950年頃のことです。プロット全体でスキャンすると、これが取っ示して2025日間。レッツ・コール、それを24簡略化のため、そこからB 3 / 24exp(3)0.05x1/b10.0595%95%93720001950202524。(指数スケールを目で見るこの 95 %の方法は、指数プロットを多く使用する一部のフィールドでは標準です。)b3/24=0.12595%

これがどのように見えるか見てみましょう:

plot(Days, Emissions)
curve((y = 2000 * (1 - 0.56 * exp(-0.125*x))), add = T)

眼球フィット

スタートには悪くない!(でもタイピングにもかかわらず0.56の代わりに、0.55とにかく、粗近似をした、)私たちは、とそれを磨くことができますnls

fit <- nls(Emissions ~ a * (1- u * exp(-b*Days)), start=list(a=2000, b=1/8, u=0.55))
beta <- coefficients(fit)
plot(Days, Emissions)
curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T, col="Green", lwd=2)

NLSフィット

の出力にnlsは、パラメーターの不確実性に関する広範な情報が含まれています。 例えば、単純なsummaryは、推定の標準誤差を提供します:

> summary(fit)

Parameters:
   Estimate Std. Error t value Pr(>|t|)    
a 1.969e+03  1.317e+01  149.51 2.54e-10 ***
b 1.603e-01  1.022e-02   15.69 1.91e-05 ***
u 6.091e-01  1.613e-02   37.75 2.46e-07 ***

推定値の共分散行列全体を読み取って作業できます。これは、同時信頼区間の推定に役立ちます(少なくとも大きなデータセットの場合)。

> vcov(fit)
             a             b             u
a 173.38613624 -8.720531e-02 -2.602935e-02
b  -0.08720531  1.044004e-04  9.442374e-05
u  -0.02602935  9.442374e-05  2.603217e-04

nls パラメーターのプロファイルプロットをサポートし、不確実性に関するより詳細な情報を提供します。

> plot(profile(fit))

a

プロファイルプロット

219451995


res <- residuals(fit); res %*% resu2724147073

すべてが順調です。しかし、OPには指数モデルを選択する何らかの理由があったのかもしれません(または、それがよく知られているという理由だけかもしれません)。最初に、指数モデルの残差を調べる必要があると思います。潜在的な共変量に対してそれらをプロットして、大きなランダムノイズだけでなく、そこに構造があるかどうかを確認します。より洗練されたモデルに飛び込む前に、より手の込んだモデルが役立つかどうかを確認してください。
マイケルR.チャーニック

3
x

2
私はあなたの答えを批判していませんでした!残差プロットは見られませんでした。私が示唆していたのは、残差対潜在的な共変量のプロットがより良いモデルを見つけるための最初のステップであるべきだということです。私がそこに我慢する答えがあると思ったら、定数として私のポイントを上げるのではなく、答えを出したでしょう。私はあなたが素晴らしい反応をしたと思い、私はあなたに+1を与えた人の一人でした。
マイケルR.チャーニック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.