如何将断点索引导出到strucchange包中的向量?

时间:2011-12-01 16:47:19

标签: r

我正在使用 strucchange 包来确定我的曲线模型细分的位置。

我的代码如下所示:

l.fit <- loess(data$y~data$x)
px <- predict(l.fit,newdata=data$x)
bp <- breakpoints(px~1)

现在,bp的输出:

Optimal 6-segment partition: 

Call:
breakpoints.formula(formula = px ~ 1)

Breakpoints at observation number:
161 254 347 440 533 

Corresponding to breakdates:
0.2571885 0.4057508 0.5543131 0.7028754 0.8514377 

断裂是有点无用的,因为我的x比例从1到700左右。但断点本身正是我想要的,特别是最后一个,533。

如果我输入:

bp[1]

我明白了:

$breakpoints
[1] 161 254 347 440 533

但如果我尝试将bp[1]分配给新的向量,我什么也得不到。无论如何我可以隔离最后一个断点,即533,并将其分配给一个变量,这样我就可以在断点处绘制一条垂直线?我需要为几百个数据集执行此操作,因此能够隔离断点将非常有用。

谢谢!

2 个答案:

答案 0 :(得分:4)

[提取不会下降到最简单的形式,因此它仍然是一个列表。使用[[$提取来获取数字向量。

bps <- bp[[1]]

bps <- bp$breakpoints

要获得最后一个,你需要计算它的长度并选择最后一个,或者反转它并选择第一个:

bps[length(bps)]

rev(bps)[1]

答案 1 :(得分:0)

我不知道你是否对R这么新,你认为执行这段代码会产生任何控制台输出:

vec <- bp[1]

如果您现在输入以下内容会发生什么:

vec

您应该使用bp [[“breakpoints”]] [5]或bp $ breakpoints [5]来获取最后一个断点。然后,您可以将其用作数据$ x的索引:

 data$x[ bp$breakpoints[5] ]

如果你“以编程方式”这样做,那么使用[[“引用名称”]]版本的访问可能会更安全,因为$ version有一些不太重要的问题。