用于解决动态非线性模型的SAS代码

时间:2015-10-27 10:47:35

标签: sas models

有人能建议一些SAS代码来解决一个小的非线性动态模型吗?模型内生变量是: 日志(消费) 日志(投资) 日志(价格水平) 短期利率 长期利率 输出。 我试图使用proc模型,但由于输出标识是水平的,而需求组件的方程式是对数项,因此我遇到了收敛问题。

谢谢

===========

谢谢大家的回答/评论。我用于估算的代码是:

proc model outmodel=fair_model;
  var py rs delta_log_e rb log_pm ys DUM1997 e rs_us pop py_us y i t c x im stat;
  parms c0-c3 i0-i2 p0-p4 r0-r4 b0-b4 e0-e3;
  eq.Consumption = c0 + c1*lag(log(c/pop)) + c2*rb + c3*log(y/pop) - log(c/pop);
  eq.Investment  = i0 + i1*lag(log(i/y)) + i2*rb - log(i/y);
  eq.Price       = p0 + p1*lag(log(py)) + p2*log_pm + p3*(y/ys-1) + p4*t - log(py);
  eq.Interest_Rate = r0 + r1*lag(rs) + r2*((py-lag4(py))/lag4(py)) + r3*(y/ys-1) + r4*DUM1997  - rs;
  eq.Int_Rate = b0 + b1*(lag1(rb)- lag2(rs)) + b2*(rs-lag2(rs)) + b3*(lag1(rs)- lag2(rs)) +b4*(lag2(rs)) - rb;
  eq.Exchange_Rate  =  e0 + e1*lag(delta_log_e) + e2*(log(py/py_us)-log(lag(e))) + e3*(log((1+rs/100)/(1+rs_us/100))) - delta_log_e;
  eq.income = c + i + g + x - im + stat - y;
run;

quit;

*使用模型拟合数据,得到估计值;

proc model model=fair_model outmodel=fair_model;
    fit Consumption Investment Price Interest_Rate Int_Rate Exchange_Rate/data=fair2 outest=outest2 n2sls;
    instruments log_pm del_y del_py g x im del_log_i;
run;

quit;

然后只使用solve命令来解决模型并运行模拟。一个问题似乎与在级别中指定的收入标识有关,而另一个方程在日志条款中指定。我试图在收入等式中将c和i重新指定为exp(log(c))和exp(log(i)),甚至试图在日志条件中使用近似的收入身份,但它没有帮助收敛问题。任何进一步的想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

SAS / ETS的PROC MODEL处理动态非线性系统。如果遇到收敛问题,请尝试对变量输出进行日志转换。另外,请考虑您的方程式如何相互关联。下面只是一个假设,但请确保您使用的是正确的拟合方法。他们是SUR模型,还是需要2SLS? FIML可以成为适合它的好方法吗?如果ITOLS不起作用,您将需要重新考虑模型结构以及如何进行拟合。 proc model data = have;     endo log_consumption log_investment          log_price_level short_term_int          long_term_int log_output;     log_consumption = int1 + b1 * log_investment b2 * log_price_level + b3 * short_term_int;     log_investment = int2 + b3 * log_consumption + b4 * log_price_level;     <其他型号&gt ;;     log_output = int6 + b20 * log_consumption + b21 * log_price_level + b22 * short_term_int;     适合/ FIML;     解决/动态; 跑;