-1

我有一个模型要通过非线性最小二乘法进行估计。该模型以这样一种方式指定,即我有一个具有 5 个系数的主公式,这些系数又具有自己的公式,取决于总共四个系数。第一个公式本身是线性的,它包含系数的各个公式使模型非线性。

R 的 nls 函数要求没有系数的公式。我不知道如何定义它们。

为了让事情变得清晰,我将在下面发布具体公式。如果涉及任何代数,我将使用“_”作为索引,使用“{}”括号作为此类索引的内容。语法非常类似于 TEX,变量名只是单个字符,所以我没有费心在乘法发生的地方放置“*”。

p_t = β_1p_{t-1} + β_2p_{t-2} + β_3d_{t-1} + β_4d_{t-2} + β_5d_{t-3} + γ

β_1 = 2 - b - c 
β_2 = -(1-c)(1-b) 
β_3 = cδ + bα 
β_4 = -cδ(1-b) - bα(2-c) 
β_5 = bα(1-c) 
4

2 回答 2

4

“R的nls函数要求没有系数的公式”是什么意思!在 R 中,系数将由 nls 估计。我认为你仍然可以通过使用 nls 来做到这一点。用 b、c、$\alpha$、$\delta$ 的形式写下你的公式,并使用列表为它们写一些起点。

于 2012-08-16T04:21:01.807 回答
4

我告诉你原理。我不确定我使用了正确的方程式,但是由于您写了大约 4 个参数,我认为这就是您的意思。

我没有检查错误并将其留给您。您还应该进行非线性回归时应该使用的常规诊断。

fitfun<-function(p,d,a,b,c,d1){    
  beta_1 <- 2-b-c 
  beta_2 <- -(1-c)*(1-b) 
  beta_3 <- c*d1 + b*a 
  beta_4 <- -c*d1*(1-b) - b*a*(2-c) 
  beta_5 <- b*a*(1-c) 
  res <- as.numeric(filter(p,c(0,beta_1,beta_2),sides=1)) + #use filter to calculate lagged values
         as.numeric(filter(d,c(0,beta_3,beta_4,beta_5),sides=1)) + c
  res[-(1:3)] #to remove NAs
  }

pfit<-df$p0[-(1:3)]
fit<-nls(pfit ~ fitfun(p0,d1,a,b,c,d),data=df,start=list(a=2,b=1,c=1,d=1))
summary(fit)

 Formula: pfit ~ fitfun(p0, d1, a, b, c, d)

Parameters:
  Estimate Std. Error t value Pr(>|t|)    
a  0.13858    0.62064   0.223    0.823    
b  0.21101    0.01594  13.237   <2e-16 ***
c  1.41492    0.03015  46.929   <2e-16 ***
d  0.09838    0.09098   1.081    0.280    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 6.799 on 1043 degrees of freedom

Number of iterations to convergence: 7 
Achieved convergence tolerance: 5.107e-06 

编辑

我很快展示了它是如何filter工作的。

x <- 1:10
#[1]  1  2  3  4  5  6  7  8  9 10
filter(x,c(0,1),sides=1) #1*x_{i-1}
#[1] NA  1  2  3  4  5  6  7  8  9
filter(x,c(0,0,2),sides=1) #2*x_{i-2}
#[1] NA NA  2  4  6  8 10 12 14 16
filter(x,c(1,2,3),sides=1) #1*x_i + 2*x_{i-1} + 3*x_{i-2}
#[1] NA NA 10 16 22 28 34 40 46 52

filter是一个时间序列函数,因此非常快。

于 2012-08-22T17:53:01.193 回答