Как вычислить, имеет ли моя линейная регрессия статистически значимое отличие от известной теоретической линии?

14

У меня есть некоторые данные, которые соответствуют примерно линейной линии:

введите описание изображения здесь

Когда я делаю линейную регрессию этих значений, я получаю линейное уравнение:

Yзнак равно0,997Икс-0,0136

В идеальном мире уравнение должно быть .Yзнак равноИкс

Ясно, что мои линейные значения близки к этому идеалу, но не совсем. У меня вопрос, как я могу определить, является ли этот результат статистически значимым?

Значение 0,997 значительно отличается от 1? -0.01 значительно отличается от 0? Или они статистически одинаковы, и я могу заключить, что с некоторым разумным уровнем достоверности?Yзнак равноИкс

Что такое хороший статистический тест, который я могу использовать?

Благодарность

Darcy
источник
1
Вы можете вычислить, есть или нет статистически значимая разница, но вы должны заметить, что это не означает, что нет разницы. Вы можете быть уверены в значении только тогда, когда вы фальсифицируете нулевую гипотезу, но если вы не фальсифицируете нулевую гипотезу, то это может быть либо: из выборок (3) ваш тест не был силен из-за неправильной альтернативной гипотезы (3b) неверного измерения статистической значимости из-за неправильного представления недетерминированной части модели.
Секст Эмпирик
Для меня ваши данные не похожи на y = x + белый шум. Можешь рассказать об этом подробнее? (тест для предположения о том, что вы получаете такой шум, может не увидеть «существенной разницы», независимо от того, насколько велика выборка, даже когда существует огромная разница между данными и линией y = x, просто потому, что вы только сравнение с другими строками y = a + bx, что может быть не самым правильным и самым сильным сравнением)
Sextus
Кроме того, какова цель определения значимости. Я вижу, что многие ответы предлагают использовать альфа-уровень 5% (95% доверительные интервалы). Однако это очень произвольно. Очень трудно увидеть статистическую значимость как бинарную переменную (присутствует или нет). Это делается с помощью таких правил, как стандартные альфа-уровни, но это произвольно и почти бессмысленно. Если вы задаете контекст, то использование определенного уровня отсечки для принятия решения (двоичная переменная) на основе уровня значимости ( не двоичной переменной), тогда такая концепция, как двоичная значимость, имеет больше смысла.
Секст Эмпирик
1
Какую «линейную регрессию» вы выполняете? Обычно считается, что вы обсуждаете обычную регрессию наименьших квадратов (с термином перехвата), но в этом случае, поскольку оба набора остатков будут иметь нулевое среднее значение (точно), перехват в регрессии между остатками также должен быть нулевым (точно ). Поскольку это не так, здесь происходит что-то еще. Не могли бы вы рассказать о том, что вы делаете и почему?
whuber
Это похоже на проблему измерения того, видят ли две системы одинаковый результат. Попробуйте посмотреть на заговор-альтман-сюжет для некоторого материала.
mdewey

Ответы:

17

Этот тип ситуации может быть обработан стандартным F-тестом для вложенных моделей . Поскольку вы хотите проверить оба параметра на нулевой модели с фиксированными параметрами, ваши гипотезы таковы:

ЧАС0:βзнак равно[01]ЧАСA:β[01],

F-тест включает в себя подбор обеих моделей и сравнение их остаточной суммы квадратов:

SSЕ0знак равноΣязнак равно1N(Yя-Икся)2SSЕAзнак равноΣязнак равно1N(Yя-β^0-β^1Икся)2

Статистика теста:

FF(Y,Икс)знак равноN-22SSЕ0-SSЕASSЕA,

Соответствующее значение p:

пп(Y,Икс)знак равноF(Y,Икс)F-Dist(р|2,N-2) dр,


