3

我正在尝试用 5 个方程估计一个非线性看似不相关的回归 (SUR) 模型R,并且我正在研究包systemfit。一切都很顺利,直到它需要对我的方程式设置一些限制。使用包systemfitnlsystemfit()它适用于非线性方程的函数。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 估计?

提前非常感谢。

4

1 回答 1

3

经过几个小时的研究并打扰了一些人,我意识到我的问题的答案非常明显(对于更有经验的人,而不是我)。因此,我回答我的问题是为了帮助与我处于相同位置的其他人。

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

c1 + c2 + c3 = -1

I will substitute c3 by - 1 - c1 - c2. This will lead us to compute, in general, one equation less in the whole system. Then, after getting the estimated coefficients, we only need to recover the values using the same formula; In my example (using estimated c1 and c2):

c3 = - 1 - c1 - c2

I hope this can help someone.

于 2020-02-11T18:26:49.427 回答