Bilinen kesme noktaları ile parçalı doğrusal regresyondaki eğimlerin standart hatası


9

Durum

Bir bağımlı ve bir bağımsız değişken ile bir veri kümesi var . Birlikte regresyon doğrusal sürekli parçalı uygun istediğiniz meydana gelen bilinen sabit / kesme noktaları . Kesme noktaları belirsizlik olmadan bilinir, bu yüzden onları tahmin etmek istemiyorum. Sonra İşte bir örnekyxk(a1,a2,,ak)

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)

En kesme noktası olduğunu varsayalım meydana :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

İki segmentin kesişme noktası ve eğimi şunlardır: birincisi için sırasıyla ve ve ikincisi için ve .21.71.18.50.27

Kesme noktası


Sorular

  1. Her segmentin kesişim ve eğimi nasıl hesaplanır? Model bunu tek bir hesaplamada yapmak için yeniden yapılandırılabilir mi?
  2. Her segmentin her eğiminin standart hatası nasıl hesaplanır?
  3. İki bitişik eğimin aynı eğime sahip olup olmadığı nasıl test edilir (yani kesme noktasının atlanıp atlanamayacağı)?

Yanıtlar:


7
  1. Her segmentin kesişim ve eğimi nasıl hesaplanır?

Her bölümün eğimi, tüm katsayıların geçerli konuma kadar eklenmesiyle hesaplanır. En eğri tahmini Yani olduğu .x=151.1003+1.3760=0.2757

Kesişme biraz daha zordur, ancak katsayıların (düğümleri içeren) doğrusal bir kombinasyonudur.

, ikinci satır ilkini değerinde karşılar , böylece kırmızı nokta ilk satırda . İkinci çizgi eğimle noktadan , kesişimi . Tabii ki, bu adımları bir araya getirebilirsiniz ve ikinci segment = .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

Model bunu tek bir hesaplamada yapmak için yeniden parametrelendirilebilir mi?

Evet, ama muhtemelen modelden hesaplamak genel olarak daha kolay.

2. Her segmentin her eğiminin standart hatasını nasıl hesaplayabilirim?

Tahmin, a regresyon katsayılarının doğrusal bir kombinasyonu olduğu , burada 1 ve 0s içerir, varyans . Standart hata, bu varyans ve kovaryans terimlerinin toplamının kare köküdür.aβ^aaVar(β^)a

örneğin, örneğinizde, ikinci segmentin eğiminin standart hatası:

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

alternatif olarak matris formunda:

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

3. İki bitişik eğimin aynı eğime sahip olup olmadığı nasıl test edilir (yani kesme noktasının atlanıp atlanamayacağı)?

Bu, o segmentin tablosundaki katsayıya bakılarak test edilir. Bu satıra bakın:

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

Bu 9.6'daki eğim değişikliği . Bu değişiklik 0'dan farklıysa, iki eğim aynı değildir. Dolayısıyla, ikinci segmentin birinciyle aynı eğime sahip olduğu bir testin p değeri, bu satırın sonundadır.


(+1) Cevabınız için teşekkürler Glen. # 2 ile ilgili küçük bir soru: Örneğimde, varyans-kovaryans matrisine ihtiyacım var xve I(pmax(x-9.6,0))bu doğru mu?
COOLSerdash

Hayır. Örneğinize dayanarak açık bir örnek düzenledim. Daha fazla ayrıntı istiyorsanız, lütfen sorun.
Glen_b-Monica

Düzenleme için çok teşekkürler, bu benim için biraz açıklıyor. Bunu doğru olarak anlıyorum: standart hata her eğim için aynı mı?
COOLSerdash

1
Hayır. Prosedür aynıdır, ancak değer değildir. İlk segmentin eğiminin standart hatası regresyon tablonuzdadır (0.1788). İkinci segmentin eğiminin standart hatası 0.1160'dır. Üçüncü bir segmentimiz olsaydı, toplamında daha fazla varyans-kovaryans terimi içerecektir (karekök alınmadan önce).
Glen_b-Monica

6

1. soruya cevap veren saf yaklaşımım:

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 ** 

Ancak istatistiklerin (özellikle serbestlik derecelerinin) doğru şekilde yapılıp yapılmadığından emin değilim, eğer bu şekilde yaparsanız.


(+1) Cevabınız için çok teşekkür ederim. Kesintileri ve eğimleri doğrudan hesaplamak için çok uygun bir yol sağlar, teşekkürler!
COOLSerdash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.