r - R 中的非线性看似无关的回归 (SUR) 施加限制

标签 r cran non-linear-regression systemfit seemingly-unrelated-regression

我正在尝试用 R 中的 5 个方程估计一个非线性看似无关的回归 (SUR) 模型,并且我正在研究包 systemfit。一切顺利,直到需要对我的方程式设置一些限制。使用包 systemfit,函数 nlsystemfit() 适用于非线性方程。但是选项/参数 restrict.matrix 不允许用于 nlsystemfit()(它适用于函数 systemfit() 中的线性方程)。

一个简化的例子是(我认为这里显示数据是不相关的):

EQ_1 <- Y1 ~ (c1 - x)*Q + c11*G11 + c12*G12 + c13*G13
EQ_2 <- Y2 ~ (c2 - x)*Q + c21*G11 + c22*G12 + c23*G13
EQ_3 <- Y3 ~ (c3 - x)*Q + c31*G11 + c32*G12 + c33*G13


start.values <- c(c1 = 0,c2= 0,c3 = 0,
                  c11 = 0,c12 = 0,c13 = 0,
                  c21 = 0,c22 = 0,c23 = 0,
                  c31 = 0,c32 = 0,c33 = 0)

model <- list(EQ_1 ,EQ_2 ,EQ_3)

model.sur <- nlsystemfit(method = "SUR",
                         eqns = model,
                         startvals = start.values,
                         data = as.data.frame(dat))

到目前为止,估计工作完美。但是现在,我需要设置以下约束:

Rest_1 <- c11 + c12 + c13 = 0
Rest_2 <- c21 + c22 + c23 = 0
Rest_3 <- c31 + c32 + c33 = 0

Rest_4 <- c1 + c2 + c3 = -1

显然,这里的模型是线性的,有 3 个方程,但这是因为我试图简化这个想法。但是目前的模型有5个非线性方程和更多的参数。

任何人都可以指导我如何在 R 中执行具有限制的非线性 SUR 估计?

非常感谢。

最佳答案

经过几个小时的研究并打扰了一些人,我意识到我的问题的答案很明显(对于更有经验的人来说,不是我)。所以我回答我的问题是为了帮助和我处境相同的人。

不需要向 systemfit 包提供选项/参数来单独设置约束。为什么?因为方程定义中允许的灵 active (因为它是一个非线性系统),我们可以在同一个系统中施加约束。例如,如果我需要设置

c1 + c2 + c3 = -1

我会将 c3 替换为 - 1 - c1 - c2。 这将导致我们在整个系统中通常少计算一个方程。然后,在得到估计系数后,我们只需要使用相同的公式恢复值即可;在我的示例中(使用估计的 c1c2):

c3 = - 1 - c1 - c2

我希望这可以帮助某人。

关于r - R 中的非线性看似无关的回归 (SUR) 施加限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60152530/

相关文章:

machine-learning - 高斯进度回归用例

r - 将社区网络绘制成 ggplot map

r - 从 X,Y 坐标找到最短路径(开始≠结束)

r - 可以分别提取从 CRAN 和 Github 安装的 R 软件包吗?

java - 卸载 rJava 和/或重新启动 JVM

r - nls() 的后续步骤?

javascript - JavaScript 中变量错误的非线性回归

r - 将字符向量转换为函数调用

r - 如何重置行名称?

R:as.environment(pos) 中的错误/结束时出错:搜索列表中没有名为 "package:[package]"的项目