@ Kalman filter program, sampling error in pid data@ @ w/o intercept using mean-centered data @ @ !!! program allows for implicit missing data between days @ @ program focuses on the distinction between sampling error as @ @ a function of sample size and extra sampling variation. @ @ The former is allowed to vary from poll to poll. @ new; library maxlik; #include maxlik.ext; maxset; open f1=gpers.dat; lbl = { yr,month,day,days,pid,truen,piddev }; x=readr(f1,677); dataset="gpers"; let dep= piddev; __title="Macropartisanship: Disturbance and Sampling Variance"; _max_ParNames="Phi"|"Disrbnce"|"Xtra Smpl Var"; _max_Algorithm=2; _max_GradTol=1e-3; _max_MaxIters=150; _max_LineSearch=3; _max_FinalHess; _max_CovPar=2; vars=dep; B ={.9995,.0217,1.133}; @ starting values @ yt=x[.,7]; days=x[.,4]; truen=x[.,6]; pidlev=x[.,5]; plinit = 1 ; xlinit = 0 ; proc li(b,x); local ptgt,xtgt,i,xtgl,ptgl,inn,h,r,hi,q, gmma,phi,phip,likei,elapse,prevday,qp,qinit,qsum,j,v,e1; i=1; xtgt=xlinit; ptgt=plinit; qinit=0; prevday=1; r = b[3,1]; phip = b[1,1]; qp = b[2,1]; qsum=0;j=0; likei = zeros(rows(x),1); format /rd 8,4; do while i <= rows(x); elapse = days[i,1]-prevday; phi = phip^elapse; do while j < elapse; qsum=qsum+phip^(2*j); j=j+1; endo; q = qsum*qp; xtgl = phi*xtgt; ptgl = ptgt*phi^2+q; inn = yt[i,.]'-xtgl; @ h = ptgl+r;@ h = ptgl+r+((pidlev[i,.]*(100-pidlev[i,.]))/truen[i,.]); hi = invpd(h); xtgt = xtgl+ptgl*hi*inn; ptgt = ptgl-ptgl*hi*ptgl; @print days[i,1]~elapse~phi~q~qsum~j;@ @ uncomment to chk updating of q @ q=qinit;j=qinit;qsum=qinit; prevday=days[i,1]; likei[i,1] = -.5*(ln(det(h))+inn'*hi*inn); i=i+1; endo; retp(likei); endp; {b,ll,g,vc,ret}=maxprt(maxlik(dataset,vars,&li,b)); print ret; f1=close(f1);