我一直在玩 R 中的包strucchange
(在某种程度上segmented
)。我试图确定线性回归中的斜率是否有变化,更重要的是,有多少断点。玩具数据集:
x <- c(0, 5, 10, 15, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80)
y <- c(-84.16, -86.67, -87.74, -86.07, -89.15, -91.90, -93.64, -95.92,
-95.96, -99.19, -100.73, -107.29, -106.10, -107.29)
第一个问题:如果我使用断点函数:
breakpoints(y ~ x, data = data.frame(x, y))
我收到以下错误:
Error in breakpoints.formula(y ~ x, data = data.frame(x, y)) :
minimum segment size must be greater than the number of regressors
我认为出现这种情况是因为断点命令中的默认 h 参数是 0.15 和 14(我拥有的观察数)* 0.15 = 2.1,向下舍入不大于 2(“回归量”:顺便说一下,我考虑到我的公式,我会认为回归变量的数量为 1,但我从其他工作示例中了解到y ~ x
在这些情况下 nreg = 2。我猜截距算作回归变量?)。
如果我将 h 设置为 3 或某个分数,例如 14 * h >= 3,则该命令有效。
breakpoints(y ~ x, data = data.frame(x, y), h = 3)
返回两个断点。但结果对 h 很敏感。这样,如果我使用:
breakpoints(y ~ x, data = data.frame(x, y), h = 4)
我得到了不同的解决方案。在后一种情况下,可以找到单个最佳中断,因为可以调用中断之前的最小观察次数更高。有没有办法以某种方式确定一个解决方案是否比另一个解决方案有更多的支持?换句话说,如何最好地优化断点的位置而不是断点的数量(可能跨越 h 的值)?我认为 Fstats 命令可能是关键,但我在理解此命令的帮助时遇到了很多麻烦......