R에서 dffits를 계산하는 방법
통계에서 우리는 회귀 모델에서 다양한 관찰이 어떤 영향을 미치는지 알고 싶어하는 경우가 많습니다.
관측치의 영향을 계산하는 한 가지 방법은 “적합의 차이”를 의미하는 DFFITS 라는 측정항목을 사용하는 것입니다.
이 측정항목은 개별 관찰을 생략할 때 회귀 모델에 의한 예측이 얼마나 변경되는지 알려줍니다.
이 튜토리얼에서는 R 모델의 각 관측값에 대한 DFFITS를 계산하고 시각화하는 방법에 대한 단계별 예를 보여줍니다.
1단계: 회귀 모델 만들기
먼저 R에 내장된 mtcars 데이터 세트를 사용하여 다중 선형 회귀 모델을 만듭니다.
#load the dataset data(mtcars) #fit a regression model model <- lm(mpg~disp+hp, data=mtcars) #view model summary summary(model) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 30.735904 1.331566 23.083 < 2nd-16 *** available -0.030346 0.007405 -4.098 0.000306 *** hp -0.024840 0.013385 -1.856 0.073679 . --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 3.127 on 29 degrees of freedom Multiple R-squared: 0.7482, Adjusted R-squared: 0.7309 F-statistic: 43.09 on 2 and 29 DF, p-value: 2.062e-09
2단계: 각 관측치에 대한 DFFITS 계산
다음으로 내장된 dffits() 함수를 사용하여 모델의 각 관측값에 대한 DFFITS 값을 계산합니다.
#calculate DFFITS for each observation in the model dffits <- as . data . frame (dffits(model)) #display DFFITS for each observation challenges dffits(model) Mazda RX4 -0.14633456 Mazda RX4 Wag -0.14633456 Datsun 710 -0.19956440 Hornet 4 Drive 0.11540062 Hornet Sportabout 0.32140303 Valiant -0.26586716 Duster 360 0.06282342 Merc 240D -0.03521572 Merc 230 -0.09780612 Merc 280 -0.22680622 Merc 280C -0.32763355 Merc 450SE -0.09682952 Merc 450SL -0.03841129 Merc 450SLC -0.17618948 Cadillac Fleetwood -0.15860270 Lincoln Continental -0.15567627 Chrysler Imperial 0.39098449 Fiat 128 0.60265798 Honda Civic 0.35544919 Toyota Corolla 0.78230167 Toyota Corona -0.25804885 Dodge Challenger -0.16674639 AMC Javelin -0.20965432 Camaro Z28 -0.08062828 Pontiac Firebird 0.67858692 Fiat X1-9 0.05951528 Porsche 914-2 0.09453310 Lotus Europa 0.55650363 Ford Pantera L 0.31169050 Ferrari Dino -0.29539098 Maserati Bora 0.76464932 Volvo 142E -0.24266054
일반적으로 우리는 임계값 2√ p/n을 초과하는 DFFITS 값을 갖는 관측치를 자세히 살펴봅니다. 여기서:
- p: 모델에 사용된 예측 변수의 수
- n: 모델에 사용된 관측치 수
이 예에서 임계값은 0.5 입니다.
#find number of predictors in model p <- length (model$coefficients)-1 #find number of observations n <- nrow (mtcars) #calculate DFFITS threshold value thresh <- 2* sqrt (p/n) thresh [1] 0.5
DFFITS 값을 기준으로 관측치를 정렬하여 임계값을 초과하는 관측치가 있는지 확인할 수 있습니다.
#sort observations by DFFITS, descending dffits[ order (-dffits[' dffits(model) ']), ] [1] 0.78230167 0.76464932 0.67858692 0.60265798 0.55650363 0.39098449 [7] 0.35544919 0.32140303 0.31169050 0.11540062 0.09453310 0.06282342 [13] 0.05951528 -0.03521572 -0.03841129 -0.08062828 -0.09682952 -0.09780612 [19] -0.14633456 -0.14633456 -0.15567627 -0.15860270 -0.16674639 -0.17618948 [25] -0.19956440 -0.20965432 -0.22680622 -0.24266054 -0.25804885 -0.26586716 [31] -0.29539098 -0.32763355
처음 5개 관측치의 DFFITS 값이 0.5보다 크다는 것을 알 수 있습니다. 이는 이러한 관측치가 모델에 큰 영향을 미치는지 확인하기 위해 더 자세히 연구해야 한다는 의미입니다.
3단계: 각 관측치에 대한 DFFITS 시각화
마지막으로 각 관측값에 대한 DFFITS를 시각화하는 빠른 그래프를 만들 수 있습니다.
#plot DFFITS values for each observation plot(dffits(model), type = ' h ') #add horizontal lines at absolute values for threshold abline(h = thresh, lty = 2) abline(h = -thresh, lty = 2)
x축은 데이터 세트의 각 관측치 색인을 표시하고 y값은 각 관측치에 해당하는 DFFITS 값을 표시합니다.
추가 리소스
R에서 단순 선형 회귀를 수행하는 방법
R에서 다중 선형 회귀를 수행하는 방법
R에서 레버리지 통계를 계산하는 방법
R에서 잔차 플롯을 만드는 방법