所以我的问题是指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
请帮助,谢谢!
答案 0 :(得分:2)
regress
输出列向量系数,可最大限度地减少输入数据(capm_factors
)与预测值(Dataset(:,i)
)之间的最小平方误差。但是,在for
循环中,您假设a
和b
是行向量。
此外,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
元素单元格数组。无论哪种方式都是可以接受的......但我会告诉你如何做到这两点。
想到这样的事情:
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}
访问,因为我们现在处理的是单元格数组。