Kesalahan standar lereng dalam regresi linier satu demi satu dengan breakpoint yang diketahui

9

Situasi

Saya memiliki dataset dengan satu variabel dependen dan satu variabel bebas x . Saya ingin mencocokkan regresi linear piecewise berkelanjutan dengan k breakpoint diketahui / diperbaiki terjadi di ( a 1 , a 2 , ... , a k ) . Breakpoins dikenal tanpa ketidakpastian, jadi saya tidak ingin memperkirakannya. Maka saya cocok dengan regresi (OLS) dari bentuk y i = β 0 + β 1 x i + β 2 max ( x i - a 1yxk(a1,a2,,ak) Berikut adalah contoh dalam

yi=β0+β1xi+β2max(xia1,0)+β3max(xia2,0)++βk+1max(xiak,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)

Mari kita asumsikan bahwa breakpoint terjadi di 9.6 :k19.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

Mencegat dan kemiringan dari dua segmen adalah: dan - 1,1 untuk yang pertama dan 8,5 dan 0,27 untuk yang kedua, masing-masing.21.71.18.50.27

Breakpoint


Pertanyaan

  1. Bagaimana cara menghitung intersep dan kemiringan setiap segmen dengan mudah? Apakah model dapat direkam ulang untuk melakukan ini dalam satu perhitungan?
  2. Bagaimana cara menghitung kesalahan standar setiap kemiringan dari setiap segmen?
  3. Bagaimana cara menguji apakah dua lereng yang berdekatan memiliki kemiringan yang sama (yaitu apakah breakpoint dapat dihilangkan)?
COOLSerdash
sumber

Jawaban:

7
  1. Bagaimana cara menghitung intersep dan kemiringan setiap segmen dengan mudah?

x=151.1003+1.3760=0.2757.

Pencegatannya sedikit lebih sulit, tetapi merupakan kombinasi linear dari koefisien (melibatkan simpul).

x=9.621.70571.1003×9.6=11.1428(9.6,11.428)0.275711.14280.2757×9.6=8.496β0β2k1=21.70571.3760×9.6

Bisakah model ini ditata ulang untuk melakukan ini dalam satu perhitungan?

Ya, tapi mungkin secara umum lebih mudah untuk hanya menghitungnya dari model.

2. Bagaimana cara menghitung kesalahan standar setiap kemiringan dari setiap segmen?

aβ^aaVar(β^)a

misalnya dalam contoh Anda, kesalahan standar kemiringan segmen kedua adalah:

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

alternatifnya dalam bentuk matriks:

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

3. Bagaimana cara menguji apakah dua lereng yang berdekatan memiliki kemiringan yang sama (yaitu apakah breakpoint dapat dihilangkan)?

Ini diuji dengan melihat koefisien pada tabel segmen itu. Lihat baris ini:

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

Itulah perubahan kemiringan di 9,6. Jika perubahan itu berbeda dari 0, kedua lereng tidak sama. Jadi nilai-p untuk pengujian bahwa segmen kedua memiliki kemiringan yang sama dengan yang pertama tepat di akhir garis itu.

Glen_b -Reinstate Monica
sumber
(+1) Terima kasih Glen atas jawaban Anda. Hanya satu pertanyaan kecil tentang # 2: Dalam contoh saya, saya akan memerlukan matriks varians-kovarians xdan I(pmax(x-9.6,0)), apakah itu benar?
COOLSerdash
Tidak. Saya telah mengedit contoh eksplisit berdasarkan contoh Anda. Jika Anda ingin detail lebih lanjut, silakan tanyakan.
Glen_b -Reinstate Monica
Terima kasih banyak untuk hasil editnya, itu cukup menjelaskan bagi saya. Jadi, apakah saya mengerti itu dengan benar: kesalahan standar adalah sama untuk setiap kemiringan?
COOLSerdash
1
Tidak. Prosedurnya sama tetapi nilainya tidak. Kesalahan standar kemiringan segmen pertama ada di tabel regresi Anda (0,1788). Kesalahan standar kemiringan segmen kedua adalah 0,1160. Jika kita memiliki segmen ketiga, itu akan melibatkan lebih banyak istilah varians-kovarians dalam jumlahnya (sebelum akar kuadrat diambil).
Glen_b -Reinstate Monica
6

Pendekatan naif saya, yang menjawab pertanyaan 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 ** 

Tetapi saya tidak yakin apakah statistik (dalam derajat kebebasan tertentu) dilakukan dengan benar, jika Anda melakukannya dengan cara ini.

Roland
sumber
(+1) Terima kasih banyak atas jawaban Anda. Ini memberikan cara yang sangat nyaman untuk secara langsung menghitung intersep dan lereng, terima kasih!
COOLSerdash