我试图在R中进行分段线性OLS回归分析,只有一个断点。我有以下回归公式和限制:
D是假人。我想施加一个限制,以便回归线是连续的(有一个断点)。以下限制可行。
我的问题是,如何在R中的lm() - 函数中表达?我以前曾尝试过"分段"包,但我需要在回归摘要中解释两行的截距。
我在下面提供了一些数据。此处的断点为0,因此对于x> = 0,d
为1。
x y d
1 4.3047451 11.2660463 1
2 7.0062423 -3.2897982 1
3 2.7862009 -2.8232636 1
4 -0.8662964 0.4051925 0
5 -0.9553261 -0.9228929 0
6 -1.6626654 3.5044546 0
7 3.4906905 1.4961349 1
8 -0.7072658 -0.2758436 0
9 -7.0054069 -1.3041742 0
10 -2.2510701 -0.1848814 0
11 -13.3617905 -0.2113756 0
12 4.1001251 0.2845748 1
13 -4.6575944 -1.1603290 0
14 5.2243857 3.8324236 1
15 3.5003320 -2.3672985 1
16 -13.2623113 -7.1593177 0
17 -1.7944354 -2.1725478 0
18 0.5885924 -0.2411048 1
19 -19.3744936 -0.1982088 0
20 -17.9876978 -1.5995063 0
修改
我添加了一个我想要执行的图形表示。重要的是2条拟合线在阈值处相遇,并且我可以获得4个系数。 2个alphas和2个beta。
答案 0 :(得分:0)
由于断点是x = 0,我们得到a = a2,所以:
nls( y ~ (x < 0) * (a + b * x) + (x > 0) * (a + b2 * x), dat,
start = list(a = 1, b = 1, b2 = 1))
或使用lm
lm(y ~ I(x * (x < 0)) + I(x * (x > 0)), dat)
一般来说,如果B是断点:
B <- 0
nls( y ~ (x < B) * (a + b * (x - B)) + (x > B) * (a + b2 * (x - B)), dat,
start = list(a = 1, b = 1, b2 = 1))
B <- 0
lm(y ~ I((x - B) * (x < B)) + I((x - B) * (x > B)), dat)
答案 1 :(得分:0)
这不是一个答案,而是一个无法在评论部分编辑的评论,因为它需要一个图像是可以理解的。
事实上,我无法理解你的数据:当在笛卡尔图(下图)上表示时,这些点看起来非常分散。它看起来不像是一个分段函数。我错过了什么?
顺便说一句,如果这些点与由两个倾斜段组成的分段函数相距太远,则有一种非常简单的拟合方法。请参阅本文第12-13页:https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf