【问题标题】:How to do a loop of regressions?如何进行回归循环?
【发布时间】:2017-09-27 14:47:06
【问题描述】:

我有以下代码用于单次回归:

results = fitlm(Rm,R(:,1))

当我尝试市场模型时,我正在回归公司回报的市场回报。到目前为止,这适用于 1 份。如何为我的数据集中的所有公司循环这个? R 是 324:60 矩阵,Rm 是 324:1 矩阵。

编辑:

它与它一起工作:

for i=1:40
    stats(i) = regstats(R(:,i),Rm);
end

如何从 stats 结构中提取特定的输出变量?

【问题讨论】:

  • 究竟是什么不起作用?请注意,您在第一个和第二个代码段之间交换了 fitlm 的参数。在 for 循环中,您还使用了 Rlinear indexing,这可能不是您想要的。
  • 所以,我现在尝试了这个:for i = 1:60 results = fitlm(Rm,R(:,i));结束,但这不起作用..我想获得 40 个不同的 beta、t 值、std、平均值等,但它只给出 1 个 beta 作为输出,这意味着我没有正确执行循环。这会让我的问题变得更好吗?
  • 首先我想在 R 的第一列回归 Rm,然后在 R 的第二列回归 Rm,依此类推.. 并得到所有的系数,如果这有意义的话。

标签: matlab loops regression


【解决方案1】:

这是因为您没有存储所有 60 次迭代的输出。您希望 results 是一个 60x1 元胞数组。试试:

results=cell(60,1);
for i=1:60
    results{i} = fitlm(Rm, R(:,i));
end

【讨论】:

  • 也不起作用。我收到此错误消息:“从 LinearModel 转换为 double 时发生以下错误:无法从 LinearModel 转换为 double。”
  • 我觉得不行,因为fitlm的输出给出了不同维度的不同向量和矩阵作为输出。 (R平方、残差、系数、t值、p值等)就没有别的办法了吗?或者我可以以某种方式对其进行编码,以便将输出中的 beta 值提取到结果表中?
  • 对不起,我没有意识到 fitlm 的输出类型是什么。查看我的编辑(使 results 成为一个单元格数组)。
  • 现在可以了。您知道我如何将特定变量从结果中提取到普通表中吗?以便我可以对数据进行排序和过滤?
  • 是的,您要比较/过滤哪些属性?
猜你喜欢
  • 2019-05-22
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2018-02-26
相关资源
最近更新 更多