相关性可视化绘图
以相关系数表示的二元关系:通过散点图和散点图矩阵进行可视化
(1)散点图:plot(x, y) 其中,x和y是数值型向量,代表着图形中的(x,y)点
(2)进阶散点图:car包中的scatterplot()函数
(3)散点图矩阵:
①pairs()函数:可以看到所有指定变量间的二元关系
②car包中的scatterplotMatrix()函数
③gclus包cpairs()函数
(4)高密度散点图:适于数据点重叠很严重时
①普通散点图+用颜色密度表示点分布的散点图:smoothScatter()
②六边形封箱图:hexbin包中的hexbin()函数
-
将二元变量的封箱放到六边形单元格中(图形比名称更直观)
(5)气泡图:symbols()函数来创建
①用处:
-
三维散点图来展示三个定量变量间的关系
-
换种思路:先创建一个二维散点图
-
然后用点的大小来代表第三个变量的值,即气泡图
②格式:symbols(x,y, circle=radius)
-
其中x、y和radius是需要设定的向量,分别表示x、y坐标和圆圈半径
-
该函数可以在指定的(x,y)坐标上绘制圆圈图、方形图、星形图、温度计图和箱线图
(6)相关系数矩阵
①用corrgram包中的corrgram()函数:用颜色来表示相关的程度
数据结构:11个变量,32个地区
-
蓝色正相关。反过来,红色和从左上指向右下的斜杠表示变量呈负相关
-
色彩越深,饱和度越高,说明变量相关性越大
-
相关性接近于0的单元格基本无色
-
本图为了将有相似相关模式的变量聚集在一起
-
对矩阵的行和列都重新进行了排序(使用主成分法)
(7)马赛克图:有两个以上的类别型变量 vcd包中的mosaic()函数
-
在马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率
-
颜色和/或阴影可表示拟合模型的残差值
马赛克图隐含着大量的数据信息,例如:(1) 从船员到头等舱,存活率陡然提高;(2) 大部分孩子都处在三等舱和二等舱中;(3) 在头等舱中的大部分女性都存活了下来,而三等舱中仅有一半女性存活;(4) 船员中女性很少,导致Survived标签重叠(图底部的No和Yes)
代码如下
#相关关系的可视化
#1添加拟合曲线的简单散点图
attach(mtcars)
plot(wt, mpg,
main="Basic Scatter plot of MPG vs. Weight",
xlab="Car Weight (lbs/1000)",
ylab="Miles Per Gallon ", pch=19)
abline(lm(mpg~wt), col="red", lwd=2, lty=1) #abline()函数用来添加最佳拟合的线性直线
lines(lowess(wt,mpg), col="blue", lwd=2, lty=2)#lowess()函数则用来添加一条平滑曲线
#该平滑曲线拟合是一种基于局部加权多项式回归的非参数方法
#2进阶散点图:car包中的scatterplot()函数【添加拟合曲线、边界箱线图和置信椭圆】
library(car)
scatterplot(mpg ~ wt | cyl, data=mtcars, lwd=2, span=0.75,
main="Scatter Plot of MPG vs. Weight by # Cylinders",
xlab="Weight of Car (lbs/1000)",
ylab="Miles Per Gallon",
legend.plot=TRUE,
id.method="identify",
boxplots="xy" )
#表达式mpg ~ wt | cyl表示按条件绘图(即按cyl的水平分别绘制mpg和wt的关系图
#span参数控制loess曲线中的平滑量。[越大,拟合得就越好]
#id.method:表明可通过鼠标单击来交互式地识别数据点
#legend.plot:表明在左上边界添加图例
#3散点图矩阵:pairs()函数
library(car)
pairs(~mpg+disp+drat+wt, data=mtcars,
main="Basic Scatter Plot Matrix")#图包含~右边的所有变量
#4散点图矩阵:scatterplotMatrix()函数
#线性和平滑(loess)拟合曲线被默认添加,主对角线处添加了核密度曲线和轴须图
library(car)
scatterplotMatrix(~ mpg + disp + drat + wt, data=mtcars,
spread=FALSE, smoother.args=list(lty=2),
main="Scatter Plot Matrix via car Package")
#spread = FALSE选项表示不添加展示分散度和对称信息的直线
#smoother.args=list(lty=2)设定平滑(loess)拟合曲线使用虚线而不是实线
#5散点图矩阵:gclus包cpairs()函数
library(gclus)
mydata <- mtcars[c(1,3,5,6)] #mtcars数据集中1356列
mydata.corr <- abs(cor(mydata)) #计算相关系数
mycolors <- dmat.color(mydata.corr)
myorder <- order.single(mydata.corr)
cpairs(mydata,
myorder,
panel.colors=mycolors,
gap=.5, #gap=表示框框之间的间隙
main="Variables Ordered and Colored by Correlation"
)
#6高密度散点图
#smoothScatter()用封箱、颜色和透明度来指明图中任意点上重叠点的数目
set.seed(1234)
n <- 10000
c1 <- matrix(rnorm(n, mean=0, sd=.5), ncol=2)
c2 <- matrix(rnorm(n, mean=3, sd=2), ncol=2)
mydata <- rbind(c1, c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x", "y")
#普通散点图
with(mydata,
plot(x, y, pch=19, main="Scatter Plot with 10000 Observations"))
#用颜色密度表示点分布的散点图:smoothScatter()
with(mydata,
smoothScatter(x, y, main="Scatterplot colored by Smoothed Densities"))
#set.seed()括号里面的参数可以是任意数字
#是代表你设置的第几号种子而已,不会参与运算,是个标记而已
#可以是1,也可以是2
#六边形封箱图:hexbin包中的hexbin()函数
library(hexbin)
with(mydata, {
bin <- hexbin(x, y, xbins=50)
plot(bin, main="Hexagonal Binning with 10,000 Observations")
})
#气泡图
attach(mtcars)
r <- sqrt(disp/pi) #用面积表示第三个变量z
symbols(wt, mpg, circle=r, inches=0.30,
fg="white", bg="lightblue",
main="Bubble Plot with point size proportional to displacement",
ylab="Miles Per Gallon",
xlab="Weight of Car (lbs/1000)")
text(wt, mpg, rownames(mtcars), cex=0.6)
detach(mtcars)#inches是圆的大小,text()用来添加汽车的名称
#相关系数矩阵
options(digits=2)
cor(mtcars)#计算相关系数
library(corrgram)
corrgram(mtcars, order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Correlogram of mtcar intercorrelations")
#矩阵行和列都通过主成分分析法进行了重新排序
#马赛克图(有两个以上的类别型变量)嵌套数据
library(vcd)
mosaic(Titanic, shade=TRUE, legend=TRUE)
#shade=TRUE将根据拟合模型的皮尔逊残差值对图形上色,添加选项legend=TRUE将展示残差的图例