既知のブレークポイントを持つ区分的線形回帰における勾配の標準誤差


9

状況

1つの従属と1つの独立変数データセットがあります。発生する既知の/固定されたブレークポイントを使用して、連続的な区分線形回帰を近似したいと思います。ブレイクポインは不確実性なく知られているので、推定したくありません。次に、の形式の回帰(OLS)を これはX K 12... KY I = β 0 + β 1 X I + β 2マックスX I - 10 + β 3マックスX I - 20 + ... + β K + 1つのマックスXyxk(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)

ブレークポイントが発生するとします。 9.6k19.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

2つのセグメントの切片と傾きは、最初のセグメントではと番目のセグメントではそれぞれとです。1.1 8.5 0.2721.71.18.50.27

ブレークポイント


ご質問

  1. 各セグメントの切片と勾配を簡単に計算するにはどうすればよいですか?これを1回の計算で実行するためにモデルをreparemetrizedできますか?
  2. 各セグメントの各勾配の標準誤差を計算する方法は?
  3. 2つの隣接する勾配が同じ勾配を持っているかどうか(つまり、ブレークポイントを省略できるかどうか)をテストする方法は?

回答:


7
  1. 各セグメントの切片と勾配を簡単に計算するにはどうすればよいですか?

各セグメントの傾きは、現在の位置までのすべての係数を単純に加算することによって計算されます。したがって、での勾配推定値は です。1.1003 + 1.3760 = 0.2757x=151.1003+1.3760=0.2757

切片は少し難しいですが、係数の線形結合です(ノットを含む)。

この例では、2番目の線が最初の線とで出会うため、赤い点はの最初の線にあります。2番目の線は勾配のポイントを通過するため、その切片はです。もちろん、これらのステップをまとめることができ、2番目のセグメントの切片まで単純化されます=。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

これを1回の計算で実行するようにモデルを再パラメーター化できますか?

ええ、そうですが、モデルからそれを計算するだけの方がおそらく一般的には簡単でしょう。

2.各セグメントの各勾配の標準誤差を計算する方法は?

推定は回帰係数線形結合でありは1と0で構成されているため、分散は です。標準誤差は、分散と共分散の項の合計の平方根です。aβ^aaVar(β^)a

たとえば、あなたの例では、2番目のセグメントの勾配の標準誤差は次のとおりです。

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. 2つの隣接する勾配が同じ勾配を持っているかどうか(つまり、ブレークポイントを省略できるかどうか)をテストするにはどうすればよいですか?

これは、そのセグメントの表の係数を調べることによってテストされます。この行を参照してください:

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

それが9.6 での傾き変化です。その変化が0と異なる場合、2つの勾配は同じではありません。したがって、2番目のセグメントが最初のセグメントと同じ勾配を持つ検定のp値は、その線の終わりにあります。


(+1)グレン、回答ありがとうございます。#2に関してだけで一つの小さな質問:私の例では、私はの分散共分散行列が必要になるxI(pmax(x-9.6,0))、それが正しいのですか?
COOLSerdash 2013年

いいえ。私はあなたの例に基づいて明示的な例を編集しました。詳しくはお問い合わせください。
Glen_b-2013

編集をありがとう、それは私にとってそれをかなり明確にします。だから私はそれを正しく理解していますか?標準誤差は各勾配で同じですか?
COOLSerdash 2013年

1
いいえ。手順は同じですが、値は異なります。最初のセグメントの傾きの標準誤差は、回帰表(0.1788)にあります。2番目のセグメントの勾配の標準誤差は0.1160です。3番目のセグメントがある場合、(平方根をとる前に)その合計に分散共分散項が多く含まれます。
Glen_b-2013

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 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.