2012-05-09 20 views
0

一部のコミュニティデータで一般化最小二乗回帰のパラメータを推定しようとしています。私は他の人が同じ問題を持っていることに気づいたgnls {nlme}のステップ半分問題

Error in gnls(SF ~ a * Site_Code^b, data = data, weights = varPower(form = ~Site_Code), : 
    Step halving factor reduced below minimum in NLS step 

:私は正常にデータの1セットのためにこれを行っているが、私は別のグループのパラメータを推定するために、同じ技術をしようとすると、私は次のエラーメッセージが表示されます。 1つの提案された解決策は、glsControlを使用してnlsTolを0.001(デフォルト)ではなく0.1に設定することですが、これを行うときにも同じ問題があります。私のデータは次のようになります:

Site_Code SF 
5 3 
5 0 
5 2 
5 0 
5 0 
5 0 
5 2 
5 0 
5 0 
5 0 
5 0 
5 3 
1 0 
1 1 
1 29 
1 15 
1 7 
1 0 
1 10 
1 12 
1 55 
2 0 
2 5 
2 0 
2 0 
2 3 
2 24 
2 49 
2 17 
2 1 
3 4 
3 48 
3 7 
3 1 
3 31 
3 0 
3 0 
3 1 
4 8 
4 16 
4 29 
4 0 
4 1 
4 2 
4 1 
4 7 
4 3 
7 2 
7 0 
7 0 
7 0 
7 0 
7 0 
7 2 
7 1 
7 0 
7 1 
7 0 
7 0 
8 1 
8 2 
8 1 
8 2 
8 0 
8 0 
8 3 
8 0 
8 2 
6 0 
6 6 
6 0 
6 0 
6 0 
6 0 
6 0 
6 0 
6 0 
6 2 
6 0 
6 3 
+0

あなたはSite_Codeではっきりカテゴリであるデータセットへの連続的なデータのために設計されている方法を適用しています。 Site_Code^bをどのように解釈できますか?サイトの範囲に沿っていくつかのパワー関係を仮定するのは本当に合理的ですか? –

+0

@DWin - はい - 私は元の質問にこれを書いていませんでしたが、サイトコードは侵略種の除去時間の時系列に対応しています。より高いサイト番号が最近削除されています。私は、これがこの方法を使う大丈夫な状況だと推測します。 – Margaret

+1

私はそう思います。この場合、1 /時間はより解釈可能なモデルであるように見えるであろう。 –

答えて

1

私にとってはうまくいっています。あなたは出発価値を与えなかったので、私はいくつかのことを目の当たりにした。多分あなたは開始値が悪いでしょうか?

また、ここで問題を抱えていることは驚くことではありません。平均を当てはめるために、2つのパラメータと4つの独立したxの値があります。

dat <- read.table("gnlsdat.txt",header=TRUE) 
plot(SF~Site_Code,data=x) 

library(nlme) 
g0 <- gnls(SF ~ a * Site_Code^b, data = dat, 
      weights = varPower(form = ~Site_Code), 
      start=list(a=30,b=-0.5)) 

結果:

Generalized nonlinear least squares fit 
    Model: SF ~ a * Site_Code^b 
    Data: dat 
    Log-likelihood: -130.3289 

Coefficients: 
     a   b 
19.319493 -1.152149 

Variance function: 
Structure: Power of variance covariate 
Formula: ~Site_Code 
Parameter estimates: 
    power 
-0.885528 
Degrees of freedom: 33 total; 31 residual 
Residual standard error: 28.10023 

プロット:

plot(SF~Site_Code,data=x) 
pframe <- data.frame(Site_Code=seq(1,5,length=41)) 
lines(pframe$Site_Code,predict(g0,newdata=pframe)) 

enter image description here

+0

助けてくれてありがとう。それでもまだ動作しません。最初の4つのx値(私が使ったように)だけを使うと、gnlsはうまくいきます。私はそれがあなたの球場のものを私のデフォルトの開始値、a = 1とb = 1--と置き換えて開始値であるかどうかを調べました。しかし、私は8個のユニークなx値を持っています。それらを使ってgnls()を試してみると、開始値が変更されても前と同じエラーになります。 PS-私はあなたの本が大好き! – Margaret