楼主: 猫头鹰侠
886 1

[问答] 求MS-MIDAS模型GAUSS代码 [推广有奖]

  • 0关注
  • 0粉丝

大专生

78%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
54.6045
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
384 点
帖子
28
精华
0
在线时间
74 小时
注册时间
2020-4-13
最后登录
2025-3-22

楼主
猫头鹰侠 学生认证  发表于 2024-12-23 23:24:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有人有MS-MIDAS模型的GAUSS代码吗?我这里有一部分,但我总感觉不全。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MIDAS GAUSS Aus Das MID

沙发
suzzon 在职认证  发表于 2026-3-19 16:33:17
  1. new; cls;
  2. library maxlikmt;

  3. /*
  4.     MS-MIDAS-AR (2-state) template in GAUSS
  5.     ---------------------------------------
  6.     Model:
  7.       y_t = c_{S_t} + phi * y_{t-1} + b_{S_t} * (X_t * w(theta)) + e_t
  8.       e_t | S_t=s ~ N(0, sigma_s^2)

  9.     Regime switching:
  10.       P = [ p11      1-p11
  11.             1-p22    p22  ]

  12.     Assumptions:
  13.       1) y      : T x 1 low-frequency dependent variable
  14.       2) ylag   : T x 1 lagged y
  15.       3) Xlags  : T x K matrix of aligned high-frequency lags
  16.                   Each row already contains the K high-frequency lags
  17.                   relevant for the low-frequency observation.
  18.       4) Common MIDAS weights across regimes (easy to extend later)
  19. */


  20. /* ---------- helpers ---------- */

  21. proc (1) = logistic(x);
  22.     retp(1 ./ (1 + exp(-x)));
  23. endp;

  24. proc (1) = logdnorm(y, mu, sig);
  25.     local z;
  26.     z = (y - mu) ./ sig;
  27.     retp(-0.5 * ln(2*pi) - ln(sig) - 0.5 * (z .* z));
  28. endp;

  29. proc (1) = expalmon(theta, K);
  30.     local j, z, w;
  31.     j = seqa(0, 1, K);              // 0,1,2,...,K-1
  32.     z = theta[1] .* j + theta[2] .* (j .* j);
  33.     z = z - maxc(z);                // stabilize exponentials
  34.     w = exp(z);
  35.     retp(w ./ sumc(w));
  36. endp;

  37. proc (1) = stationary_probs(p11, p22);
  38.     local den, pi1;
  39.     den = 2 - p11 - p22;
  40.     pi1 = (1 - p22) / den;
  41.     retp(pi1 | (1 - pi1));
  42. endp;


  43. /* ---------- log-likelihood ---------- */

  44. proc lnlk_ms_midas(struct PV p, struct DS d, ind);
  45.     local y, ylag, Xlags, T, K;
  46.     local c1, c2, b1, b2, phi, ls1, ls2, th1, th2, lp11, lp22;
  47.     local s1, s2, p11, p22, P, w, xw;
  48.     local alpha, pred, ll, t, lpdf1, lpdf2, m, dens, ft, mu1, mu2;

  49.     struct modelResults mm;

  50.     y     = d[1].dataMatrix;
  51.     ylag  = d[2].dataMatrix;
  52.     Xlags = d[3].dataMatrix;

  53.     T = rows(y);
  54.     K = cols(Xlags);

  55.     /* unpack parameters */
  56.     c1   = pvUnpack(p, 1);
  57.     c2   = pvUnpack(p, 2);
  58.     b1   = pvUnpack(p, 3);
  59.     b2   = pvUnpack(p, 4);
  60.     phi  = pvUnpack(p, 5);
  61.     ls1  = pvUnpack(p, 6);   // log sigma_1
  62.     ls2  = pvUnpack(p, 7);   // log sigma_2
  63.     th1  = pvUnpack(p, 8);   // exp-almon theta_1
  64.     th2  = pvUnpack(p, 9);   // exp-almon theta_2
  65.     lp11 = pvUnpack(p,10);   // logit(p11)
  66.     lp22 = pvUnpack(p,11);   // logit(p22)

  67.     s1  = exp(ls1);
  68.     s2  = exp(ls2);
  69.     p11 = logistic(lp11);
  70.     p22 = logistic(lp22);

  71.     w  = expalmon(th1 | th2, K);
  72.     xw = Xlags * w;

  73.     P = p11~(1-p11) |
  74.         (1-p22)~p22;

  75.     alpha = stationary_probs(p11, p22);
  76.     ll = zeros(T, 1);

  77.     for t (1, T, 1);

  78.         if t > 1;
  79.             pred = P' * alpha;
  80.         else;
  81.             pred = alpha;
  82.         endif;

  83.         mu1 = c1 + phi * ylag[t] + b1 * xw[t];
  84.         mu2 = c2 + phi * ylag[t] + b2 * xw[t];

  85.         lpdf1 = logdnorm(y[t], mu1, s1);
  86.         lpdf2 = logdnorm(y[t], mu2, s2);

  87.         /* log-sum-exp stabilization */
  88.         m    = maxc(lpdf1 | lpdf2);
  89.         dens = exp((lpdf1 | lpdf2) - m);
  90.         ft   = sumc(pred .* dens);

  91.         if ft <= 1e-300;
  92.             if ind[1];
  93.                 mm.function = -1e256 * ones(T,1);
  94.             endif;
  95.             retp(mm);
  96.         endif;

  97.         ll[t] = ln(ft) + m;
  98.         alpha = (pred .* dens) / ft;
  99.     endfor;

  100.     if ind[1];
  101.         mm.function = ll;   // observation-wise log-likelihood
  102.     endif;

  103.     retp(mm);
  104. endp;


  105. /* ---------- example estimation block ---------- */

  106. /*
  107.     Replace these with your actual aligned data:

  108.     y      : T x 1
  109.     ylag   : T x 1
  110.     Xlags  : T x K
  111. */

  112. /* Example placeholders:
  113. y     = loadd("y.dat");
  114. ylag  = loadd("ylag.dat");
  115. Xlags = loadd("Xlags.dat");
  116. */

  117. struct DS d0;
  118. d0 = reshape(dsCreate, 3, 1);
  119. d0[1].dataMatrix = y;
  120. d0[2].dataMatrix = ylag;
  121. d0[3].dataMatrix = Xlags;

  122. struct PV p0;
  123. p0 = pvPacki(pvCreate,  0.00, "c1",    1);
  124. p0 = pvPacki(p0,        0.50, "c2",    2);
  125. p0 = pvPacki(p0,        0.20, "b1",    3);
  126. p0 = pvPacki(p0,        0.05, "b2",    4);
  127. p0 = pvPacki(p0,        0.30, "phi",   5);
  128. p0 = pvPacki(p0,       -1.00, "ls1",   6);
  129. p0 = pvPacki(p0,       -0.50, "ls2",   7);
  130. p0 = pvPacki(p0,        0.05, "th1",   8);
  131. p0 = pvPacki(p0,       -0.01, "th2",   9);
  132. p0 = pvPacki(p0,        2.00, "lp11", 10);
  133. p0 = pvPacki(p0,        2.00, "lp22", 11);

  134. struct maxlikmtControl c0;
  135. c0 = maxlikmtControlCreate;
  136. c0.printIters = 1;
  137. c0.maxIters   = 5000;
  138. c0.tol        = 1e-6;
  139. /* optional: c0.algorithm = "BFGS"; */

  140. struct maxlikmtResults out;
  141. out = maxlikmt(&lnlk_ms_midas, p0, d0, c0);

  142. print "retcode = " out.retcode;
  143. print "logLik  = " out.fct;
  144. print "estimated parameters:";
  145. print out.par;
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-4-7 17:12