解释SAS程序-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

SAS软件培训

>>

解释SAS程序

解释SAS程序

发布:Jessie_yj | 分类:SAS软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

获取电子版《CDA一级教材》

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

有谁可以帮我详细解释一下下面的程序,谢谢!title'SSMEstimationusingEMAlgorithm';dataone;inputy1y2@@;datalines;...datalinesomitted...;prociml;startlik(y,pred,vpred,h,rt);n=nrow(y);nz=ncol(h);et=y-pred*h ...
免费学术公开课,扫码加入


有谁可以帮我详细解释一下下面的程序,谢谢!
title 'SSM Estimation using EM Algorithm';
data one;
input y1 y2 @@;
datalines;
. . . data lines omitted . . .
;

proc iml;
start lik(y,pred,vpred,h,rt);
n = nrow(y);
nz = ncol(h);
et = y - pred*h`;
sum1 = 0;
sum2 = 0;
do i = 1 to n;
vpred_i = vpred[(i-1)*nz+1:i*nz,];
et_i = et[i,];
ft = h*vpred_i*h` + rt;
sum1 = sum1 + log(det(ft));
sum2 = sum2 + et_i*inv(ft)*et_i`;
end;
return(sum1+sum2);
finish;

start main;
use one;
read all into y var {y1 y2};
/*-- mean adjust series --*/
t = nrow(y);
ny = ncol(y);
nz = ny;
f = i(nz);
h = i(ny);

/*-- observation noise variance is diagonal --*/
rt = 1e-5#i(ny);

/*-- transition noise variance --*/
vt = .1#i(nz);
a = j(nz,1,0);
b = j(ny,1,0);
myu = j(nz,1,0);
sigma = .1#i(nz);
converge = 0;
logl0 = 0.0;
do iter = 1 to 100 while( converge = 0 );
/*--- construct big cov matrix --*/ var = ( vt || j(nz,ny,0) ) // ( j(ny,nz,0) || rt ); /*-- initial values are changed --*/ z0= myu` * f`; vz0 = f * sigma * f` + vt; /*-- filtering to get one-step prediction and filtered value --*/ call kalcvf(pred,vpred,filt,vfilt,y,0,a,f,b,h,var,z0,vz0); /*-- smoothing using one-step prediction values --*/ call kalcvs(sm,vsm,y,a,f,b,h,var,pred,vpred); /*-- compute likelihood values --*/ logl = lik(y,pred,vpred,h,rt); /*-- store old parameters and function values --*/ myu0 = myu; f0 = f; vt0 = vt; rt0 = rt; diflog = logl - logl0; logl0 = logl; itermat = itermat // ( iter || logl0 || shape(f0,1) || myu0` ); /*-- obtain P*(t) to get P_T_0 and Z_T_0 --*/ /*-- these values are not usually needed --*/ /*-- See Harvey (1989 p154) or Shumway (1988, p177) --*/ jt1 = sigma * f` * inv(vpred[1:nz,]); p_t_0= sigma + jt1*(vsm[1:nz,] - vpred[1:nz,])*jt1`; z_t_0= myu + jt1*(sm[1,]` - pred[1,]`); p_t1_t= vpred[(t-1)*nz+1:t*nz,]; p_t1_t1 = vfilt[(t-2)*nz+1:(t-1)*nz,]; kt = p_t1_t*h`*inv(h*p_t1_t*h`+rt); /*-- obtain P_T_TT1. See Shumway (1988, p180) --*/ p_t_ii1 = (i(nz)-kt*h)*f*p_t1_t1; st0 = vsm[(t-1)*nz+1:t*nz,] + sm[t,]`*sm[t,]; st1 = p_t_ii1 + sm[t,]`*sm[t-1,]; st00 = p_t_0 + z_t_0 * z_t_0`; cov = (y[t,]` - h*sm[t,]`) * (y[t,]` - h*sm[t,]`)` + h*vsm[(t-1)*nz+1:t*nz,]*h`; do i = t to 2 by -1; p_i1_i1 = vfilt[(i-2)*nz+1:(i-1)*nz,]; p_i1_i= vpred[(i-1)*nz+1:i*nz,]; jt1 = p_i1_i1 * f` * inv(p_i1_i); p_i1_i= vpred[(i-2)*nz+1:(i-1)*nz,]; if ( i > 2 ) then p_i2_i2 = vfilt[(i-3)*nz+1:(i-2)*nz,]; else p_i2_i2 = sigma; jt2 = p_i2_i2 * f` * inv(p_i1_i); p_t_i1i2 = p_i1_i1*jt2` + jt1*(p_t_ii1 - f*p_i1_i1)*jt2`; p_t_ii1 = p_t_i1i2; temp = vsm[(i-2)*nz+1:(i-1)*nz,]; sm1 = sm[i-1,]`; st0 = st0 + ( temp + sm1 * sm1` ); if ( i > 2 ) then st1 = st1 + ( p_t_ii1 + sm1 * sm[i-2,]); else st1 = st1 + ( p_t_ii1 + sm1 * z_t_0`); st00 = st00 + ( temp + sm1 * sm1` ); cov = cov + ( h * temp * h` + (y[i-1,]` - h * sm1)*(y[i-1,]` - h * sm1)` ); end; /*-- M-step: update the parameters --*/ myu = z_t_0; f = st1 * inv(st00); vt = (st0 - st1 * inv(st00) * st1`)/t; rt = cov / t; /*-- check convergence --*/ if ( max(abs((myu - myu0)/(myu0+1e-6))) < 1e-2 & max(abs((f - f0)/(f0+1e-6))) < 1e-2 & max(abs((vt - vt0)/(vt0+1e-6))) < 1e-2 & max(abs((rt - rt0)/(rt0+1e-6))) < 1e-2 & abs((diflog)/(logl0+1e-6)) < 1e-3 ) then converge = 1; end; reset noname; colnm = {'Iter' '-2*log L' 'F11' 'F12' 'F21' 'F22' 'MYU11' 'MYU22'}; print itermat[colname=colnm format=8.4]; eval = teigval(f0); colnm = {'Real' 'Imag' 'MOD'}; eval = eval || sqrt((eval#eval)[,+]); print eval[colname=colnm]; var = ( vt || j(nz,ny,0) ) // ( j(ny,nz,0) || rt ); /*-- initial values are changed --*/ z0= myu` * f`; vz0 = f * sigma * f` + vt; free itermat; /*-- multistep prediction --*/ call kalcvf(pred,vpred,filt,vfilt,y,15,a,f,b,h,var,z0,vz0); do i = 1 to 15; itermat = itermat // ( i || pred[t+i,] || sqrt(vecdiag(vpred[(t+i-1)*nz+1:(t+i)*nz,]))` ); end; colnm = {'n-Step' 'Z1_T_n' 'Z2_T_n' 'SE_Z1' 'SE_Z2'}; print itermat[colname=colnm]; finish; run;
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-1651634-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
数据分析师 人大经济论坛 大学 专业 手机版
联系客服
值班时间:工作日(9:00--18:00)