주요 콘텐츠

robustfit

로버스트 선형 회귀 피팅

설명

b = robustfit(X,y)는 예측 변수 행렬 X와 이에 대한 응답 변수 벡터 y가 주어진 경우 로버스트 다중 선형 회귀에 대한 계수 추정값으로 구성된 벡터 b를 반환합니다.

예제

b = robustfit(X,y,wfun,tune,const)는 피팅 가중치 함수 옵션 wfuntune과 모델에 상수항이 포함되어 있는지 여부를 알려주는 표시자 const를 지정합니다. wfun, tuneconst에 대해 []을 전달하면 각각의 디폴트 값을 사용할 수 있습니다.

예제

[b,stats] = robustfit(___)은 위에 열거된 구문에 나와 있는 입력 인수의 조합과 함께 사용하며, 추정 통계량을 포함하는 구조체 stats도 반환합니다.

예제

예제

모두 축소

다중 선형 모델의 로버스트 회귀 계수를 추정합니다.

carsmall 데이터 세트를 불러옵니다. 차량 중량과 마력을 예측 변수로 지정하고 갤런당 주행 거리를 응답 변수로 지정합니다.

load carsmall
x1 = Weight;
x2 = Horsepower;
X = [x1 x2];
y = MPG;

로버스트 회귀 계수를 계산합니다.

b = robustfit(X,y)
b = 3×1

   47.1975
   -0.0068
   -0.0333

피팅된 모델을 플로팅합니다.

x1fit = linspace(min(x1),max(x1),20);
x2fit = linspace(min(x2),max(x2),20);
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);
YFIT = b(1) + b(2)*X1FIT + b(3)*X2FIT;
mesh(X1FIT,X2FIT,YFIT)

데이터를 플로팅합니다.

hold on
scatter3(x1,x2,y,'filled')
hold off
xlabel('Weight')
ylabel('Horsepower')
zlabel('MPG')
legend('Model','Data')
view(50,10)
axis tight

Figure contains an axes object. The axes object with xlabel Weight, ylabel Horsepower contains 2 objects of type surface, scatter. These objects represent Model, Data.

서로 다른 조율 상수를 사용하여 로버스트 회귀의 가중치 함수를 조정합니다.

추세 y=10-2x로 데이터를 생성한 다음, 하나의 값을 변경하여 이상값을 시뮬레이션합니다.

x = (1:10)';
rng ('default') % For reproducibility
y = 10 - 2*x + randn(10,1);
y(10) = 0;

세 가지 다른 조율 상수에 대해 바이스퀘어 가중치 함수를 사용하여 로버스트 회귀 잔차를 계산합니다. 디폴트 조율 상수는 4.685입니다.

tune_const = [3 4.685 6];

for i = 1:length(tune_const)
    [~,stats] = robustfit(x,y,'bisquare',tune_const(i));
    resids(:,i) = stats.resid;
end

잔차에 대한 플롯을 생성합니다.

scatter(x,resids(:,1),'b','filled')
hold on
plot(resids(:,2),'rx','MarkerSize',10,'LineWidth',2)
scatter(x,resids(:,3),'g','filled')
plot([min(x) max(x)],[0 0],'--k')
hold off 
grid on
xlabel('x')
ylabel('Residuals')
legend('tune = 3','tune = 4.685','tune = 6','Location','best')

Figure contains an axes object. The axes object with xlabel x, ylabel Residuals contains 4 objects of type scatter, line. One or more of the lines displays its values using only markers These objects represent tune = 3, tune = 4.685, tune = 6.

세 가지 다른 조율 상수에 대해 잔차의 RMSE(평균제곱근오차)를 계산합니다.

rmse = sqrt(mean(resids.^2))
rmse = 1×3

    3.2577    2.7576    2.7099

조율 상수를 높이면 이상값에 할당된 비중강하 값이 낮아지므로, 조율 상수가 높아지면 RMSE가 낮아집니다.

추세 y=10-2x로 데이터를 생성한 다음, 하나의 값을 변경하여 이상값을 시뮬레이션합니다.

x = (1:10)';
rng('default') % For reproducibility
y = 10 - 2*x + randn(10,1);
y(10) = 0;

보통최소제곱 회귀를 사용하여 직선을 피팅합니다. 상수항을 갖는 모델의 계수 추정값을 계산하기 위해 x에 1로 구성된 열을 포함합니다.

bls = regress(y,[ones(10,1) x])
bls = 2×1

    7.8518
   -1.3644

로버스트 회귀 분석을 사용하여 직선 피팅을 추정합니다. robustfit은 기본적으로 모델에 상수항을 추가합니다.

