问候,
我正在进行研究,这将有助于确定观察到的空间的大小以及自大爆炸以来经过的时间。希望您能提供帮助!
我有符合分段线性函数的数据,我想对其执行两个线性回归。有一个斜率和截距发生变化的点,我需要(编写一个程序来)找到这个点。
想法?
问候,
我正在进行研究,这将有助于确定观察到的空间的大小以及自大爆炸以来经过的时间。希望您能提供帮助!
我有符合分段线性函数的数据,我想对其执行两个线性回归。有一个斜率和截距发生变化的点,我需要(编写一个程序来)找到这个点。
想法?
R 包结构可能会对您有所帮助。看看小插图,它很好地概述了如何解决类似的问题。
如果点数不是太大,你可以尝试所有的可能性。让我们假设点是在哪里. 比,你可以循环使用从到并适合两条线和. 最后,你选两条线的残差平方和之和最小。
这是一个(离线)变化点检测问题。我们之前的讨论提供了对期刊文章和 R 代码的参考。首先看一下Barry 和 Hartigan的“产品划分模型”,因为它可以处理斜率的变化并且有高效的实现。
mcp
包可以做到这一点。说你的数据是
首先,让我们模拟一些数据:
df = data.frame(x = 1:100,
y = c(rnorm(40, 10 + (1:40)*0.5),
rnorm(60, 10 + 40*0.5 -8 + (1:60)*0.2)))
现在让我们看看我们是否可以使用以下方法恢复 40 处的变化点(和参数值)mcp
:
model = list(
y ~ 1 + x, # linear segment
~ 1 + x # another linear segment
)
library(mcp)
fit = mcp(model, df)
绘制它。灰线是从拟合中随机抽取的,表明它捕捉到了趋势。蓝色曲线是估计的变化点位置:
让我们看看各个参数估计值。int_
是截距,x_
是 x 上的斜率,cp_
是变化点:
summary(fit)
Population-level parameters:
name mean lower upper Rhat n.eff
cp_1 40.48 40.02 41.00 1 2888
int_1 11.12 9.11 13.17 1 778
int_2 21.72 20.09 23.49 1 717
sigma_1 3.23 2.76 3.69 1 5343
x_1 0.46 0.36 0.54 1 724
x_2 0.21 0.16 0.26 1 754
免责声明:我是mcp
.