나는 이분산성을 정말로 이해하지 못한다. 이 플롯에 따라 모델이 적합한 지 여부를 알고 싶습니다.
나는 이분산성을 정말로 이해하지 못한다. 이 플롯에 따라 모델이 적합한 지 여부를 알고 싶습니다.
답변:
@IrishStat가 주석을 달았을 때 변동성과 관련된 문제가 있는지 확인하기 위해 관찰 된 값을 오류와 비교해야합니다. 나는 이것을 끝까지 다시 올 것이다.
. 좋아, 지금까지 멋지게 코드에서 보자.
set.seed(1); #set the seed for reproducability
N = 100; #Sample size
x = runif(N) #Independant variable
beta = 4; #Regression coefficient
epsilon = rnorm(N); #Error with variance 1 and mean 0
y = x * beta + epsilon #Your generative model
lin_mod <- lm(y ~x) #Your linear model
내 모델은 어떻게 작동합니까?
x11(); par(mfrow=c(1,3)); #Make a new 1-by-3 plot
plot(residuals(lin_mod));
title("Simple Residual Plot - OK model")
acf(residuals(lin_mod), main = "");
title("Residual Autocorrelation Plot - OK model");
plot(fitted(lin_mod), residuals(lin_mod));
title("Residual vs Fit. value - OK model");
이것은 당신에게 다음과 같은 것을 줄 것입니다 : 이것은 잔차가 임의의 지수 (첫 번째 음모-가장 유익하지 않은)를 기반으로 분명한 경향이없는 것처럼 보이고, 그들 사이에 실제 상관 관계가없는 것처럼 보입니다 (두 번째 음모-매우 중요하며 아마도 동종 동력보다 더 중요 할 것입니다. 적합치 대 잔차는 매우 무작위로 나타납니다. 이를 바탕으로 잔차가 모든 곳에서 동일한 분산을 갖는 것처럼 보이기 때문에 이분산성의 문제는 없다고 말할 수 있습니다.
그래, 당신은 이분산성을 원합니다. 선형성과 가산성에 대한 동일한 가정이 주어지면 "명백한"이분산성 문제가있는 또 다른 생성 모델을 정의 해 봅시다. 즉, 일부 값 이후에 우리의 관찰은 훨씬 시끄 럽습니다.
epsilon_HS = epsilon;
epsilon_HS[ x>.55 ] = epsilon_HS[x>.55 ] * 9 #Heteroskedastic errors
y2 = x * beta + epsilon_HS #Your generative model
lin_mod2 <- lm(y2 ~x) #Your unfortunate LM
모델의 간단한 진단 플롯 :
par(mfrow=c(1,3)); #Make a new 1-by-3 plot
plot(residuals(lin_mod2));
title("Simple Residual Plot - Fishy model")
acf(residuals(lin_mod2), main = "");
title("Residual Autocorrelation Plot - Fishy model");
plot(fitted(lin_mod2), residuals(lin_mod2));
title("Residual vs Fit. value - Fishy model");
다음과 같은 내용을 제시해야 합니다. 첫 번째 줄거리는 "홀수"입니다. 작은 크기로 군집하는 잔차가 몇 개있는 것처럼 보이지만 항상 문제가되지는 않습니다 ... 두 번째 줄거리는 괜찮습니다. 다른 지연에서 잔차간에 상관 관계가 없으므로 잠시 숨을 쉴 수 있습니다. 그리고 세 번째 줄거리는 콩을 흘립니다. 더 높은 값에 도달하면 잔차가 폭발한다는 것은 분명합니다. 우리는이 모형의 잔차에서 이분산성을 확실히 가지고 있으며, 우리는 무언가를 수행해야합니다 (예 : IRLS , Theil–Sen 회귀 등).
여기서 문제는 분명했지만 다른 경우에는 놓쳤을 수도 있습니다. 그것을 놓칠 가능성을 줄이기 위해 또 다른 통찰력있는 줄거리는 IrishStat에 의해 언급 된 것입니다 : Residuals vs Observed 값 또는 장난감 문제에 대한 것입니다.
par(mfrow=c(1,2))
plot(y, residuals(lin_mod) );
title( "Residual vs Obs. value - OK model")
plot(y2, residuals(lin_mod2) );
title( "Residual vs Obs. value - Fishy model")
다음과 같은 것을 제공해야합니다.
공정한 상황에서 잔차 대 적합치 그림은 상대적으로 괜찮은 것처럼 보입니다. 잔차와 관측 값을 확인하면 안전을 확보하는 데 도움이 될 수 있습니다. ( QQ-plots 또는 이와 유사한 것을 언급하지 않았지만 더 복잡하지는 않지만 간단히 확인하고 싶을 수도 있습니다.) 이것이 이분산성에 대한 이해와 무엇을주의해야하는지에 도움이되기를 바랍니다.
귀하의 질문은 이분산성에 관한 것으로 보입니다 (이름으로 언급하고 태그를 추가했기 때문에). 음모". 이분산성을 평가하는 것보다 모델이 부적절한 지 판단하는 것이 더 중요합니다.
이 웹 사이트 (ht @Alexis)를 사용하여 데이터를 스크랩했습니다 . 데이터는 오름차순으로 정렬됩니다 fitted
. 회귀 및 왼쪽 위 그림을 기반으로 충분히 충실한 것 같습니다.
mod = lm(residuals~fitted)
summary(mod)
# ...
# Residuals:
# Min 1Q Median 3Q Max
# -0.78374 -0.13559 0.00928 0.19525 0.48107
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.06406 0.35123 0.182 0.856
# fitted -0.01178 0.05675 -0.208 0.836
#
# Residual standard error: 0.2349 on 53 degrees of freedom
# Multiple R-squared: 0.0008118, Adjusted R-squared: -0.01804
# F-statistic: 0.04306 on 1 and 53 DF, p-value: 0.8364
나는 이분산성의 증거를 보지 못했다. 오른쪽 상단 (qq-plot)에서 정규성 가정에도 아무런 문제가없는 것 같습니다.
반면, 빨간색 lowess fit의 "S"곡선 (왼쪽 상단 플롯)과 acf 및 pacf 플롯 (하단)은 문제가있는 것으로 보입니다. 가장 왼쪽에있는 대부분의 잔차는 회색 0 선 위에 있습니다. 오른쪽으로 이동하면 잔차의 대부분이 0 아래로, 그 다음 위로, 다시 아래로 떨어집니다. 그 결과 내가 특정 잔차를보고 있다고 말했고 그 값이 음의 값을 가졌다 고 말했지만 (내가 어느 것을보고 있는지는 말하지 않았지만) 잔차가 근처에 있다는 것을 정확하게 추측 할 수있었습니다. 또한 부정적인 가치가있었습니다. 다시 말해, 잔차는 독립적 이지 않습니다. 하나에 대해 알고 있으면 다른 것에 대한 정보를 얻을 수 있습니다.
플롯 외에도 테스트 할 수 있습니다. 간단한 접근 방식은 런 테스트 를 사용하는 것입니다 .
library(randtests)
runs.test(residuals)
# Runs Test
#
# data: residuals
# statistic = -3.2972, runs = 16, n1 = 27, n2 = 27, n = 54, p-value = 0.0009764
# alternative hypothesis: nonrandomness
당신의 명백한 질문에 답하기 위해 : 당신의 줄거리는 연속 자기 상관 / 잔차의 비 독립성을 보여줍니다. 모델이 현재 형식으로 적합하지 않다는 것을 의미합니다.