[brob,stats] = robustfit(x,y);
brob
brob = 2×1

    8.4504
   -1.5278

잔차를 잔차의 중앙값절대편차와 비교하여 잠재적 이상값을 식별합니다.

outliers_ind = find(abs(stats.resid)>stats.mad_s);

로버스트 회귀 분석에 대한 잔차의 막대 그래프를 플로팅합니다.

bar(abs(stats.resid))
hold on
yline(stats.mad_s,'k--')
hold off
xlabel('x')
ylabel('Residuals')

Figure contains an axes object. The axes object with xlabel x, ylabel Residuals contains 2 objects of type bar, constantline.

데이터에 대한 산점도 플롯을 생성합니다.

scatter(x,y,'filled')

이상값을 플로팅합니다.

hold on 
plot(x(outliers_ind),y(outliers_ind),'mo','LineWidth',2)

최소제곱 및 로버스트 피팅을 플로팅합니다.

plot(x,bls(1)+bls(2)*x,'r')
plot(x,brob(1)+brob(2)*x,'g')
hold off
xlabel('x')
ylabel('y')
legend('Data','Outlier','Ordinary Least Squares','Robust Regression')
grid on

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 4 objects of type scatter, line. One or more of the lines displays its values using only markers These objects represent Data, Outlier, Ordinary Least Squares, Robust Regression.

이상값은 최소제곱 피팅보다 로버스트 피팅에 미치는 영향이 적습니다.

입력 인수

모두 축소

예측 변수 데이터로, n×p 숫자형 행렬로 지정됩니다. X의 행은 관측값에 대응되고, 열은 예측 변수에 대응됩니다. Xy와 동일한 개수의 행을 가져야 합니다.

const'off'로 지정하여 명시적으로 상수항을 제거하지 않으면 기본적으로 robustfit은 모델에 상수항을 추가합니다. 따라서 X에 1로 구성된 열을 포함하지 마십시오.

데이터형: single | double

응답 변수 데이터로, n×1 숫자형 벡터로 지정됩니다. y의 행은 각기 다른 관측값에 대응됩니다. yX와 동일한 개수의 행을 가져야 합니다.

데이터형: single | double

로버스트 피팅 가중치 함수로, 다음 표에 설명된 가중치 함수의 이름이나 함수 핸들로 지정됩니다. tune으로 달리 지정되지 않으면 robustfit은 해당하는 디폴트 조율 상수를 사용합니다.

가중치 함수설명디폴트 조율 상수
'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
'bisquare'w = (abs(r)<1) .* (1 - r.^2).^2(biweight, 즉 이중 가중이라고도 함)4.685
'cauchy'w = 1 ./ (1 + r.^2)2.385
'fair'w = 1 ./ (1 + abs(r))1.400
'huber'w = 1 ./ max(1, abs(r))1.345
'logistic'w = tanh(r) ./ r1.205
'ols'보통최소제곱(가중 함수 없음)없음
'talwar'w = 1 * (abs(r)<1)2.795
'welsch'w = exp(-(r.^2))2.985
함수 핸들사용자 지정 가중치 함수로, 스케일링된 잔차로 구성된 벡터 r을 받아 r과 동일한 크기의 가중치로 구성된 벡터를 반환합니다.1

가중치 함수의 값 r은 다음과 같습니다.

r = resid/(tune*s*sqrt(1–h)),

여기서

  • resid는 이전 반복에서의 잔차로 구성된 벡터입니다.

  • tune은 조율 상수입니다.

  • h는 최소제곱 피팅에서의 지렛대값으로 구성된 벡터입니다.

  • ss = MAD/0.6745로 주어지며, 오차항의 표준편차 추정값입니다.

MAD는 잔차의 중앙값과 잔차 간의 중앙값절대편차(Median Absolute Deviation)입니다. 상수 0.6745는 정규분포에 대해 무편향 추정값을 생성합니다. Xp개의 열이 있을 경우, 중앙값을 계산할 때 가장 작은 p개의 절대편차가 제외됩니다.

데이터형: char | string | function handle

조율 상수로, 양의 스칼라 값으로 지정됩니다. tune을 설정하지 않으면 robustfit은 각 가중치 함수에 해당하는 디폴트 조율 상수를 사용합니다(wfun의 표 참조).

응답 변수가 이상값 없이 정규분포를 가지는 경우 내장 가중치 함수의 디폴트 조율 상수는 보통최소제곱 추정값으로서 대략 95% 정도로 통계적 효율성을 갖는 계수 추정값을 제공합니다. 조율 상수를 낮추면 큰 잔차에 할당된 비중강하 값이 높아지고, 조율 상수를 높이면 큰 잔차에 할당된 비중강하 값이 낮아집니다.

