2012-05-09 51 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 

我注意到,其他人也有同样的问题。一个建议的解决方案是使用gnlsControl将nlsTol设置为0.1而不是0.001(默认值),但是当我这样做时,我遇到同样的问题。我的数据如下:

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

对我来说工作很好;你没有给出初始值,所以我有些眼花缭乱。也许你的初始值更差?

此外,您在这里遇到麻烦并不奇怪 - 为了拟合均值,您有两个参数,只有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

感谢您的帮助。它仍然没有工作,但如果我只使用前四个x值(如你所做的那样),gnls确实很好。我查了一下,看看是不是我的默认开始值a = 1和b = 1--,它仍然有效。然而,我有8个独特的x值,当我尝试使用gnls()时,即使起始值发生变化,它也会提供与以前相同的错误。 PS-我爱你的书! – Margaret