Реализация в R: Предположим, что ваши данные находятся во фрейме данных DATAс именами переменных yи x. F-тест можно выполнить вручную с помощью следующего кода. В данных смоделированного макета, которые я использовал, вы можете видеть, что оценочные коэффициенты близки к значениям в нулевой гипотезе, а значение p теста не показывает существенных доказательств, чтобы опровергнуть нулевую гипотезу о том, что истинная функция регрессии является тождественная функция.

#Generate mock data (you can substitute your data if you prefer)
set.seed(12345);
n    <- 1000;
x    <- rnorm(n, mean = 0, sd = 5);
e    <- rnorm(n, mean = 0, sd = 2/sqrt(1+abs(x)));
y    <- x + e;
DATA <- data.frame(y = y, x = x);

#Fit initial regression model
MODEL <- lm(y ~ x, data = DATA);

#Calculate test statistic
SSE0   <- sum((DATA$y-DATA$x)^2);
SSEA   <- sum(MODEL$residuals^2);
F_STAT <- ((n-2)/2)*((SSE0 - SSEA)/SSEA);
P_VAL  <- pf(q = F_STAT, df1 = 2, df2 = n-2, lower.tail = FALSE);

#Plot the data and show test outcome
plot(DATA$x, DATA$y,
     main = 'All Residuals',
     sub  = paste0('(Test against identity function - F-Stat = ',
            sprintf("%.4f", F_STAT), ', p-value = ', sprintf("%.4f", P_VAL), ')'),
     xlab = 'Dataset #1 Normalized residuals',
     ylab = 'Dataset #2 Normalized residuals');
abline(lm(y ~ x, DATA), col = 'red', lty = 2, lwd = 2);

summaryВыход и plotдля этого взгляда данных , как это:

summary(MODEL);

Call:
lm(formula = y ~ x, data = DATA)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.8276 -0.6742  0.0043  0.6703  5.1462 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.02784    0.03552  -0.784    0.433    
x            1.00507    0.00711 141.370   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.122 on 998 degrees of freedom
Multiple R-squared:  0.9524,    Adjusted R-squared:  0.9524 
F-statistic: 1.999e+04 on 1 and 998 DF,  p-value: < 2.2e-16

F_STAT;
[1] 0.5370824

P_VAL;
[1] 0.5846198

введите описание изображения здесь

Восстановить Монику
источник
Интересно, как вы генерируете данные. Если бы вы добавили ошибку в переменную то лучшей строкой для размещения данных была бы не y = x. Это показывает, насколько проверка гипотез зависит не только от детерминированной части y = x, но также и от недетерминированной части, которая объясняет, как распределяются ошибки. Здесь тест на нулевую гипотезу предназначен для более конкретной гипотезы «y = x + e», а не для «y = x». Икс
Секст Эмпирик
1
Да, хорошо заметили. Моделируемые данные не используют стандартную гомоскедастическую линейную регрессию. Я использовал гетероскедастичность в симуляции, чтобы попытаться приблизительно имитировать структуру данных на графике, представленном ОП. (И я думаю, что я чертовски хорошо поработал!) Так что это тот случай, когда я подгоняю стандартную линейную гомоскедастическую модель к моделируемым данным, которые не были сгенерированы из этой модели. Это все еще законно - все в порядке, чтобы моделировать данные от одной модели и затем приспосабливать их к другой, чтобы видеть то, что подходит.
Восстановить Монику
1
sd = 2/sqrt(1+abs(x))YИксYзнак равноИксИксYзнак равноИксYзнак равноИкс+е
Секст Эмпирик
1
Это правда, но это приводит вас на территорию моделей ошибок в переменных, что усложняет задачу. Я думаю, что ОП просто хочет использовать стандартную линейную регрессию в этом случае.
Восстановить Монику
Я согласен, что это sidenote, но тем не менее важный. Простота вопроса озадачивает меня (в разные моменты), а также меня беспокоит, потому что это может быть слишком простое представление. Конечно, это зависит от того, чего на самом деле кто-то пытается достичь («все модели ошибочны ...»), но это простое представление может стать стандартом, а сложные дополнительные вопросы, о которых нужно помнить, будут забыты, или даже никогда не задумывается об этом (ссылка на 95% ДИ в других ответах является примером такого стандарта, которому люди слепо следуют).
Секст Эмпирик
5

Вот классный графический метод, который я написал в превосходной книге Джулиана Фарауэя «Линейные модели с R (второе издание)». Это одновременные 95% доверительные интервалы для пересечения и наклона, построенные в виде эллипса.

Для иллюстрации я создал 500 наблюдений с переменной «x», имеющей распределение N (среднее = 10, sd = 5), а затем переменную «y», чье распределение равно N (среднее = x, sd = 2). Это дает корреляцию чуть более 0,9, которая может быть не такой жесткой, как ваши данные.

Вы можете проверить эллипс, чтобы увидеть, находится ли точка (intercept = 0, slope = 1) в пределах или за пределами этого одновременного доверительного интервала.

library(tidyverse)
library(ellipse)
#> 
#> Attaching package: 'ellipse'
#> The following object is masked from 'package:graphics':
#> 
#>     pairs

set.seed(50)
dat <- data.frame(x=rnorm(500,10,5)) %>% mutate(y=rnorm(n(),x,2))

lmod1 <- lm(y~x,data=dat)
summary(lmod1)
#> 
#> Call:
#> lm(formula = y ~ x, data = dat)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -6.9652 -1.1796 -0.0576  1.2802  6.0212 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  0.24171    0.20074   1.204    0.229    
#> x            0.97753    0.01802  54.246   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.057 on 498 degrees of freedom
#> Multiple R-squared:  0.8553, Adjusted R-squared:  0.855 
#> F-statistic:  2943 on 1 and 498 DF,  p-value: < 2.2e-16

cor(dat$y,dat$x)
#> [1] 0.9248032

plot(y~x,dat)
abline(0,1)


confint(lmod1)
#>                  2.5 %    97.5 %
#> (Intercept) -0.1526848 0.6361047
#> x            0.9421270 1.0129370

plot(ellipse(lmod1,c("(Intercept)","x")),type="l")
points(coef(lmod1)["(Intercept)"],coef(lmod1)["x"],pch=19)

abline(v=confint(lmod1)["(Intercept)",],lty=2)
abline(h=confint(lmod1)["x",],lty=2)

points(0,1,pch=1,size=3)
#> Warning in plot.xy(xy.coords(x, y), type = type, ...): "size" is not a
#> graphical parameter

abline(v=0,lty=10)
abline(h=0,lty=10)

Создано в 2019-01-21 пакетом представлением (v0.2.1)

Брент Хатто
источник
1

Вы можете вычислить коэффициенты с n загрузочными выборками. Это, вероятно, приведет к нормальным распределенным значениям коэффициента (центральная предельная теорема). После этого вы можете построить (например, 95%) доверительный интервал с t-значениями (n-1 степеней свободы) вокруг среднего значения. Если ваш КИ не включает 1 (0), он статистически значимо отличается или точнее: вы можете отклонить нулевую гипотезу с одинаковым наклоном.

Питер
источник
Как вы сформулировали здесь, он проверяет только две гипотезы по отдельности, но вам нужен совместный тест.
kjetil b halvorsen
0

β0знак равно0β1знак равно1

RScrlli
источник
1
Но то, что нужно, это совместный тест, как и в других ответах.
kjetil b halvorsen
@kjetilbhalvorsen Я понял, что сегодня утром я ошибся, читая другие ответы. Я удалю это.
RScrlli
0

Вы должны установить линейную регрессию и проверить 95% доверительные интервалы для двух параметров. Если CI наклона включает 1, а CI смещения включает 0, двусторонний тест незначителен прибл. на уровне (95%) ^ 2 - поскольку мы используем два отдельных теста, риск I типа увеличивается.

Используя R:

fit = lm(Y ~ X)
confint(fit)

или вы используете

summary(fit)

и вычислите 2 интервала сигмы самостоятельно.

Semoi
источник