具有约束的分段线性回归 - r

时间:2018-06-08 16:42:40

标签: r linear-regression dummy-variable piecewise

我试图在R中进行分段线性OLS回归分析,只有一个断点。我有以下回归公式和限制:regression formula

D是假人。我想施加一个限制,以便回归线是连续的(有一个断点)。以下限制可行。

restriction

我的问题是,如何在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。

enter image description here

2 个答案:

答案 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)

这不是一个答案,而是一个无法在评论部分编辑的评论,因为它需要一个图像是可以理解的。

事实上,我无法理解你的数据:当在笛卡尔图(下图)上表示时,这些点看起来非常分散。它看起来不像是一个分段函数。我错过了什么?

enter image description here

顺便说一句,如果这些点与由两个倾斜段组成的分段函数相距太远,则有一种非常简单的拟合方法。请参阅本文第12-13页:https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf