【问题标题】:SAS: working with matrices using IMLSAS:使用 IML 处理矩阵
【发布时间】:2017-07-12 08:53:53
【问题描述】:

所以我试图计算这个公式,但结果很奇怪。元素非常大,所以我不确定我哪里出错了。我附上了公式的照片:

这是我的代码:

*calculating mu_sum and sigma_sum;
T_hat=180;
mu_sum_first_part={0,0,0,0};
mu_sum_second_part={0,0,0,0};
mu_sum={0,0,0,0};

*calculating mu_sum;
do i = 0 to T_hat;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;
do i=1 to T_hat; 
    term =B0**i;
    mu_sum_second_part = mu_sum_second_part + term;
end;
mu_sum = mu_sum_first_part + mu_sum_second_part*zt;
print mu_sum;

*calculating sigma_sum;
term=I(4);
sigma_sum=sigma;
do j=1 to T_hat;
    term = term + B0**j;
    sigma_sum = sigma_sum + (term*sigma*(term`));
end;
print sigma_sum;

我知道这很长,但请帮忙!!

【问题讨论】:

  • 这是什么计算,我想查一下? Bo 是标量、向量还是矩阵?我会想到一个向量,但 I+Bo 那样没有意义。
  • @DomPazz 我正在执行资产分配任务。这来自 Barberis (2000 JF) 的一篇论文“当回报可预测时进行长期投资”。 Bo 是一个 4x4 矩阵,第一列为零。 alpha 是一个 4x1 矩阵,sigma 是一个 4x4 矩阵。
  • 我还没拉纸,matrix上的幂算子是matrix power还是element-wise power? IE B^2 = B`*B 或 B#B 其中 # 是逐元素乘法
  • “双星算子”是重复矩阵乘法。
  • @DomPazz 幂运算符是矩阵幂,而不是元素幂

标签: sas sas-iml


【解决方案1】:

首先让我感到震惊的是mu 中的循环第一个术语有 1 太多:

do i = 0 to T_hat;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;

应该是:

do i = 0 to T_hat-1;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;

【讨论】:

  • 当 i = T_hat 时,两者都应与 (T-hat - i) = 0 相同,因此最后一项为 0。
【解决方案2】:

您的程序在数学上没有任何问题。当您将矩阵提高到 180 次方时,您应该不会对看到非常大或非常小的值感到惊讶。例如,如果你让 B0 = { 0 1 0 0, 0 0 1 0, 0 0 0 1, 0 1 1 1 }; 那么 B0**T 的元素是 O( 1E47 )。如果将 B0 除以 2 并将结果提高到 180 次方,则元素为 O(1E-8)。

大概这些公式适用于具有特殊结构的矩阵 B0,例如 ||B0**n|| --> 0 作为 n --> 无穷大。否则幂级数不会收敛。我建议您仔细检查您使用的 B0 是否满足参考假设。

您没有询问效率,但您最好使用Horner's method in SAS/IML 计算截断幂级数,而不是明确形成 B0 的幂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多