当两个变量有线性关系时,通常使用简单线性回归测定它们的关系。但变量间有二次关系时,应该使用二次回归进行拟合。本文介绍R如何实现二次回归。

示例

假设我们希望理解工作时长与幸福感之间的关系。现收集到下面数据集,包括每周工作时长以及调查反馈的幸福感(0~100):

#create data
data <- data.frame(hours=c(6, 9, 12, 14, 30, 35, 40, 47, 51, 55, 60),happiness=c(14, 28, 50, 70, 89, 94, 90, 75, 59, 44, 27))#view data
data#    hours happiness
# 1      6        14
# 2      9        28
# 3     12        50
# 4     14        70
# 5     30        89
# 6     35        94
# 7     40        90
# 8     47        75
# 9     51        59
# 10    55        44
# 11    60        27

首先我们利用散点图看下变量之间的关系:

plot(data$hours, data$happiness, pch=16)

上图明显看到变量之间不是线性关系。下面我们使用简单线性回归模型看下数据拟合情况:

# 拟合简单线性模型
linearModel <- lm(happiness ~ hours, data=data)# 查看模型概要信息
summary(linearModel)# Call:
# lm(formula = happiness ~ hours, data = data)
#
# Residuals:
#    Min     1Q Median     3Q    Max
# -39.34 -21.99  -2.03  23.50  35.11
#
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)
# (Intercept)  48.4531    17.3288   2.796   0.0208 *
# hours         0.2981     0.4599   0.648   0.5331
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 28.72 on 9 degrees of freedom
# Multiple R-squared:  0.0446,  Adjusted R-squared:  -0.06156
# F-statistic: 0.4201 on 1 and 9 DF,  p-value: 0.5331

通过Multiple R-squared: 0.0446表明模型仅能解释4.46%幸福感 。下面我们采用二次回归模型:

# 创建新的二次变量
data$hours2 <- data$hours^2# 拟合二次回归模型
quadraticModel <- lm(happiness ~ hours + hours2, data=data)# 查看模型概要信息
summary(quadraticModel)# Call:
# lm(formula = happiness ~ hours + hours2, data = data)
#
# Residuals:
#     Min      1Q  Median      3Q     Max
# -6.2484 -3.7429 -0.1812  1.1464 13.6678
#
# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)
# (Intercept) -18.25364    6.18507  -2.951   0.0184 *
# hours         6.74436    0.48551  13.891 6.98e-07 ***
# hours2       -0.10120    0.00746 -13.565 8.38e-07 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 6.218 on 8 degrees of freedom
# Multiple R-squared:  0.9602,  Adjusted R-squared:  0.9502
# F-statistic: 96.49 on 2 and 8 DF,  p-value: 2.51e-06

这次我们看到模型可以解释96.2%的幸福感方差。下面利用可视化方式查看模型拟合数据情况:

# 创建时长序列
hourValues <- seq(0, 60, 0.1)# 使用二次模型预测幸福感
happinessPredict <- predict(quadraticModel, list(hours=hourValues, hours2=hourValues^2))# 创建原始数据的散点图
plot(data$hours, data$happiness, pch=16)
# 基于二次回归增加预测线
lines(hourValues, happinessPredict, col='blue')

可以看到二次回归模型拟合效果非常好。我们再看看二次模型的输出信息:

Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept) -18.25364    6.18507  -2.951   0.0184 *
hours         6.74436    0.48551  13.891 6.98e-07 ***
hours2       -0.10120    0.00746 -13.565 8.38e-07 ***

基于上面的输出信息,二次回归模型应该为:

** Happiness = -0.1012(hours)2{^2}2 + 6.7444(hours) – 18.2536

我们可以利用这个方程基于每周工作时长来计算幸福感。

例如,一个每周工作60小时的人的幸福水平预计为22.09:
幸福= -0.1012(60)2{^2}2 + 6.7444(60)- 18.2536 = 22.09

相反,每周工作30小时的人的幸福水平预计为92.99:
幸福= -0.1012(30)2{^2}2 + 6.7444(30)- 18.2536 = 92.99

通过示例快速理解二次回归相关推荐

  1. 快速理解二十三种设计模式(速记)

    设计模式六大原则 单一职责原则(Single Responsibility Principle) 里氏替换原则(Liskov Substitution Principle) 依赖倒置原则(Depend ...

  2. android studio一个页面等待3秒跳转_Flutter 对 iOS、Android(双端开发者)的快速理解(二)

    原文链接 更多教程 Flutter怎么在不同页面之间跳转? 在 iOS 中,你可以使用管理了 view controller 栈的 UINavigationController 来在不同的 view ...

  3. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅

    TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...

  4. 网络编程懒人入门(二):快速理解网络通信协议(下篇)

    1.前言 本文上篇<网络编程懒人入门(一):快速理解网络通信协议(上篇)>分析了互联网的总体构思,从下至上,每一层协议的设计思想.基于知识连贯性的考虑,建议您先看完上篇后再来阅读本文. 本 ...

  5. 计算机网络资料篇(二)——快速理解网络协议

    <网络编程懒人入门(一):快速理解网络通信协议(上篇)> <网络编程懒人入门(二):快速理解网络通信协议(下篇)> 一:五层模型 物理层.数据链路层.网络层.传输层.应用层 1 ...

  6. OpenCV4.0 快速QR二维码检测测试示例

    点击我爱计算机视觉标星,更快获取CVML新技术 近几年由于微信大力推广移动支付,二维码已经成为手机App的标配,在众多种类的二维码中,QR码是最为流行的. 刚刚发布的OpenCV4.0-Alpha新增 ...

  7. 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)

    [经典算法实现 44]理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法) 一.二维FFTFFTFFT快速傅里叶变换 公式推导 二.二维FFTFFTFFT 及 IFFTIF ...

  8. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...

  9. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

最新文章

  1. Modesim 仿真 ERRO VSIM-19
  2. 【学习笔记】3、Jupyter Notebook无法打开问题处理
  3. linux常用命令:touch 命令
  4. Leetcode中学到的SQL函数汇总
  5. 全排列函数(next_permutation)
  6. SQLite 指南之FAQ(中文)
  7. 机器学习笔记(八):线性回归算法的评测标准 | 凌云时刻
  8. nodejs-基础:路由基础
  9. NISP第一讲信息安全和网络空间安全
  10. LabVIEW的VISA函数串口数据采集例子——温度采集系统
  11. 高级会计职称计算机考什么,高级会计师考试要考哪些科目
  12. 快速批量导出excel超链接
  13. 系统hosts文件进行域名解析
  14. 机器学习中的数学——拟牛顿法(Quasi-Newton Methods)
  15. Fortran:数组函数详解
  16. 阿里巴巴矢量图标库(网页)
  17. EMI滤波器的matlab仿真,开关电源EMI滤波器的仿真设计
  18. Java——super关键字
  19. ERROR 1630 (42000): FUNCTION a.avg does not exist. Check the ‘Function Name Parsing and Resolution‘
  20. 【转】史上最全的买卖股票技巧 总有一款适合你

热门文章

  1. 【win11】Thinkpad14+显示器分屏问题(display port dp口转type-c)
  2. 边缘云的技术发展与应用思考
  3. 资产配置那些事-常用理财工具2
  4. 城市公交查询系统的设计与实现
  5. 深圳内推 | 华为诺亚方舟实验室招聘计算机视觉算法研究员/实习生
  6. SVM(二):对偶算法、SMO算法
  7. 自然语言处理4——TF-IDF及特征提取
  8. matlab机器人 联合ug仿真
  9. Inpaint>>一款神奇的去水印工具
  10. Android手机之间实现屏幕共享