パッケージの助けを借りて、データに 3 個の回帰を当てはめようとしていますがsegmented
、少し迷っています...
最初:ここに再現可能な例があります:
y=c(520.0000, 620.0000, 653.3333, 853.3333, 1220.0000, 1553.3333, 1586.6667, 1586.6667, 1586.6667, 1586.6667, 1586.6667)
x=c(33320, 41020, 49020, 56920, 69220, 76320, 86320, 95420, 103720, 111520, 120320)
plot(y~x)
out=lm(y~x)
2 つの目に見えるブレークポイントを持つ私のデータ:
- まず、既知のブレークポイント数を K=2 で指定してみました:
mdl2=segmented(out, seg.Z =~x, psi=NA, control=seg.control(K=2,n.boot=0,it.max=500,stop.if.error=FALSE,display=T))
plot(mdl2)
points(y~x)
-しかし、設定した場合2<K<8
(間違った値...)、正しい数のブレークポイントを検出できます:
- そして、私を困惑させる最後のポイント:
K=4 に設定すると、display=T オプションは 3 つのブレークポイントを含む結果を表示しますが、関数の出力にはまだ 2 つのブレークポイントがあります...
******2016 年 9 月 19 日の編集*******
psi
ブレークポイントの場所にいくつかの事前情報があるため(ただし、それは私の目標ではありません)、直接指定してみましたが、結果はまだ非常に悪いsegmented
です...
一部の回帰では、アルゴリズムが成功して解決策が得られるまで、何度も関数を実行する必要がありました。また、提案された解決策にはしばしば再現性の問題があります...
これらのブレークポイントを確実に推定する方法を知っている人はいますか? 私のデータを当てはめるのはそれほど難しくないようですね。