Matlab:如何 运行 具有多个输出的 For 循环?

Matlab: how to run a For loop with multiple outputs?

所以我的问题是指matlab中的regress()函数。 Click here for the Matlab documentation

如果我想 运行 使用此函数进行多元回归并输出系数和置信区间,在 For 循环中执行此操作的最佳方法是什么?

Matlab 自己的语法是 [b,bint] = regress(y,X)。但是当我尝试在 for 循环中实现它时,它告诉我尺寸不匹配。我的代码如下:

for i=1:6
[a, b]=regress(Dataset(:,i),capm_factors);
capm_coefs(i,:)=a;
capm_ci(i,:)=b;
end

请帮忙,谢谢!

regress 输出一个 列向量 的系数最小化输入数据 (capm_factors) 和预测值 (Dataset(:,i)).但是,在您的 for 循环中,您假设 ab 行向量 .

此外,regress 的第一个输出是您系统的解,但第二个输出包含 矩阵 的置信度值,其中第一列表示较低的每个变量的置信区间结束,第二列表示置信区间的上限。

具体来说,您的输入 capm_factors 应该是一个 M x N 矩阵,其中 M 是输入样本的总数,N 是特征的总数。因此,在您的代码中,a 会给您一个 N x 1 向量,而 b 会给您一个 N x 2 矩阵。

如果您想使用循环,请确保 capm_coefs 是一个 N x l 矩阵,其中 l 是您要循环的总次数,capm_ci 应该是 N x 2 x l 3D 矩阵或者 l 元素元胞数组。任何一种方式都是可以接受的....但我会告诉你如何做到这两种方式。

我想到了这样的事情:

作为 3D 矩阵的置信度

l = 6; %// Define # of trials
[M,N] = size(capm_factors); %// Get dimensions of data
capm_coefs = zeros(N, l);
capm_ci = zeros(N, 2, l);

for ii = 1 : l
    [a,b] = regress(Dataset(:,i), capm_factors);
    capm_coefs(:,ii) = a;
    capm_ci(:,:,ii) = b;
end

然后您可以通过 capm_coefs(:,ii) 访问试验系数,其中 ii 是您想要的迭代。同样,可以通过 capm_ci(:,:,ii)

访问置信度矩阵

作为元胞数组的置信度

l = 6; %// Define # of trials
[M,N] = size(capm_factors); %// Get dimensions of data
capm_coefs = zeros(N, l);
capm_ci = cell(l); %// Cell array declaration

for ii = 1 : l
    [a,b] = regress(Dataset(:,i), capm_factors);
    capm_coefs(:,ii) = a;
    capm_ci{ii} = b; %// Assign confidences to cell array
end

像上面一样,您可以通过 capm_coefs(:,ii) 访问试验系数,其中 ii 是您想要的迭代。但是,由于我们现在正在处理元胞数组,因此可以通过 capm_ci{ii} 访问置信度矩阵。