为什么做分段函数
在线性回归模型中,当X作为特征变量对因变量Y的影响趋势非线性,用普通的线性回归往往无法捕捉到。
一种方法是可以使用特征变量的多项式作为预测变量,可以得到在X取值的空间全局皆非线性的拟合函数。
但如果不希望得到全局的模型,希望每一段的变化斜率可以被表达出来,那么则可以使用分段函数。
如何做分段函数
这里,把X的取值范围分成一些区间,对每个区间拟合一个函数,相当于讲一个连续变量转换成多个有序的变量。
在X取值空间上创建分割点C1,C2,...,Ck,构造k+1个新变量如下(在R的实现)Rcode如下
x<-c(1:100)
y<-log(x)
#线性模型拟合
linear_fit<-lm(y~x)
#分段拟合:5、10、20、50作为分割点
stage_fit<-lm (y~ I(x<=5) + I((x<=5)*x)
+ I(x>5 & x<=10) + I((x>5 & x<=10)*x)
+ I(x>10 & x<=20) + I((x>10 & x<=20)*x)
+ I(x>20 & x<=50) + I((x>20 & x<=50)*x)
+ I(x>50) + I((x>50)*x))
summary(stage_fit)
qplot(x,y)+geom_line(aes(x, fitted.values(linear_fit)),colour=2)+geom_line(aes(x, fitted.values(stage_fit)),colour=3)
其中,
是示性函数,条件成立返回1否则0。这样的定义的变量有时候也可称为哑变量。要带上数值可以进一步调整运算
需要注意的是,如果想要分段拟合的效果好,必须考虑每段回归的截距不同,所以在每段回归需要加上相应的示性函数
暂无数据