【发布时间】:2017-04-05 18:04:09
【问题描述】:
这是我第一次使用结构,所以请多多包涵。我遇到的问题似乎是 strucchange 无法正确识别我的时间序列,但我不知道为什么,也没有在处理这个问题的板上找到答案。这是一个可重现的示例:
require(strucchange)
# time series
nmreprosuccess <- c(0,0.50,NA,0.,NA,0.5,NA,0.50,0.375,0.53,0.846,0.44,1.0,0.285,
0.75,1,0.4,0.916,1,0.769,0.357)
dat.ts <- ts(nmreprosuccess, frequency=1, start=c(1996,1))
str(dat.ts)
从 1996 年到 2016 年的时间序列 [1:21]:0 0.5 NA 0 NA 0.5 NA 0.5 0.375 0.53 ...
对我来说,这意味着时间序列看起来可以使用。
# obtain breakpoints
bp.NMSuccess <- breakpoints(dat.ts~1)
summary(bp.NMSuccess)
这给出了:
Optimal (m+1)-segment partition:
Call:
breakpoints.formula(formula = dat.ts ~ 1)
Breakpoints at observation number:
m = 1 6
m = 2 3 7
m = 3 3 14 16
m = 4 3 7 14 16
m = 5 3 7 10 14 16
m = 6 3 7 10 12 14 16
m = 7 3 5 7 10 12 14 16
Corresponding to breakdates:
m = 1 0.333333333333333
m = 2 0.166666666666667 0.388888888888889
m = 3 0.166666666666667
m = 4 0.166666666666667 0.388888888888889
m = 5 0.166666666666667 0.388888888888889 0.555555555555556
m = 6 0.166666666666667 0.388888888888889 0.555555555555556 0.666666666666667
m = 7 0.166666666666667 0.277777777777778 0.388888888888889 0.555555555555556 0.666666666666667
m = 1
m = 2
m = 3 0.777777777777778 0.888888888888889
m = 4 0.777777777777778 0.888888888888889
m = 5 0.777777777777778 0.888888888888889
m = 6 0.777777777777778 0.888888888888889
m = 7 0.777777777777778 0.888888888888889
Fit:
m 0 1 2 3 4 5 6 7
RSS 1.6986 1.1253 0.9733 0.8984 0.7984 0.7581 0.7248 0.7226
BIC 14.3728 12.7421 15.9099 20.2490 23.9062 28.7555 33.7276 39.4522
这就是我开始遇到问题的地方。它报告的不是实际的中断日期,而是数字,因此无法将中断线绘制到图表上,因为它们不在中断日期(2002 年),而是在 0.333。
plot.ts(dat.ts, main="Natural Mating")
lines(fitted(bp.NMSuccess, breaks = 1), col = 4, lwd = 1.5)
这张图表中没有任何东西显示出来(我想是因为它对于图表的比例来说太小了)。
此外,当我尝试可能解决此问题的修复程序时,
fm1 <- lm(dat.ts ~ breakfactor(bp.NMSuccess, breaks = 1))
我明白了:
Error in model.frame.default(formula = dat.ts ~ breakfactor(bp.NMSuccess, :
variable lengths differ (found for 'breakfactor(bp.NMSuccess, breaks = 1)')
由于数据中的 NA 值,我收到错误,因此 dat.ts 的长度为 21,breakfactor(bp.NMSuccess, breaks = 1) 的长度为 18(缺少 3 个 NA)。
有什么建议吗?
【问题讨论】:
-
关于如何使用 R 代码/错误消息的问题通常不在此处讨论。我认为这应该是 Stack Overflow 的主题,所以如果您等待,我们将尝试将其迁移到那里。
-
问题是回归需要省略的 NA,但 ts() 不再能够表示时间索引。你将不得不解决这个问题......让我们等到问题被迁移到 SO 然后我会在那里回答。
-
@Achim Zeileis 好的,谢谢!
标签: r time-series