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
循环中,您假设 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
元素元胞数组。任何一种方式都是可以接受的....但我会告诉你如何做到这两种方式。
我想到了这样的事情:
作为 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}
访问置信度矩阵。
所以我的问题是指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
循环中,您假设 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
元素元胞数组。任何一种方式都是可以接受的....但我会告诉你如何做到这两种方式。
我想到了这样的事情:
作为 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}
访问置信度矩阵。