R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图

我们将使用葡萄酒数据集进行主成分分析。

数据包含177个样本和13个变量的数据框;vintages包含类标签。这些数据是对生长在意大利同一地区但来自三个不同栽培品种的葡萄酒进行化学分析的结果:内比奥罗、巴贝拉和格里格诺葡萄。来自内比奥罗葡萄的葡萄酒被称为巴罗洛。

由Kaizong Ye,Weilong Zhang撰写

这些数据包含在三种类型的葡萄酒中各自发现的几种成分的数量。

# 看一下数据
head(no)

输出

转换和标准化数据

对数转换和标准化,将所有变量设置在同一尺度上。

# 对数转换
no_log <- log(no)

# 标准化
log\_scale <- scale(no\_log)
head(log_scale)

视频

主成分分析PCA降维方法和R语言分析葡萄酒可视化实例

探索见解

去bilibili观看

探索更多视频

主成分分析(PCA)

使用奇异值分解算法进行主成分分析

prcomp(log_scale, center=FALSE)
summary(PCA)

基本图形(默认设置)

带有基础图形的主成分得分和载荷图

plot(scores\[,1:2\], # x和y数据
     pch=21, # 点形状
    cex=1.5, # 点的大小

legend("topright", # legend的位置
       legend=levels(vint), # 图例显示

plot(loadings\[,1:2\], # x和y数据
     pch=21, # 点的形状

text(loadings\[,1:2\], # 设置标签的位置

此外,我们还可以在分数图中的组别上添加95%的置信度椭圆。


R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告

阅读文章


置信度椭圆图函数

## 椭圆曲线图
                        elev=0.95, # 椭圆概率水平
                        pcol=NULL, # 手工添加颜色,必须满足长度的因素
                        cexsize=1, # 点大小
                        ppch=21, # 点类型,必须满足因素的长度
                        legcexsize=2, # 图例字体大小
                        legptsize=2, # 图例点尺寸

    ## 设定因子水平
    if(is.factor(factr) {
        f <- factr
    } else {
        f <- factor(factr, levels=unique(as.character(factr)))
    }
    intfactr <- as.integer(f) # 设置与因子水平相匹配的整数向量

    ## 获取椭圆的数据
    edf <- data.frame(LV1 = x, LV2=y, factr = f) # 用数据和因子创建数据框
    ellipses <- dlply(edf, .(factr), function(x) {

        Ellipse(LV1, LV2, levels=elev, robust=TRUE, draw=FALSE) #从dataEllipse()函数中按因子水平获取置信度椭圆点
    })
    ## 获取X和Y数据的范围
    xrange <- plotat(range(c(as.vector(sapply(ellipses, function(x) x\[,1\])), min(x), max(x))))
    ## 为图块设置颜色
    if(is.null(pcol) != TRUE) { # 如果颜色是由用户提供的
        pgcol <- paste(pcol, "7e", sep="") # 增加不透明度

    # 绘图图形
    plot(x,y, type="n", xlab="", ylab="", main=""
    abline(h=0, v=0, col="gray", lty=2) #在0添加线条
    legpch <- c() # 收集图例数据的矢量
    legcol <- c() # 收集图例col数据的向量
    ## 添加点、椭圆,并确定图例的颜色
    ## 图例
    legend(x=legpos, legend=levels(f), pch=legpch, 
## 使用prcomp()函数的PCA输出的轴图示
    pcavar <- round((sdev^2)/sum((sdev^2))

基础图形

绘制主成分得分图,使用基本默认值绘制载荷图

plot(scores\[,1\], # X轴的数据
            scores\[,2\], # Y轴的数据
            vint, # 有类的因素
            pcol=c(), # 用于绘图的颜色(必须与因素的数量相匹配)
            pbgcol=FALSE, #点的边框是黑色的?
            cexsize=1.5, # 点的大小 
            ppch=c(21:23), # 点的形状(必须与因子的数量相匹配)
            legpos="bottom right", # 图例的位置           
            legcexsize=1.5, # 图例文字大小
            legptsize=1.5, # 图例点的大小 
            axissize=1.5, # 设置轴的文字大小
            linewidth=1.5 # 设置轴线尺寸
)                         
title(xlab=explain\[\["PC1"\]\], # PC1上解释的方差百分比
      ylab=explain\[\["PC2"\]\], # PC2解释的方差百分比 
      main="Scores", # 标题
      cex.lab=1.5, # 标签文字的大小
      cex.main=1.5 # 标题文字的大小

plot(loadings\[,1:2\], # x和y数据
     pch=21, # 点的形状
     cex=1.5, # 点的大小
    # type="n", # 不绘制点数
     axes=FALSE, # 不打印坐标轴
     xlab="", # 删除x标签
     ylab=""              # 删除y标签
)
pointLabel(loadings\[,1:2\], #设置标签的位置
           labels=rownames(PCAloadings), # 输出标签
           cex=1.5 # 设置标签的大小
) # pointLabel将尝试将文本放在点的周围
axis(1, # 显示x轴
     cex.axis=1.5, # 设置文本的大小
     lwd=1.5 # 设置轴线的大小
)
axis(2, # 显示y轴
     las=2, # 参数设置文本的方向,2是垂直的
     cex.axis=1.5, # 设置文本的大小
     lwd=1.5 # 设置轴线的大小
)
title(xlab=explain\[\["PC1"\]\], # PC1所解释的方差百分比
      ylab=explain\[\["PC2"\]\], # PC2解释的方差百分比 
    
      cex.lab=1.5, # 标签文字的大小
      cex.main=1.5 # 标题文字的大小
)


随时关注您喜欢的主题



可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds