SAS MLE估计参数向量

时间:2016-12-25 10:16:23

标签: loops sas

proc iml;
use rdata2;
read all var _all_ into xy;
close rdata2;
print xy;

use ppfinal2;
read all var _all_ into ppxy;
close ppfinal2;
print ppxy;

start f_prob(beta) global(xy, ppxy);
p = nrow(xy);
sum1 = 0.; sum2 = 0.;
do i = 1 to p;
    sum1 = sum1 + xy*beta;
    suminside&i. = 0.;
    n = nrow(ppxy(SOME CONDITIONED ROWS));
    do j = 1 to n;
        suminside&i. = suminside&i. + ppxy(SOME CONDITIONED ROWS)*beta;
    end;
    sum2 = sum2 + log(suminside&i.);
end;
f = sum1 - sum2;
return(f);
finish f_prob;

我打算对β进行mle估计,这是一个包含10个未知参数的向量。 xy包含矩阵形式的所有观测值,每次观测10列。

还有另一个更大的矩阵ppxy,也有10列,但我只想在每次迭代的内部do循环中指定一些ppxy行。

当i = 1时,有什么方法可以调节ppxy来获得ppxy的前12行,而接下来的12行ppxy用于i = 2 ....等等。此外,这种方式可以用于β参数矢量的mle估计吗?或者还有其他方法吗?我正在使用SAS UE。提前谢谢。

1 个答案:

答案 0 :(得分:0)

有关SAS / IML中MLE估计的概述和示例,请参阅"Maximum likelihood estimation in SAS/IML'

针对您的具体问题,请使用以下代码获取大ppxy矩阵的子矩阵:

do i = 1 to p;
    LastRow = 12*i;           /* 12, 24, 36, etc */
    FirstRow = LastRow - 11;  /*  1, 13, 25, etc */
    ppxy_i = ppxy[FirstRow:LastRow, ];
    /* use ppxy_i in computations */
end;

矩阵ppxy_i在每次迭代期间发生变化。它包含12行ppxy矩阵,其中行在迭代期间以12的倍数变化。