Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中进行重复回归?_Matlab - Fatal编程技术网

如何在matlab中进行重复回归?

如何在matlab中进行重复回归?,matlab,Matlab,我有一个excel文件,包含5列48行(每个月四年(1997-2000年)的需水量、人口和降雨量数据) 我想在MATLAB中做多元线性回归。因变量为需水量,自变量为人口和降雨量。我已经为这48行编写了代码 A1=data(:,3); A2=data(:,4); A3=data(:,5); x=[ones(size(A1)),A2,A3]; y=A1; b=regress(y,x); yfit=b(1)+b(2).*A2+b(3).*A3; 现在我想重复一遍。首先,我想排除第1行数据(即排除19

我有一个excel文件,包含5列48行(每个月四年(1997-2000年)的需水量、人口和降雨量数据)

我想在MATLAB中做多元线性回归。因变量为需水量,自变量为人口和降雨量。我已经为这48行编写了代码

A1=data(:,3);
A2=data(:,4);
A3=data(:,5);
x=[ones(size(A1)),A2,A3];
y=A1;
b=regress(y,x);
yfit=b(1)+b(2).*A2+b(3).*A3;

现在我想重复一遍。首先,我想排除第1行数据(即排除1997年第1个月的数据),并对其余47行数据进行回归。然后我想排除第2行,并使用第1行和第3-48行的数据进行回归。然后我想排除第3行,并使用第1-2行和第4-48行的数据进行回归。在每次运行中排除一行时,总有47行数据点。最后,我想得到每次运行的回归系数和yfit的表。

我能想到的一个简单方法是创建一个for循环和一个临时的“待测”矩阵,它正是您所拥有的矩阵,没有要排除的行,如下图所示

C = zeros(3,number_of_lines);
for n = 1:number_of_lines
  under_test = data;
  % this excludes the nth line of the matrix
  under_test(n,:) = [];
  B1=under_test(:,3); 
  B2=under_test(:,4); 
  B3=under_test(:,5); 
  x1=[ones(size(B1)),B2,B3]; 
  y1=B1; 
  C(:,n)=regress(y1,x1);
end

我相信您可以通过使用一些对向量进行操作的matlab函数来优化它,而无需使用for循环。但我认为只有48行应该足够快。

+1用于奥卡姆的剃须刀。只有在性能有问题的情况下,才可以自杀。谢谢Castilho。但当我运行代码时,它只排除了第48行,给出了系数的3*1矩阵的结果,但我想得到所有48次运行的系数的3*48矩阵。以下是代码“n=1:48,测试=数据”;在u检验下(n,:)=[];B1=在_试验下(:,3);B2=在_试验下(:,4);B3=在_试验下(:,5);x1=[一个(大小(B1)),B2,B3];y1=B1;C=回归(y1,x1);“结束”for循环重复其内部编写的代码。如果要存储所有值,必须创建一个大小合适的矩阵,并将每个迭代结果保存在不同的行上。我已经编辑了上面的代码来实现这一点。:)
C = zeros(3,number_of_lines);
for n = 1:number_of_lines
  under_test = data;
  % this excludes the nth line of the matrix
  under_test(n,:) = [];
  B1=under_test(:,3); 
  B2=under_test(:,4); 
  B3=under_test(:,5); 
  x1=[ones(size(B1)),B2,B3]; 
  y1=B1; 
  C(:,n)=regress(y1,x1);
end