데이터형: single | double

피팅의 상수항에 대한 표시자로, 'on' 또는 'off'로 지정됩니다. const'on'이면 robustfit은 1로 구성된 첫 번째 열을 예측 변수 행렬 X에 추가하게 되고, 출력값 b는 (p + 1)×1 벡터가 됩니다. const'off'이면 X는 변경되지 않으며 bp×1 벡터가 됩니다.

데이터형: char | string

출력 인수

모두 축소

로버스트 다중 선형 회귀에 대한 계수 추정값으로, 숫자형 벡터로 반환됩니다. bp×1 벡터이고, 여기서 pX에 포함된 예측 변수의 개수입니다.

const'off'로 지정하여 명시적으로 상수항을 제거하지 않으면 기본적으로 robustfit은 모델에 상수항을 추가합니다.

모델 통계량으로, 구조체로 반환됩니다. 다음 표는 로버스트 회귀 분석의 진단 통계량 구조체 필드를 설명합니다.

필드설명
ols_s보통최소제곱의 시그마 추정값(평균제곱근오차)
robust_s시그마의 로버스트 추정값
mad_s잔차의 중앙값에서 잔차의 중앙값절대편차를 사용하여 계산된 시그마 추정값. 반복 피팅 중에 잔차 스케일링에 사용
s시그마의 최종 추정값. ols_srobust_s의 가중 평균과 robust_s를 비교해 그중 큰 값
resid잔차. 관측값에서 피팅값을 뺀 값(Raw Residuals 항목 참조)
rstud스튜던트화 잔차. 잔차를 잔차 표준편차의 독립적 추정값으로 나눈 값(Studentized Residuals 항목 참조)
se추정된 계수 값 b의 표준 오차
covb계수 추정값의 추정된 공분산 행렬
coeffcorr계수 추정값의 추정된 상관관계
t모델에서 다른 예측 변수가 주어졌을 때 대응하는 계수가 0이라는 귀무가설을 대립 가설에 대해 검정하기 위한 각 계수의 t-통계량. 참고로, t = b/se입니다.
p대응하는 계수가 0인지 여부에 대한 가설검정의 t-통계량에 대한 p-값
w로버스트 피팅의 가중치로 구성된 벡터
RX의 QR 분해에서 R 인자
dfe오차(잔차)에 대한 자유도. 관측값 개수에서 추정된 계수의 개수를 뺀 값과 동일
h최소제곱 피팅의 지렛대값으로 구성된 벡터

세부 정보

모두 축소

  • robustfitX 또는 y에 있는 NaN 값을 누락값으로 처리합니다. robustfit은 로버스트 피팅에서 누락값이 있는 관측값을 제외합니다.

알고리즘

  • robustfit은 반복 재가중 최소제곱을 사용하여 계수 b를 구합니다. 입력 wfun이 가중치를 지정합니다.

  • robustfitinv(X'*X)*stats.s^2 식을 사용하여 계수 추정값의 분산-공분산 행렬 stats.covb를 추정합니다. 이 추정을 통해 계수 표준 오차 stats.se와 상관 stats.coeffcorr이 구해집니다.

  • 선형 모델에서 y의 관측값과 그 잔차는 확률 변수입니다. 잔차는 평균이 0이지만 예측 변수의 여러 값에서 다른 분산을 갖는 정규분포를 가집니다. 잔차를 비교 가능한 스케일로 만들기 위해 robustfit은 잔차를 “스튜던트화”합니다. 즉, robustfit은 잔차 값과는 독립적인 표준편차 추정값으로 잔차를 나눕니다. 스튜던트화 잔차는 알려진 자유도를 갖는 t-분포를 가집니다. robustfit은 스튜던트화된 잔차를 stats.rstud로 반환합니다.

대체 기능

robustfit은 단순히 함수의 출력 인수가 필요하거나 루프에서 모델을 여러 차례 반복 피팅하는 경우에 유용합니다. 로버스트 피팅 회귀 모델을 추가로 조사하려면 fitlm을 사용하여 선형 회귀 모델 객체 LinearModel을 생성하십시오. 이름-값 쌍 인수 'RobustOpts'의 값을 'on'으로 설정합니다.

참고 문헌

[1] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[2] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

[3] Huber, P. J. Robust Statistics. Hoboken, NJ: John Wiley & Sons, Inc., 1981.

[4] Street, J. O., R. J. Carroll, and D. Ruppert. “A Note on Computing Robust Regression Estimates via Iteratively Reweighted Least Squares.” The American Statistician. Vol. 42, 1988, pp. 152–154.

버전 내역

R2006a 이전에 개발됨