数据科学与R语言

R语言实战——scatterplotMatrix()

2020-05-05  本文已影响0人  MartyLife

导言

本文参考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()函数;然后就到了第八章回归分析。

图3 

car包全称"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)

以鸢尾花数据为例分别绘制

结尾

从一个小问题出发,耗费了一整天的时间。只是弄懂了一个散点图矩阵函数,还有好多亟待了解的内容。

挖坑:

上一篇下一篇

猜你喜欢

热点阅读