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

时间:2015-09-30 03:54:12

标签: matlab for-loop output linear-regression

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

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

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

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

请帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

regress输出列向量系数,可最大限度地减少输入数据(capm_factors)与预测值(Dataset(:,i))之间的最小平方误差。但是,在for循环中,您假设ab行向量

此外,regress的第一个输出是系统的解决方案,但第二个输出包含置信度值的矩阵,其中第一列表示置信区间的下限对于每个变量,第二列表示置信区间的上限。

具体来说,您的输入capm_factors应该是M x N矩阵,其中M是输入样本的总数,N是要素的总数。在您的代码中,a会为您提供N x 1向量,b会为您提供N x 2矩阵。

如果您想使用循环,请确保capm_coefsN 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}访问,因为我们现在处理的是单元格数组。