百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

R数据分析:变量间的非线性关系,多项式,样条回归和可加模型

cac55 2024-10-12 02:28 36 浏览 0 评论

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

多项式回归

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


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

上面的只是一个2次项拟合的例子,我们其实经常会遇到有可能高次式会把数据拟合的更好,社科论文中其实也常常见到做高次回归的,常见的1次,2次,3次,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.


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

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

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

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

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

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


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

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).

广义可加模型

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

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

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。

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

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


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

实例操练

我现在手上有如下数据

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

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


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

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

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

模型结果如下:


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

刚刚有写我们做样条的时候是需要设定结的,比如我就设定自变量的第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语言做法,我手上有数据如下:

我现在想弄明白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设定λ。

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

就是说在控制了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数据分析:如何用层次聚类分析做“症状群”,实例操练

相关推荐

电工电路图中二极管、三极管的符号标识

1、二极管二极管是一种常用的具有一个PN结的半导体器件,它具有单向导电性,通过二极管的电流只能沿一个方向流动。二极管只有在所加的正向电压达到一定值后才能导通。在电工电路图中,二极管以专用的图形符号和电...

开关部件在电工电路中的符号标识

1、在电工电路中还常常绘制有具有专门含义的图形符号,认识这些符号对于快速和准确理解电路图十分必要。在识读电工电路的过程中,还常常会遇到各种各样的功能部件的图形符号,用于标识其所代表的物理部件,例如各种...

走过路过 别错过!整理最全电工电路各种元器件及辅料字母符号解析

走过路过别错过!整理最全电工电路各种元器件及辅料字母符号解析建议收藏备用起来以备不时之需!每天学习一点点就会有收获!...

熬夜吐血整理的电工电路的字母符号!及各种元器件实物图解符号!

熬夜吐血整理的电工电路的字母符号!及各种元器件实物图解符号!...

电气人士接好了!史上最全的电气符号介绍

有没有人像小编一样看到这样的图纸就犯晕啊?像这样的图纸对于电气人士来说应该不陌生吧,可是对于一些刚入行的,或者在电气行业却不是技术岗位的人来说,那与天书没什么区别。今天小编狠狠心,为大家搜集了一些关于...

新手工程师,这些电路图符号你都了解吗?

以下电路图符号大全,千万别弄错了噢~~更多行业信息可查阅快点PCB平台订阅号:eqpcb_cp。...

电工学习通(一):电路图符号知识大全(安科瑞任心怡、许玉龙)

电路图符号知识我们常说的电路图呢是一种以物理电学标准符号来绘制各MOS管电子元器件组成和关系的电路原理布局图,听不懂也没关系,我们只要记住以下几点就可以了:电路图符号数量众多,大致可以分为四个类别:传...

常用电子元器件电路符号及实物外形图,你值得拥有

作为一名电工初学者,认识并了解常用的电子元器件是一项必备的基本技能,这包括电子元器件的电路符号、实物、用途等。本文电工学习网小编和大家分享一些电子元器件的电路符号及实物外形图,希望对大家的学习有所帮助...

电工常用的符号及单位

常用的符号及单位①欧姆定律I=U/R(适用于电阻电路,如白炽灯)②电能计算W=P·t(W为我们常说的电度,P为功率多少瓦或千瓦,t为时间小时计量)例如一个220V,60W的白炽灯,在220V电压工...

电路图常用的字母符号及释义(详细版!)

你是不是在查看电路图时常遇到一些看不懂的字母或字符,不明白它们表示什么含义?今天小编整理了一些电路图常用的字母符号及其释义,供大家查阅,赶快收藏吧!在之前的文章,小编大致整理了绘制电路图常涉及的电路符...

最全电工电路的字母符号大全!电工必备知识技能!建议收藏备用

最全电工电路的字母符号大全!电工必备知识技能!建议收藏备用!每天学习一点点就会有收获!学海无涯!...

电路符号大全,赶快收藏

认识电路符号是绘制电路图的前提。绘制电路图需要涉及的电路符号罗列出来有很多,大致可以分为五个类别:基本电路符号、传输路径符号、开关和继电器符号、集成电路组件以及限定符号。基本电路符号绘制基础电路图可能...

电气电路的图形符号,不怕看不懂电路图啦

一、电压、电流、电池的图形符号//二、信号灯、信号器件、按钮、旋钮开关和测量仪表的图形符号//三、负载开关的图形符号//四、熔断器的图形符号//五、继电器、接触器、接触器触点和操作器件的图形符号//六...

图解普通电阻器电路符号的含义,初学者必看

电子元器件的电路符号中含有许多有用的、对电路分析有益的识图信息,掌握了电子元器件电路符号的识图,电路分析就会简单一些。电阻器电路符号图1-1所示是普通电阻器电路符号图解示意图。在电路分析中,为了表述方...

电路图符号大全(电容、电阻、二极管、三极官、集成电路)

基础知识薄弱,不懂工作原理,不会看图、识图,这里更多电路图(原理图)符号大全、电路图形符号(指用一种书画图形代表一种电子元件)(比如:电容、电阻、二极管、三极官、集成电路等等)的符号为初学...

取消回复欢迎 发表评论: