Я не очень понимаю гетероскедастичность. Я хотел бы знать, подходит ли моя модель в соответствии с этим сюжетом.
Я не очень понимаю гетероскедастичность. Я хотел бы знать, подходит ли моя модель в соответствии с этим сюжетом.
Ответы:
Как прокомментировал @IrishStat, вам нужно сравнить наблюдаемые значения с ошибками, чтобы увидеть, есть ли проблемы с изменчивостью. Я вернусь к этому ближе к концу.
Точно так же вы получите представление о том, что мы подразумеваем под гетероскедастичностью: когда вы подгоняете линейную модель к переменной вы, по сути, говорите, что делаете предположение, что ваш y ∼ N ( X β , σ 2 ) или с точки зрения непрофессионала, что ваш Ожидается, что y будет равняться X β плюс некоторые ошибки, которые имеют дисперсию σ 2 . Это практически ваша линейная модель y = X β + ϵ , где погрешности ϵ ∼ N ( 0 , σ 2 ), Хорошо, пока что, давайте посмотрим, что в коде:
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");
что должно дать вам что-то вроде этого: это означает, что ваши остатки, кажется, не имеют явной тенденции, основанной на вашем произвольном индексе (1-й график - наименее информативный на самом деле), кажется, не имеют реальной корреляции между ними (2-й график - довольно важный вероятно, более важно, чем гомоскедастичность), и что установленные значения не имеют явной тенденции к провалу, т.е. ваши установленные значения против ваших остатков кажутся довольно случайными. Исходя из этого, мы бы сказали, что у нас нет проблем гетероскедастичности, поскольку наши остатки, по-видимому, имеют одинаковую дисперсию везде.
Хорошо, вы хотите гетероскедастичность, хотя. Учитывая те же предположения о линейности и аддитивности, давайте определим еще одну порождающую модель с «очевидными» проблемами гетероскедастичности. А именно после некоторых значений наше наблюдение будет намного более шумным.
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 , регрессия Тейла -Сен и т. Д.)
Здесь проблема была действительно очевидной, но в других случаях мы могли бы пропустить; чтобы уменьшить наши шансы пропустить его, еще один проницательный сюжет был упомянут IrishStat: «Остаточные значения в сравнении с наблюдаемыми значениями» или для нашей проблемы с игрушкой:
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-графики или что-то в этом роде, чтобы не сбивать с толку вещи, но вы также можете кратко их проверить.) Я надеюсь, что это поможет вам понять гетероскедастичность и то, на что вам следует обратить внимание.
Ваш вопрос, кажется, о гетероскедастичности (потому что вы упомянули это по имени и добавили тег), но ваш явный вопрос (например, в заголовке и), заканчивающий ваш пост, носит более общий характер: «Подходит ли моя модель в соответствии с этим? участок". Определить, является ли модель неподходящей, - это не только оценка гетероскедастичности.
Я удалил ваши данные с помощью этого сайта (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), похоже, нет никаких проблем с предположением о нормальности.
С другой стороны, кривая «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
Чтобы ответить на ваши явные вопросы: ваш график показывает последовательные автокорреляции / не независимость ваших остатков. Это означает, что ваша модель не соответствует текущей форме.