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

时间:2012-03-12 10:55:36

标签: matlab

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

Year  Month  Water_Demand Population Rainfall  
1997   1        355        4500        25  
1997   2        375        5000        20  
1997   3        320        5200        21  
.............% rest of the month data of year 1997.  
1997  12        380        6000        24  
1998   1        390        6500        23  
1998   2        370        6700        20  
............. % rest of the month data of year 1998  
1998  12        400        6900        19  
1999   1  
1999   2  
.............% rest of the month data of year 1997 and 2000  
2000   12       390        7000        20

我想在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表。

1 个答案:

答案 0 :(得分:2)

我能想到的一个简单方法是创建一个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行它应该足够快。