1

パッケージの助けを借りて、データに 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)

これにより、1つのブレークポイントの結果が得られます: ここに画像の説明を入力

-しかし、設定した場合2<K<8(間違った値...)、正しい数のブレークポイントを検出できます:

ここに画像の説明を入力

- そして、私を困惑させる最後のポイント:

K=4 に設定すると、display=T オプションは 3 つのブレークポイントを含む結果を表示しますが、関数の出力にはまだ 2 つのブレークポイントがあります...

ここに画像の説明を入力

******2016 年 9 月 19 日の編集*******

psiブレークポイントの場所にいくつかの事前情報があるため(ただし、それは私の目標ではありません)、直接指定してみましたが、結果はまだ非常に悪いsegmentedです...

一部の回帰では、アルゴリズムが成功して解決策が得られるまで、何度も関数を実行する必要がありました。また、提案された解決策にはしばしば再現性の問題があります...

これらのブレークポイントを確実に推定する方法を知っている人はいますか? 私のデータを当てはめるのはそれほど難しくないようですね。

4

0 に答える 0