R数据分析:如何做数据的非线性关系,多项式回归的做法和解释
线性关系其实是最常见也是最有效,同时还是最好解释的,不过变量间复杂的关系我们用多项式回归做出来可能会更加的准确。刚好有位粉丝的数据需要用到多项式回归,今天就给大家写写。
要理解非线性关系,首先我们看看线性关系,假设情况如下:商品的价格为p,销售量为q,总价为y,那么qy之间就是线性关系:
p <- 0.5
q <- seq(0,100,1)
y <- p*q
plot(q,y,type='l',col='red',main='线性关系')
但是考虑现实中的情况:一个商品本来价格p是0.5,买的人多了价格会上涨,此时线性关系不成了哦:
y <- 450 + p*(q-10)^3
plot(q,y,type='l',col='navy',main='Nonlinear relationship',lwd=3)
如果你得数据确实不是线性关系,就得考虑数据转化或者拟合多项式回归。
数据模拟
为了更好地给大家演示,我们需要模拟一个数据集出来:
q <- seq(from=0, to=20, by=0.1)
y <- 500 + 0.4 * (q-10)^3
noise <- rnorm(length(q), mean=10, sd=80)
noisy.y <- y + noise
上面的代码首先模拟200个销售量,和相应的总价y,同时还给y加了一点点噪声。
我们把模拟数据画出来瞅瞅:
plot(q,noisy.y,col='deepskyblue4',xlab='q',main='Observed data')
lines(q,y,col='firebrick1',lwd=3)
注意我们用lines这个方法给数据串了一条趋势线,可以很明显的看出来我们的数据不是线性关系。
多项式回归
那么对于我们的数据我可以做如下的多项式回归:
model <- lm(noisy.y ~ poly(q,3))
model <- lm(noisy.y ~ x + I(X^2) + I(X^3))
上面两种方法都是一个道理,但是第一种可以很好的避免多重共线性问题,你想嘛,x的平方和x的三次方肯定高度相关啊。所以大家用第一种方法哦,输出结果如下:
上面的结果中没有系数的置信区间,我们可以:
confint(model, level=0.95)
我么还可以画出来模型的残差图:
plot(fitted(model),residuals(model))
总的来说,我们的模型的R方为0.77,q的一次项和3次项都是有统计学意义的,模型还不错。
是不是可以用这个模型做预测呢?
这又涉及到机器学习了,往下看:
我们可以用训练的这个模型来预测我们的原始数据:
predicted.intervals <- predict(model,data.frame(x=q),interval='confidence',level=0.99)
你去查看predicted.intervals的值,你可以看到我们200个数据的预测值和置信区间。
最好还是给大家可视化一下,我们打算把原始的趋势线和我们的置信区间的上下限都画在同一个图上:
lines(q,predicted.intervals[,1],col='green',lwd=3)
lines(q,predicted.intervals[,2],col='black',lwd=1)
lines(q,predicted.intervals[,3],col='black',lwd=1)
可以看到上图中,我们的砖红色的线基本都在置信区间的上下限范围内,证明了模型不错。
R数据分析:如何做数据的非线性关系,多项式回归的做法和解释相关推荐
- 【R语言 | 如何计算测序数据微生物种类的生态位宽度?如何解释结果】
R语言 | 如何计算测序数据微生物种类的生态位宽度?如何解释结果 参考见https://mp.weixin.qq.com/s/MAk7cEQNwUKCKRZ-6xFhbQ(通往学术之路公众号) 参考见 ...
- R数据分析:变量间的非线性关系,多项式,样条回归和可加模型
之前的文章中都是给大家写的变量间线性关系的做法,包括回归和广义线性回归,变量间的非线性关系其实是很常见的,今天给大家写写如何拟合论文中常见的非线性关系.包括多项式回归Polynomial regres ...
- R数据分析——安装,数据类型转换,向量
R数据分析 R中安装与使用包 卸载与移除包 基本数据类型(六种) 数据类型转换 运算符 R中的数据结构 向量 R中安装与使用包 R中的包存储在计算机上名为library的目录下 ✓ 使用函数libPa ...
- R数据分析:纵向数据如何做中介,交叉滞后中介模型介绍
看似小小的中介,废了我好多脑细胞,这个东西真的不简单,从7月份有人问我,我多重中介,到现在的纵向数据中介,从一般的回归做法,到结构方程框架下的路径分析法,到反事实框架做法,从中介变量和因变量到是连续变 ...
- R数据分析:跟随top期刊手把手教你做一个临床预测模型
临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...
- matlab做数据间方差,用matlab做方差比检验的问题
以下的这个程序是用来做方差比检验的m-file 大家看看有问题么 我跑出来的结果只有一个数,而我要得到两个数的,即同方差和异方差下的方差比 function [VR,Zk,Zhk]=vrt_full( ...
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- 带你和Python与R一起玩转数据科学: 探索性数据分析(附代码)
作者:Jose A Dianes 翻译:季洋 校对:丁楠雅 本文约5822字,建议阅读20+分钟. 本系列将介绍如何在现在工作中用两种最流行的开源平台玩转数据科学.先来看一看数据分析过程中的关键步骤 ...
- python与excel做数据可视化-python做可视化数据分析,究竟怎么样?
Python做可视化数据分析也是可以的,只是对比起来专业的可视化工具有些得不应手,做出来的图可能不太美观.Python用来处理数据,用来分析绝对可以.我觉得想要可视化可以使用专门的可视化工具. 不过, ...
最新文章
- Spring Boot 多模块项目实践(附打包方法)
- swiper动态加载数据左右切换失效
- 如果访问云服务器上的文件,如果访问云服务器上的文件
- springboot 物联网_Confluent Kafka,KSQL,Spring Boot和分布式SQL开发物联网实战
- BaseAdapter的抽取
- java azure blobs sas_使用 Java 的 Azure 存储示例 | Azure Docs
- 精心整理的十个必须要知道CSS+DIV技巧
- 全国计算机OFFICE二级考试大纲,全国计算机等级考试二级MSOffice高级应用考试大纲...
- php smarty key,php Smarty模版详解
- 多项式时间 P问题 NP问题
- 跨境支付与业务流程介绍
- [转]读《简约至上》有感 - 及我的支语片言
- 【Mac双系统设置系统默认启动系统】解决方案
- SLAM闲谈(一)--词袋模型
- win10显示未连接到网络,但是任然可以上网
- Vue-router中对path的误解和说明-path的正确理解。
- 2011年30家最能赚钱移动互联公司排行榜
- 接口文档解决方案:knife4j
- MOBI怎么转换成EPUB?试试这几个软件吧
- 前端人的前端CI/CD