Стандартна похибка укосів у кусково-лінійній регресії з відомими точками переривання


9

Ситуація

У мене є набір даних з однією залежною і однією незалежною змінною . Я хочу встановити безперервну кусочно-лінійну регресію з відомими / фіксованими точками розриву, що виникають при . Прориви відомі без сумнівів, тому я не хочу їх оцінювати. Тоді я регресію (OLS) форми Ось приклад вyхк(а1,а2,,ак)

уi=β0+β1хi+β2макс(хi-а1,0)+β3макс(хi-а2,0)++βк+1макс(хi-ак,0)+ϵi
R
set.seed(123)
x <- c(1:10, 13:22)
y <- numeric(20)
y[1:10] <- 20:11 + rnorm(10, 0, 1.5)
y[11:20] <- seq(11, 15, len=10) + rnorm(10, 0, 2)

Припустимо, що точка розриву відбувається в :к19.6

mod <- lm(y~x+I(pmax(x-9.6, 0)))
summary(mod)

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)          21.7057     1.1726  18.511 1.06e-12 ***
x                    -1.1003     0.1788  -6.155 1.06e-05 ***
I(pmax(x - 9.6, 0))   1.3760     0.2688   5.120 8.54e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Перехоплення та нахил двох відрізків складають: та для першого та та для другого відповідно.21.7-1.18.50,27

Точка розриву


Запитання

  1. Як легко обчислити перехоплення та нахил кожного відрізка? Чи можна перереметризувати модель, щоб зробити це за один розрахунок?
  2. Як обчислити стандартну похибку кожного нахилу кожного відрізка?
  3. Як перевірити, чи мають два суміжні схили однакові схили (тобто чи можна опустити точку розриву)?

Відповіді:


7
  1. Як легко обчислити перехоплення та нахил кожного відрізка?

Нахил кожного відрізка обчислюється шляхом простого додавання всіх коефіцієнтів до поточного положення. Тож оцінка схилу вх=15 є -1.1003+1.3760=0,2757.

Перехоплення трохи складніше, але це лінійна комбінація коефіцієнтів (за участю вузлів).

У вашому прикладі другий рядок відповідає першому в х=9.6, тож червона точка знаходиться на першому рядку в 21.7057-1.1003×9.6=11.1428. Оскільки другий рядок проходить через точку(9.6,11.428) з нахилом 0,2757, його перехоплення є 11.1428-0,2757×9.6=8.496. Звичайно, ви можете скласти ці кроки разом, і це спрощує право до перехоплення другого сегмента =β0-β2к1=21.7057-1.3760×9.6.

Чи можна перемежувати модель, щоб це зробити за один розрахунок?

Ну так, але взагалі, мабуть, простіше просто обчислити його з моделі.

2. Як обчислити стандартну похибку кожного нахилу кожного відрізка?

Оскільки оцінка є лінійною комбінацією коефіцієнтів регресії аβ^, де а складається з 1 та 0, дисперсія - аВар(β^)а. Стандартною помилкою є квадратний корінь цієї суми дисперсійних та коваріаційних доданків.

наприклад, у вашому прикладі стандартна похибка нахилу другого відрізка:

Sb <- vcov(mod)[2:3,2:3]
sqrt(sum(Sb))

альтернативно в матричній формі:

Sb <- vcov(mod)
a <- matrix(c(0,1,1),nr=3)
sqrt(t(a) %*% Sb %*% a)

3. Як перевірити, чи мають два суміжні схили однакові схили (тобто чи можна опустити точку розриву)?

Це перевіряється, дивлячись на коефіцієнт у таблиці цього сегмента. Дивіться цей рядок:

I(pmax(x - 9.6, 0))   1.3760     0.2688   5.120 8.54e-05 ***

Ось така зміна нахилу в 9,6. Якщо ця зміна відрізняється від 0, два схили не однакові. Отже, значення p для тесту, що другий відрізок має той же нахил, що і перший, знаходиться в кінці цього рядка.


(+1) Дякую Глен за вашу відповідь. Лише одне невелике запитання щодо №2: У моєму прикладі мені знадобиться матриця дисперсії-коваріації xта I(pmax(x-9.6,0)), чи правильно це?
COOLSerdash

Ні. Я відредагував явний приклад на основі вашого прикладу. Якщо ви хочете отримати більше деталей, будь ласка, запитайте.
Glen_b -Встановіть Моніку

Дуже дякую за редагування, що для мене це зовсім уточнює. Тож я правильно розумію: стандартна помилка однакова для кожного схилу?
COOLSerdash

1
Ні. Процедура однакова, але значення немає. Стандартна похибка нахилу першого відрізка знаходиться у вашій таблиці регресії (0,1788). Стандартна похибка нахилу другого сегмента становить 0,1160. Якби у нас був третій відрізок, він би залучав до своєї суми більше варіативно-коваріаційних доданків (до того, як буде взято квадратний корінь).
Glen_b -Встановіть Моніку

6

Мій наївний підхід, який відповідає на питання 1:

mod2 <- lm(y~I((x<9.6)*x)+as.numeric((x<9.6))+
             I((x>=9.6)*x)+as.numeric((x>=9.6))-1)
summary(mod2)

#                        Estimate Std. Error t value Pr(>|t|)    
# I((x < 9.6) * x)        -1.1040     0.2328  -4.743 0.000221 ***
# as.numeric((x < 9.6))   21.7188     1.3099  16.580 1.69e-11 ***
# I((x >= 9.6) * x)        0.2731     0.1560   1.751 0.099144 .  
# as.numeric((x >= 9.6))   8.5442     2.6790   3.189 0.005704 ** 

Але я не впевнений, чи статистика (зокрема ступеня свободи) зроблена правильно, якщо ви робите це так.


(+1) Дуже дякую за вашу відповідь. Це забезпечує дуже зручний спосіб безпосередньо обчислити перехоплення та нахили, дякую!
COOLSerdash
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.