快捷搜索:  汽车  科技

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)High-degree polynomials allow us to capture complicated nonlinear relationships in the data but are therefore more likely to overfit the training set.之前在机器学习的文章中有给大家写过拟合,我们做多次项拟合的时候,按道理你可以将项的次数调得很高,总是可以近乎完美的拟合我们的复杂的非线性关系,但是问题就是外推性就没有了,这也并不是我们想看到的结果:拟合出来的一般模型表达式如下:而且通常情况下,模型中所有的低次项都不应该被略去。就是我有了4次项,那么应该3,2,1次项都应该有。含有二次及以上的模型就叫多项式回归模型。

之前的文章中都是给大家写的变量间线性关系的做法,包括回归和广义线性回归,变量间的非线性关系其实是很常见的,今天给大家写写如何拟合论文中常见的非线性关系。包括多项式回归Polynomial regression和样条回归Spline regression。

多项式回归

首先看一个二次项拟合的例子,我现在想探讨苹果内容物apple content和苹果酸度cider acidity的关系,第一步应该是做出apple content和cider acidity关系的散点图,假如是下图:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(1)

那么我很直观地可以看出来,曲线(二次)对数据的拟合明显是好于线性拟合的。

上面的只是一个2次项拟合的例子,我们其实经常会遇到有可能高次式会把数据拟合的更好,社科论文中其实也常常见到做高次回归的,常见的1次,2次,3次,4次项英文论文中的表达,曲线形状如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(2)

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(3)

拟合出来的一般模型表达式如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(4)

而且通常情况下,模型中所有的低次项都不应该被略去。就是我有了4次项,那么应该3,2,1次项都应该有。

含有二次及以上的模型就叫多项式回归模型。

样条回归

之前在机器学习的文章中有给大家写过拟合,我们做多次项拟合的时候,按道理你可以将项的次数调得很高,总是可以近乎完美的拟合我们的复杂的非线性关系,但是问题就是外推性就没有了,这也并不是我们想看到的结果:

High-degree polynomials allow us to capture complicated nonlinear relationships in the data but are therefore more likely to overfit the training set.

还有就是自变量和因变量之间的关系在自变量的不同取值范围也并非不变的,比如某个区间是线性的,某个区间是2次曲线,某个区间又成了3次曲线。

上面两个问题处理方法之一就是样条splines

所谓样条就是成片段的多次式,一个曲线分多段拟合,段与段之间的分割点叫做结knots

A spline is a piecewise polynomial function. This means it splits the predictor variable into regions and fits a separate polynomial within each region which regions connect to each other via knots.

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(5)

上图便是用两个结将我们的曲线分成了3个样条。

通过对关系曲线的划分,我们可以尽可能达到既拟合的好,又好解释的目的

我们在论文中还会有看到说限制性立方样条(restricted cubic splines),这个又是个啥呢?

就是我们正常做样条,有可能做出来就是这样的:虽然分段但是不连贯:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(6)

这样的情况下结点处,不连贯的地方解释起来就会很困难了嘛。

所以,我们更加期望能够得到一个平滑的曲线(增加可解释性),而且首尾都应该是线性的,从而保证预测准确性(减少过拟合的影响),像这样:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(7)

为了得到这么样的效果我们就会给样条加上限制,所以叫做限制性立方样条:

restrictions need to be imposed so that the spline is continuous (i.e. there is no gap in the spline curve) and “smooth” at each knot。A restricted cubic spline has the additional property that the curve is linear before the first knot and after the last knot.

样条数量的确定和结位置的选择也是有讲究的,结的个数可以自己定,但是一般不超过5个;结的位置需要尽可能在拐弯的地方

The number of knots used in the spline is determined by the user but in practice we have found that generally five or fewer knots are sufficient. The location of the knots also needs to be specified by the user but it is common that the knot with the smallest value is relatively close to the smallest value of the variable being modelled (e.g. the 5th percentile) while the largest knot is in the neighbourhood of the largest value of the variable being modelled (e.g. the 95th percentile).

广义可加模型

上面写的内容,无论是直接拟合,还是分段拟合,我们都是在拟合一个完整的曲线或直线方程,广义可加模型则是将自变量的单独模型相加,下图式子即为一般线性模型和可加模型:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(8)

我们看下图,下图中对于x和y关系的拟合是通过x的3个基础函数相加得到的:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(9)

GAMs automatically learn a nonlinear relationship between each predictor variable and the outcome variable and then add these effects together linearly along with the intercept.

就是说广义可加的原理就是,先弄几个好解释的基础函数,这个基础函数可以是一次的,也可以是多次的,然后再将这些基础函数进行线性组合,从而达到更好地拟合数据的目的

通过广义可加模型可以同时实现模型的可解释性Interpretability,灵活性flexibility和正则化regularization。

怎么理解呢,我们先看可解释性,假如一个可加模型是如下形式的基础函数相加得到的:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(10)

x2的作用我们就可以解释为在其它变量不变的情况下,x2和结局之间的关系是线性的,xp对左边的结局在某个点之前也基本是线性增加的,然乎某个点之后xp对结局就无影响了,这个就是将模型相加后才可能实现的解释性。

