2012-03-12 5 views
3

Imatlab에서 반복 회귀를 수행하는 방법은 무엇입니까?

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 

(매월 4 년 (1,997에서 2,000 사이) 물 수요, 인구와 강우량 데이터) 5 열 48 행이 포함 된 엑셀 파일이 난의 다중 선형 회귀 분석을 수행 할가 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 테이블을 얻고 싶습니다. 내가 생각할 수있는

답변

2

간단한 방법은 루프 나 '이

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 

처럼, 당신은 제외 할 라인없이이 정확히 행렬이 행렬 "시험"임시의를 만드는 for 루프를 사용하지 않고 벡터에서 작동하는 일부 matlab 함수를 사용하여 최적화 할 수 있는지 확인하십시오. 그러나 나는 48 라인만으로도 충분히 빠르다고 생각한다.

+0

+1 occam 's 면도날 용. 성능이 문제가되는 경우에만 최적화를 중지하십시오. – Marc

+0

감사합니다. Castilho. 하지만 코드를 실행하면 48 번째 행만 제외하고 3 * 1 행렬에 대한 결과를 얻을 수 있지만 모든 48 행에 대해 3 * 48 행렬을 얻고 싶습니다. 다음은 'n = 1:48에 대한 코드입니다. under_test = data; under_test (n, :) = []; B1 = under_test (:, 3); B2 = under_test (:, 4); B3 = under_test (:, 5); x1 = [ones (size (B1)), B2, B3]; y1 = B1; C = 회귀 (y1, x1); end ' – shawpnik

+0

for 루프는 내부에 작성된 코드를 반복합니다. 모든 값을 저장하려면 올바른 크기의 행렬을 만들고 각 반복 결과를 다른 행에 저장해야합니다. 나는 위의 코드를 편집했다. :) – Castilho

관련 문제