首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的nls()函数

R中的nls()函数
EN

Stack Overflow用户
提问于 2013-02-22 19:51:56
回答 1查看 9.2K关注 0票数 2

混合新凯恩斯菲利普斯曲线是:

经过几次操作,我们得到了以下可估计的模型:

其中,π是通货膨胀率,x是衡量产出缺口的指标(= GDP的周期性成分,使用过滤器)。模型π和x的解释变量是可观测的。

我需要用非线性最小二乘来估计这个模型,但是这个模型在我看来是线性的。另外,我在R中使用nls()函数的尝试也失败了。

此外,我对非线性回归的研究导致了我的逻辑人口增长,但我无法找到一种方法将我学到的东西与这项工作联系起来,特别是在推导起始值时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 17:38:10

用普通最小二乘和lm()函数来估计问题中的方程(2)会导致系数的估计。

另一方面,用非线性最小二乘法结合nls()函数来估计方程的参数'a‘、'b’和'c‘的值,这是我们感兴趣的参数。

R中的nls()函数(非线性最小二乘)有两个重要的参数:首先是formula参数,然后是start参数。在R中运行?nls将提供一些细节;然而,基本原理是formula参数采用了要估计的非线性模型的表达式(例如,y ~ a / (b + c*x),其中'y‘和'x’是变量,'a‘、'b’和'c‘是感兴趣的参数),start参数接受感兴趣参数的起始值,R将在迭代过程中使用该参数(因为非线性最小二乘基本上迭代计算,直到得到参数的最佳值为止)。

以下是以下步骤:

(i)获取参数'a‘、'b’和'c‘的起始值。

这里,我用lm()函数来估计方程的系数(2)。我首先创建要在函数中使用的滞后变量。

注:“y”指的是

代码语言:javascript
复制
y_1 = c(NA, head(y, head(y, -1) # variable 'y' lagged  by one time period
y_2 = c(c(NA, NA), head(y, head(y, -2) # variable 'y' lagged by two time periods
x_1 = c(NA, head(x, head(x, -1) # variable 'x' lagged by one time period

因此,为了估计方程的系数,使用了以下代码:

代码语言:javascript
复制
reg = lm(y ~ y_1 + y_2 + x_1, na.action = na.exclude) # it is important to tell R to exclude the missing values (NA) that we included as we constructed the lagged variables

现在我们有了估计

,我们可以按以下方式计算“a”、“b”和“c”的值:

代码语言:javascript
复制
B = 1 / reg$coefficients["y_1"] # Calculates the inverse of the coefficient on the variable 'y_1'

A = B * reg$coefficients["y_2"] # Multiplies 'b' by the coefficient on the variable 'y_2'

C = B * reg$coefficients["x_1"] # Multiplies 'b' by the coefficient on the variable 'x_1'

然后使用ABC作为nls()函数中的起始值。

(ii)使用nls()函数

代码语言:javascript
复制
nlreg = nls(y ~ (1/b)*y_1 - (a/b)*y_2 - (c/b)*x_1,
        start = list(a = A, b = B, c = C))

从代码中可以看到结果:

代码语言:javascript
复制
summary(nlreg)

感谢Bolker提供的见解:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15032166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档