最尤法(回帰分析の例) 解析的にもとめられる場合

プログラム

// Maximum Likelihood Estimation
// Analytical Result
#include<oxstd.h>
main()
{
decl ck,cnobs; // scalar (count, nnumber of...)
decl ds2,dssr; // scalar (double)
decl mi,msigma,mx; // matrix
decl vb,ve,vp,vpvalue,vse,vy,vyhat,vzvalue; // vector
 mx=<0;1;2;3;4>;  // x matrix: independent variable
 mx=ones(5,1)~mx; //          + constant term
 vy=<10;20;20;30;40>; // y vector: dependent variable
 cnobs=rows(mx); // number of observations
 ck=columns(mx)+1; // number of parameters (including constant term & sigma^2)
// use analytically obtained result
 vb=invert(mx'*mx)*mx'*vy; // beta
 vyhat=mx*vb; // y-hat
 ve=vy-vyhat; // residual
 dssr=ve'*ve; // Sum of Squared Residuals
 ds2=dssr/cnobs; // MLE:s^2
 vp=vb|ds2;   // parameter vector 
 // mi:information matrix
 mi=zeros(ck,ck);mi[0:ck-2][0:ck-2]=(1/ds2)*mx'*mx;
 mi[ck-1][ck-1]=cnobs/(2*ds2^2);
 msigma=invert(mi); // asymptotic covariance matrix
 vse=sqrt(diagonal(msigma))';
 vzvalue=vp./vse; // z-value for H0: parameter=0
 vpvalue=tailn(fabs(vzvalue)); 
 println("%r",{"beta0","beta1","sigma^2"},
         "%c",{"est. coeff.", "std. err.","z-value", "p-value"},
         "%10.6",vp~vse~vzvalue~vpvalue);
}

計算結果

               est. coeff.    std. err.      z-value      p-value
beta0               10.000       1.8974       5.2705  6.8040e-008
beta1               7.0000      0.77460       9.0370  8.0544e-020
sigma^2             6.0000       3.7947       1.5811     0.056923