2015-10-15 7 views
6

私は非線形モデルに適合しようとしていますが、良い例はありません online。関数y = at^b * exp(-ct)に名前がありますか?線形化できますか? a、b、cをどのように見積もることができますか?

この関数には名前がありますか?

線形化できますか?

Iは、以下の時間tの関数としての(グループのように)ランダム効果gとパラメータab、及びcを推定することを試みてきました。私はランダムな効果なしでnlsを使ってモデルを適合させることができますが、モデルを収束させることに問題があります。提案は歓迎されます(R内にあることが望ましいが、適切なパッケージがあればよい)?

## time, repeated 16 times for 4 replicates from each of 4 groups 
t <- rep(1:20, 16) 
## g, group 
g <- rep(1:4, each = 80) 

## starting to create an example dataset, 
## to see if I can recover known parameters 
a <- rep(c(3.5, 4, 4.1, 5), each = 80) 
b <- rep(c(1.1, 1.4, 1.8, 2.5), each = 80) 
c <- rep(c(0.125, 0.25), each = 160) 

## error to add to above parameters 
set.seed(1) 
e_a <- runif(320, -0.5, 0.5) 
e_b <- runif(320, -0.1, -0.1) 
e_c <- runif(320, -0.02, 0.02) 

## this is my function 

f <- function(t, a, b, c) a * (t^b) * exp(-c * t) 

## simulate y 
y <- f(t = t, a + e_a, b + e_b, c + e_c) 

mydata <- data.frame(t = t, y = y, g = g) 

library(nlme) 
## now fit the model to estimate a, b, c 
fm1 <- nlme(y ~ a * (t^b) * exp(-c * t), 
      data = mydata, 
      fixed = a + b + c~1, 
      random = a + b + c ~ 1|g, 
      start = c(a = 4, b = 1, c = 0.25), 
      method = "REML") 
+0

非線形最小二乗は、この問題の一般的なアプローチであり、このフォーラムで広く扱われています。アーカイブを参照してください。 – Sycorax

+1

@ user777 nlsはうまくカバーされているようですが、無作為の影響はあまりありません。例を教えてください。 – Abe

+0

再現性のために 'ricker()'関数がどこから来たのか教えてください...これはStackOverflowの質問です(あなたが適合したいモデルを知っていれば、それに合わせて計算上の困難があります) –

答えて

10
物理学で

(およびいくつかの他の領域)私はこれを見てきたか、他の名前を持っているけれども、それの変異体は、HoerlカーブやHoerl機能e.g. hereと呼ばれます。 cが負であり、およびbが正の場合、それはスケールされたガンマ密度です。

線形化について質問するときは注意が必要です。式y = ^b。 EXP(CT)は、あなたが何を意味するか、実際にはありません - 観測、YI)、に正確に等しいではありません。 t(i)^ b。 exp(cti))(そうでなければ、ほぼ3回の観測で正確なパラメータ値が得られます)。

ノイズはyのためにモデルに入力する必要があります。それは付加的ですか?乗法、または他の何か? (また、それ以外の理由で重要:?違う観測のノイズ項は独立しているトン変更、またはないなど、いくつかの方法で、そのサイズを変更していますか?)

実際のモデルがYある場合(I)= ,i)^ bである。 (cti))+ε(i)、これは線形化できません。

実際のモデルがYI)=でI)であれば^ B。 exp(cti))。線形化可能ないくつかの(期待してゼロ平均)η(i)に対してε(i)およびε(i)= exp(η(i)第二の形態をとる

ログ(YI))=ログ(A)+ Bログ(トンI))+ C トンI)+ログ(ε(I))

又は

i)= a * + b.log(ti))+ c。 トンI)+η(I)パラメータの線形 * =ログ()である

Bおよびc、及び誤差項η (i);そのような線形モデルに適した方法でエラーに当てはめることができるはずです。そのような場合には、上記のエラー用語についてのかっこの質問を熟考して、それをモデル化する方法に影響する可能性があります。

+0

あなたの答えをありがとう - 私のコードに対処する必要はありませんが、私はそれが今再現可能になるように修正しました。 – Abe

+1

なぜあなたのコードは関数内に '-c'を持っていますか?あなたの数学は$ c $を持っていますか? ($ -c $は正直言ってわかります;私はその事件を見るのに慣れていますが、それは "スケールガンマ密度の概念"でうまく適合します) –

+1

あなたがそのnlmeモデルに適合すると、エラーの形式についての前提。 –

関連する問題