R语言进行线性回归的拟合度_r语言线性拟合_ianly梁炎的博客-程序员秘密

技术标签: 拟合度  R  笔记  R-squared  

R语言进行线性回归的拟合度。
本文只是使用 R做回归计算,查看拟合度等,不讨论 R 函数的内部公式

在R中线性回归分析的函数是lm(),基本语法是

一元回归: lm(y ~ x,data)
多元回归:lm(y ~ x1+x2+x3…,data)

创建关系模型并获取系数

x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)

# 使用lm()函数进行计算.
relation <- lm(y~x)

print(relation)

执行上面的代码,它产生以下结果

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
   -38.4551          0.6746

产生了一条线性方程式:

y = -38.4551 + 0.6746x

使用summary()函数,查看摘要

print(summary(relation))

结果如下:

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q     Median      3Q     Max 
-6.3002    -1.6629  0.0412    1.8944  3.9775 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -38.45509    8.04901  -4.778  0.00139 ** 
x             0.67461    0.05191  12.997 1.16e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.253 on 8 degrees of freedom
Multiple R-squared:  0.9548,    Adjusted R-squared:  0.9491 
F-statistic: 168.9 on 1 and 8 DF,  p-value: 1.164e-06

Multiple R-squared和Adjusted R-squared这两个值,其实我们常称之为“拟合优度”和“修正的拟合优度”,是指回归方程对样本的拟合程度。

R-squared(值范围0-1)描述的 输入变量对输出变量的解释程度。在单变量线性回归中R-squared 越大,说明拟合程度越好,模型对数据的预测越准确。

Adjusted R-square:自由度调整 r 平方。接近1的值表示更好的匹配。当您向模型中添加附加系数时, 它通常是适合质量的最佳指示器。

关于R-squared 和 Adjusted R-squared联系与区别:,可以看看下文

https://blog.csdn.net/ianly123/article/details/85109792

简单来说,只要增加了更多的变量,无论增加的变量是否和输出变量存在关系,则R-squared 要么保持不变,要么增加。
所以, 需要adjusted R-squared ,它会对那些增加的且不会改善模型效果的变量增加一个惩罚向。

结论,如果单变量线性回归,则使用 R-squared评估,多变量,则使用adjusted R-squared。
在单变量线性回归中,R-squared和adjusted R-squared是一致的。

另外,如果增加更多无意义的变量,则R-squared 和adjusted R-squared之间的差距会越来越大,Adjusted R-squared会下降。但是如果加入的特征值是显著的,则adjusted R-squared也会上升。

使用predict()函数进行数据预测

语法:

predict(object, newdata)

object是已使用lm()函数创建的公式。
newdata是包含预测变量的新值的向量。

使用上面得到的方程式来预测

a <- data.frame(x = 170)
result <-  predict(relation,a)
print(result)

得到预测结果

       1 
76.22869 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ianly123/article/details/85109696

智能推荐

(十四)树莓派3B+ wiringPi库的使用--硬件IIC驱动MPU6050_查看树莓派3b硬件iic口_小猿猪哥的博客-程序员秘密

使用之前在使用树莓派3B+和wiringPi之前希望你已经熟读了和他们相关的文档。http://wiringpi.com/reference/i2c-library/树莓派3B+的引脚图这张图可以清晰的查看每个引脚的功能。mpu6050模块电路图模块外观:模块的资料地址:http://pan.baidu.com/share/link?shareid=2384903480&amp;amp;amp;am...

在 Azure 上创建和链接 Azure SQL 数据库_weixin_30496431的博客-程序员秘密

本快速入门介绍了如何在Azure 门户中创建并连接 Azure SQL 数据库。在本教程中完成的所有操作均符合 1元试用条件。开始之前如果您还没有 Azure 账户,可以申请1 元试用账户。步骤1:创建 Azure SQL 数据库1. 登录到 Azure 门户,点击“+新建”-&gt;“Database”-&gt;“SQL 数据库”。2. 输入需要的参数,点击“...

IT研发/开发流程规范效能的思考总结_Young丶的博客-程序员秘密

通过优化研发过程,并有明确的数据量化,证明研发对业务的价值。

由freemarker毫秒级时间谈固定日期格式_月光日光的博客-程序员秘密

freemarker中毫秒级日期的正确表示。java和c#中日期的毫秒表示是不同的。c#中的毫秒级用f表示,java中用S表示。

黑马程序员--java基础--接口_Navan_的博客-程序员秘密

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------接口:初期理解,可以认为是一个特殊的抽象类当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。class用于定义类interface 用于定义接口。接口定义时,格式特点:1,接口中常见定义:常量,抽象方法。

排列组合详解_排列组合csdn_代码乌龟的博客-程序员秘密

在笔试题中看到的一个选择题 用1*3的瓷砖密铺3*20的地板有几种方式? 排列组合问题 排列和组合问题,其实是两种问题,区分它们的原则是是否需要考虑顺序的不同。排列问题,考虑顺序;组合问题,不考虑顺序。以下4个问题,哪个是排列,哪个是组合? Q1: 一套书共有...

随便推点

汇编语言-学习笔记(一)_weixin_30291791的博客-程序员秘密

  1.机器只认识高低电平,高低,也可以通过0、1来表示。最初的程序员,即是通过编写或是组织一堆一堆机器可以正确执行的命令来驱动机器进行工作。而这一堆一堆的机器指令的集合,后来又统称为机器语言。但由于机器语言难于辨别与记忆,进行书写、阅读、修改等等操作,给程序员们带来非常多的不便,因此,汇编语言产生了。  2.汇编语言的主体是汇编指令,汇编指令是机器指令的助记符,同机器指令一一对应。汇编语...

内存泄漏试试AScan_mseaspring的博客-程序员秘密

我用最多的排查c程序的内存问题的工具就是valgrind了,但是它这个工具有时候不是太好用,比如说,速度很慢,平时运行一次1s的程序,用valgrind排查可能要10s左右,还有没有好用...

庆祝博客升千,经典文献大奉献_邹宇华的博客-程序员秘密

 博客点击量昨天突破一千啦,感谢各位朋友的关注和支持,特把我下载收藏的经典编程文献资源共享出来!以后点击量每增加一千,就共享文献资源一批。这是初定计划,如果承蒙大家积极支持,共享的文献数量会逐步增加并逐渐实现免费赠送。谢谢!今天的共享书目是:1--Addison.Wesley.Effective.Stl.50.Specific.Ways.To.Improve.Your.Use.Of.Stl.pdf

笔试算法题_weixin_30675967的博客-程序员秘密

转自:http://www.cnblogs.com/xwdreamer/archive/2011/12/13/2296910.html1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14...

如何使用python中读取csv数据文件?读取csv文件的几种方法_python读取csv文件_data_amateur的博客-程序员秘密

1.第一种方法,使用csv库,打开csv文件,然后逐行读取文件内容import csvfilename = 'abc.csv'with open(filename) as f: reader = csv.reader(f) header_row = next(reader) highs = [] for row in reader: print(highs)这里header_row读取的是csv文件中的第一行,highs存储所有的数据行

Spring学习笔记_weixin_34220963的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

推荐文章

热门文章

相关标签