咱们将应用葡萄酒数据集进行主成分剖析。
数据
数据蕴含177个样本和13个变量的数据框;vintages蕴含类标签。这些数据是对成长在意大利同一地区但来自三个不同栽培品种的葡萄酒进行化学分析的后果:内比奥罗、巴贝拉和格里格诺葡萄。来自内比奥罗葡萄的葡萄酒被称为巴罗洛。
这些数据蕴含在三种类型的葡萄酒中各自发现的几种成分的数量。
# 看一下数据head(no)
输入
转换和标准化数据
对数转换和标准化,将所有变量设置在同一尺度上。
# 对数转换no_log <- log(no)# 标准化log\_scale <- scale(no\_log)head(log_scale)
主成分剖析(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%的置信度椭圆。
置信度椭圆图函数
## 椭圆曲线图 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 # 题目文字的大小)