R语言实战——scatterplotMatrix()
导言
本文参考https://blog.csdn.net/qq_20828983/article/details/95659791,问题和博主一样。原先R语言实战的代码版本比较久,导致部分例子会报错甚至连包都找不到了(npmc?貌似是是这个(应该是通过本地安装解决了))。我的《R语言实战》是在南林大图书馆借阅的,是第一版,不知道第二版的问题多不多?
问题
这个包的名字蛮有趣的。scatterplotMatrix()(缩写—spm)函数默认在非对角线位置绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线。对角线位置绘制每个变量的密度图和轴须图。
library(car)
States
sat <- as.data.frame(state.x77[,c("Murder","Population",
"Illiteracy","Income","Frost")])
scatterplotMatrix(sat,spread=FALSE,lty.smooth=2,col="red",main="SAT")
大概率照着敲下来会得到下面的图:
图1 散点图矩阵然鹅,console出现了令人头皮发麻的waring(),还是有50个?!!!
There were 50 or more warnings (use warnings() to see the first 50)
解决方案
幸而一百度就找到这位博主,原文对函数剖析的比较彻底。(我只是一个渣渣)
修改后:
spm(sat,smooth=list(lty.smooth=2, spread = F),main="SAT")
图2 散点图矩阵(无warning)仔细对比会发现图1和图2的不同,图形参数设置不正确,函数按默认设置运行。
默认smooth = TRUE,而False不绘制拟合曲线,True绘制拟合曲线。
到这基本解决了原先的问题。
拓展
如果学习只到这,基本就废了。接下来将从两方面深入拓展:函数本身和散点图矩阵。
1函数
car包第一次出现是在1.1的介绍中,相信大部分人都没有刻意关注过这个图(看上去实在是太杂了);第二次出现是在4.3变量重编码,介绍了recode()函数;然后就到了第八章回归分析。
图3car包全称"Companion to Applied Regression",回归应用指南(?)。
文中是基于2.x版本,现在安装的car包基本是3.x版本。所以出现报错也不奇怪了。
具体到scatterplotMatrix函数,
scatterplotMatrix(x, smooth = TRUE,
id = FALSE, legend = TRUE, regLine = TRUE,
ellipse = FALSE, var.labels = colnames(x), diagonal = TRUE,
plot.points = TRUE, groups = NULL, by.groups = TRUE,
use = c("complete.obs", "pairwise.complete.obs"), col =
carPalette()[-1], pch = 1:n.groups, cex = par("cex"),
cex.axis = par("cex.axis"), cex.labels = NULL,
cex.main = par("cex.main"), row1attop = TRUE, ...
其中,
(1)smooth参数控制平滑拟合曲线,需要通过list修改其中参数。2.x版本不需要list。
smoother——控制拟合方式,方法有loessLine(默认)、gamline、quantregLine等
spread——设定是否添加展示分散度和对称信息的直线
lty.smooth——设定拟合曲线的形状(1是实线,2是虚线)
lwd.smooth——设定拟合曲线的宽度
(2)id参数控制点标识,默认为False;True表示list(method="mahal", n=2, cex=1, location="lr"),它标识出距离数据中心最大的Mahalanobis距离的2个点。
图4 id=T(3)diagonal参数控制对角线图形
diagonal=list(method="adaptiveDensity", bw=bw.nrd0, adjust=1, kernel=dnorm, na.rm=TRUE) #核密度图
diagonal=list(method="density", bw="nrd0", adjust=1, kernel="gaussian", na.rm=TRUE) #非自适应核密度估计
diagonal=list(method ="histogram", breaks="FD") #直方图 忽略分组
diagonal=list(method="boxplot") #箱线图
diagonal=list(method="qqplot") #normal QQ plot QQ图
diagonal=list(method="oned") #倾斜于对角线的地毯图
例子:spm(sat,smooth=list(lty.smooth=2, spread = T),id = T, pch =15,col = "blue2",
diagonal = list(method = "boxplot"), main="SAT")
图5 对角线为箱线图 图6 原博最终图形2散点图矩阵
函数内容基本搞懂,但是我在CSDN的推荐文章中发现了一篇介绍不同版本的散点图矩阵,决定一起学习一下。再次是在简书看到一幅好看的散点图矩阵,好奇自己掌握的技术能否实现?
原博地址:https://cosx.org/2009/03/scatterplot-matrix-visualization
简书地址:https://www.jianshu.com/p/06295967e6b4
散点图矩阵所用到的函数(包)分别为:pairs(graphics),scatterplot.matrix(car),gpairs(YaleToolkit),splom(lattice)
以鸢尾花数据为例分别绘制
结尾
从一个小问题出发,耗费了一整天的时间。只是弄懂了一个散点图矩阵函数,还有好多亟待了解的内容。
挖坑: