说明:斜体为R语言代码
01数据准备:下载数据集
在进行线性回归模拟之前,我们需先准备具有线性关系的数据集。
这里以机械工业出版社出版出版的丘祐玮著的《数据科学:R语言实现 (数据科学与工程技术丛书)》中的房屋租赁数据集为例,数据下载网址为https:// raw. GitHubusercontent. com/ ywchiu/ rcookbook/ master/ chapter11/ house_ rental. csv。
从该网页下载的数据需转存到R语言可读取格式的文件中。这里我们以csv文件格式为例,进行介绍,将数据集存储为house_rental.csv。
注:以上网页数据若直接粘贴至excel文件再转存为csv文件时,不能分列粘贴,需要将数据按分隔符“,”分列,将每列数据存储在不同的列中。
或者可以关注后,在后台回复house_rental 获取分列存储的csv文件。
将上述文件存储在R的工作目录中,或者将R的工作目录设置为上述文件的存储路径。关于R工作目录的修改和查询见本公众号之前发布的文章:000 R工作目录
02读取csv文件
R读取csv文件的函数为 read.csv(‘文件名.csv’,header = TRUE)。
注:文件名需用英文单引号’’包围。
例:
> house <- read.csv(‘house_rental.csv’, header = TRUE)
03用函数lm()拟合线性回归
函数lm()的使用形式为:lm(因变量~自变量, data)。
回归模型函数lm()可以响应~变量的形式。
例:拟合house_rental数据集中Price与Sqft变量的关系,其中Sqft为自变量,Price为因变量。
> lmfit <- lm(Price ~ Sqft, data = house)
输出拟合结果:
> lmfit
Call:
lm(formula = Price ~ Sqft, data = house)
Coefficients:
(Intercept) Sqft
3425.13 38.33
输出结果显示:截距为3425.13,自变量Sqft对应的系数为38.33.即:Price=3425.13+38.33*Sqft
04画出趋势线
03中输出的拟合结果仅是函数表达式,为了更直观地观察Price和Sqft的关系,我们画出散点图和趋势线。
画散点图:
plot(Price ~ Sqft, data = house)
输出结果:
画趋势线:使用函数abline(),该函数可以在当前图形上画出一条或多条直线。
> abline(lmfit, color = ‘red’)
输出结果:
05使用函数summary()获取格式化的拟合结果
> summary(lmfit)
Call:
lm(formula = Price ~ Sqft, data = house)
Residuals:
Min 1Q Median 3Q Max
-76819 -12388 -3093 10024 112227
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 20130 on 643 degrees of freedom
Multiple R-squared: 0.6815, Adjusted R-squared: 0.681
F-statistic: 1376 on 1 and 643 DF, p-value: < 2.2e-16
在决定拟合模型是否可行时,我们主要看拟合的截距Intercept和自变量系数对应的p-value(Pr)。
根据显著性水平(一般取0.05或0.01),若p-value小于既定的显著性水平(此例中p-value: < 2.2e-16 < 0.01),说明拒绝原假设H0(斜率为0),接受备择假设(此例中为斜率为38.3340)。
也可以根据显著性水平检验结果——确定性系数R^2判定模型拟合的优劣,一元线性回归中R方等于皮尔逊积矩相关系数(Pearson product moment correlation coefficient 或Pearson’s r)的平方。这种方法计算的R方一定介于0~1之间的正数,该数值越接近于1,说明拟合效果越理想。在一般问题中,R-squared达到0.8以上,回归模型即可接受。
此例中的Multiple R-squared为0.6815,虽然拟合结果没有特别理想,但也可以接受,另外,根据p-value,拟合结果也可以接受。
degrees of freedom = n-2,此例中共有645条数据。
06练习
可以使用某短视频网站话题数~视频数数据练习线性回归模型。
在后台回复**‘topic_video**’获取对应csv数据集。