



矩阵图分析相关性主要通过pairs()函数对mtcars数据集绘制散点图矩阵,分析两两变量之间的关系,实现过程如下(源码位置:资源包\Code\02\pairs_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为pairs_data.R。
(2)加载程序包,使用data()函数导入mtcars数据集,代码如下:
library(datasets) # 加载程序包 data(mtcars) # 导入 mtcars 数据集
(3)使用pairs()函数绘制散点图矩阵,代码如下:
pairs(mtcars)
运行程序,结果如图2.15所示。
图2.15 散点图矩阵
从运行结果得知:虽然散点图矩阵中的散点图非常多,但大致可以看出mpg(里程数)与cyl(气缸数)、disp(排量)、hp(总马力)和wt(重量)存在一定的线性关系。
(4)使用第三方R包psych中的pairs.panels()函数绘制更加详尽的矩阵图,代码如下:
library(psych) # 加载程序包 pairs.panels(mtcars,cex.cor = 0.8) # pairs.panels()函数绘制矩阵图
运行程序,结果如图2.16所示。
图2.16 矩阵图
从运行结果得知:对角线上方为相关系数矩阵,mpg(里程数)与气缸数(cyl)、排量(disp)、总马力(hp)和重量(wt)有较强的负相关性,也就是说气缸数、排量、总马力和重量越大,汽车里程数越少,即每加仑油英里数越少,表示汽车越耗油;对角线为每个变量数值分布的直方图;对角线下方为散点图,每个散点图中的椭圆表示两个变量的相关性,椭圆越扁,变量之间的相关性越强;每个散点图中的曲线都为局部回归曲线;每个散点图中位于椭圆中心的点都为两个变量均值所确定的点。
相关系数的优点是可以通过数字对变量的关系进行度量,并且带有方向性,1表示正相关,-1表示负相关,越靠近0相关性越弱。缺点是无法利用这种关系对数据进行预测。下面使用cor()函数计算相关系数,实现过程如下(源码位置:资源包\Code\02\cor_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为cor_data.R。
(2)加载程序包,使用data()函数导入mtcars数据集,代码如下:
library(datasets) # 加载程序包 data(mtcars) # 导入 mtcars 数据集
(3)使用cor()函数计算相关系数,代码如下:
cor(mtcars)
运行程序,结果如图2.17所示。
图2.17 相关系数
从运行结果得知:mpg(里程数)与mpg(里程数)自身的相关性是1,与cyl(气缸数)、disp(排量)、hp(总马力)和wt(重量)存在着负相关性,并且相关性较强。
汽车气缸数分为4缸、6缸和8缸。下面使用boxplot()函数绘制箱形图分析mtcars数据集中不同气缸数的平均里程数,实现过程如下(源码位置:资源包\Code\02\cyl_mpg_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为cyl_mpg_data.R。
(2)加载程序包,使用data()函数导入mtcars数据集,代码如下:
library(datasets) # 加载程序包 data(mtcars) # 导入 mtcars 数据集
(3)使用boxplot()函数绘制箱形图分析气缸数与里程数,代码如下:
boxplot(mpg ~ cyl, data = mtcars, xlab = "气缸数",
ylab = "里程数", main = "气缸数与里程数分析图")
(4)使用points()函数在箱形图中添加平均里程数标记,代码如下:
points(1:3,mpg_mean,pch=24,bg=2)
运行程序,结果如图2.18所示。
图2.18 箱形图分析气缸数与里程数
从运行结果得知:不同气缸数的平均里程数不同,气缸数越少平均里程数越高,说明汽车越省油。
汽车变速器分为自动挡和手动挡。下面使用boxplot()函数绘制箱形图并分析mtcars数据集中自动挡和手动挡的平均里程数,通过这一分析可以判断是否自动挡的汽车更费油,实现过程如下(源码位置:资源包\Code\02\am_mpg_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为am_mpg_data.R。
(2)加载程序包,使用data()函数导入mtcars数据集,代码如下:
library(datasets) # 加载程序包 data(mtcars) # 导入 mtcars 数据集
(3)使用boxplot()函数绘制箱形图,代码如下:
boxplot(mpg ~ am, data = mtcars, xlab = "变速器",
ylab = "里程数", main = "变速器与里程数分析图")
图2.19 箱形图分析变速器与里程数
运行程序,结果如图2.19所示。(4)在箱形图中添加一条回归线进一步分析是否自动挡更费油,使用abline()函数实现,代码如下:
abline(lm(mpg~am,data=mtcars),col="red",lwd=3)
运行程序,结果如图2.20所示。
图2.20 添加回归线的箱形图
从运行结果得知:随着变速器的增加(0~1即从自动挡到手动挡),每加仑汽油行驶的英里数也在增加,说明自动挡更费油。
下面使用第三方R包ggplot2中的geom_point()函数和geom_smooth()函数绘制线性拟合散点图,分析mtcars数据集中重量与里程数的相关性,实现过程如下(源码位置:资源包\Code\02\wt_mpg_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为wt_mpg_data.R。
(2)加载程序包,使用data()函数导入mtcars数据集,代码如下:
# 加载程序包 library(datasets) # 导入 mtcars 数据集 data(mtcars)
(3)加载第三方R包ggplot2,然后使用ggplot()函数绘制线性拟合散点图,代码如下:
# 加载程序包 library(ggplot2) df <- mtcars # 绘制线性拟合散点图 ggplot(df, aes(wt, mpg))+ geom_point(shape=21,size=4)+ geom_smooth(method = lm,formula = y ~ x)+ # 设置标题和子标题 labs(title = "重量与里程数分析图")
运行程序,结果如图2.21所示。
图2.21 散点图分析重量与里程数
从运行结果得知:重量与里程数存在一定的线性关系,并且重量越小里程数越多,说明汽车越省油。
下面使用第三方R包graphics中的coplot()函数绘制条件图。首先根据不同气缸数对mtcars数据集进行分组,并在不同分组条件下绘制里程数和排量散点图,实现过程如下(源码位置:资源包\Code\02\cyl_mpg_disp_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为cyl_mpg_disp_data.R。
(2)加载程序包,使用coplot()函数绘制条件图,代码如下:
# 加载程序包
require(graphics)
# 设置画布背景颜色
par(bg="cornsilk")
# coplot()函数绘制气缸数、里程数和排量的关系图
coplot(mpg ~ disp | as.factor(cyl),data = mtcars,
pch = 21, bg = "green3",rows = 1)
# 图形设备参数恢复默认值
opar <- par(no.readonly = T)
par(opar)
运行程序,结果如图2.22所示。
图2.22 气缸数、里程数和排量的关系图
从运行结果得知:气缸数默认分成3组,4缸汽车较其他气缸数的汽车排量小并且里程数多。
通过气泡图分析里程数、总马力和重量之间的关系,主要使用第三方R包ggplot2中的geom_point()函数绘制气泡图,实现过程如下(源码位置:资源包\Code\02\mpg_hp_wt_data.R)。
(1)在项目文件夹下新建一个R脚本文件,命名为mpg_hp_wt_data.R。
(2)加载程序包,使用geom_point()函数绘制气泡图分析里程数、总马力和重量之间的关系,代码如下:
# 加载程序包 library(ggplot2) df <- mtcars # 绘制气泡图 ggplot(df, aes(x=hp, y=mpg, size=wt)) + geom_point(shape=16, color="blue", alpha=0.5)
运行程序,结果如图2.23所示。
图2.23 气泡图分析里程数、总马力和重量之间的关系
从运行结果得知:重量较轻、总马力较小的汽车里程数越多,说明汽车越省油。