灵活性在于,可加模型可以将所有自变量单独建模后相加,我们甚至不需要提前知道xy的关系,完全由数据说话的非参数形式,就比整体的多项式和样条更灵活。

正则化则可以避免过拟合,可加模型是有一个超参λ的,这个超参决定了曲线的歪扭程度,英文叫做wiggliness,通过对超参的控制就可以很方便地实现方差偏差折中,见下图:

The level of smoothness is determined by the smoothing parameter which we denote by λ. The higher the value of λ the smoother the curve

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(11)

当然还有一个问题就是我到底该用多少个基础函数呢?基础函数越多模型就可以越灵活。见下图,这个大家在具体操作的时候也是可以自己设定的:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(12)

实例操练

我现在手上有如下数据

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(13)

我想探究medv和lstat之间的关系,先做个图:

ggplot(train.data aes(lstat medv) ) geom_point() stat_smooth()

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(14)

可以看到这两个变量间是非常明显的非线性关系,此时我们需要考虑给自变量加上多次项拟合。

在R语言中我们可以使用I()来加上变量的高次项,比如我要加二次项,我就可以写出I(x^2)

lm(medv ~ lstat I(lstat^2) data = train.data)

模型结果如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(15)

上面就是多次项回归的做法,接下来给大家写写如何做样条回归

刚刚有写我们做样条的时候是需要设定结的,比如我就设定自变量的第25,50,75百分位为结:

knots <- quantile(train.data$lstat p = c(0.25 0.5 0.75))

做一个立方样条回归(默认就是做立方样条),代码如下:

model <- lm (medv ~ bs(lstat knots = knots) data = train.data)

模型输出结果如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(16)

我们接着看广义可加模型的R语言做法,我手上有数据如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(17)

我现在想弄明白x3与y的关系,但是假如我现在已经知道,x1和x2与y的关系为非线性的,我们是不是要把这个非线性关系控制掉来看我们x3和y的关系呀。所以我们跑一个可加模型来瞅瞅:

b1 <- gam(y ~ s(x1 bs='ps' sp=0.6) s(x2 bs='ps' sp=0.6) x3 data = dat) summary(b1)

上面的代码中bs设定平滑方法,sp设定λ。

运行上面的代码后得到结果如下:

r语言逻辑回归模型自变量选取原则(变量间的非线性关系)(18)

就是说在控制了x1和x2的曲线效应后,我们x3对y其实是没有影响的。

小结

今天给大家写了多项式回归,样条回归和可加模型,希望能给到大家以启发,感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,有疑问欢迎私信。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、模型构建 科研统计设计等发愁,如果你在使用SPSS R,Python,Mplus Excel中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。

If you are a student and you are worried about you statistical #Assignments #Data #Analysis #Thesis #Reports #Composing #Quizzes Exams.. And if you are facing problem in #SPSS #R-Programming #Excel Mplus then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test t-test ANOVA MANOVA Regression Logistic Regression Chi-Square Correlation Association SEM multilevel model mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

加油吧,打工人!

往期精彩

R数据分析:用R语言做潜类别分析LCA

R数据分析:贝叶斯定理的R语言模拟

R数据分析:什么是人群归因分数Population Attributable Fraction

R语言:利用caret的dummyVars函数设置虚拟变量

R数据分析:倾向性评分匹配完整实例(R实现)

R数据分析:有调节的中介

R数据分析:如何用R做验证性因子分析及画图,实例操练

R数据分析:如何用R做多重插补,实例操练

R文本挖掘:中文词云生成,以2021新年贺词为例

R文本挖掘:中文文本聚类

R数据分析:临床预测模型的样本量探讨及R实现

R数据分析:多分类逻辑回归

R数据分析:列线图的做法及解释

R数据分析:混合效应模型实例

R数据分析:随机截距交叉滞后RI-CLPM与传统交叉滞后CLPM

R数据分析:生存分析的做法与解释续

R数据分析:多水平模型详细说明

R数据分析:如何做潜在剖面分析Mplus

R数据分析:竞争风险模型的做法和解释二

R数据分析:多元逻辑斯蒂回归的做法

R数据分析:探索性因子分析

R数据分析:层次聚类实操和解析,一看就会哦

R数据分析:交叉滞后模型非专业解释

R数据分析:潜在剖面分析LPA的做法与解释

R数据分析:中介作用与调节作用的分析与解释

R数据分析:非专业解说潜变量增长模型

R数据分析:双分类变量的交互作用作图

R数据分析:如何给结构方程画路径图,tidySEM包详解

R数据分析:潜增长模型LGM的做法和解释,及其与混合模型对比

R数据分析:结构方程模型画图以及模型比较,实例操练

R数据分析:混合效应模型的可视化解释,再不懂就真没办法

R数据分析:结构方程模型的分组比较,实例解析

R数据分析:工具变量回归与孟德尔随机化,实例解析

R数据分析:潜类别轨迹模型LCTM的做法,实例解析

R数据分析:如何用层次聚类分析做“症状群”,实例操练

猜您喜欢: