转:R: fivz_pca_biplot的异常问题

(一) 椭圆置信区间边框颜色显示的问题:

原代码:

fviz_pca_biplot(NR.pca,

                win.asp = 0.8,

                # Fill individuals by groups

                geom.ind = "point",

                fill.ind = data_NR$Label, # 个体的填充

                col.ind = "black", #habillage = data_NR$Label, 个体的边框及对应名称颜色

                palette = c("#00AFBB", "#FC4E07"), # "jco"

                pointshape = 21, pointsize = 3, #符号大小

                addEllipses = TRUE,#添加浓度椭圆

                repel = TRUE,#避免文字重叠

                # Color variable by groups

                geom.var = "arrow",

                alpha.var = "contrib",               

                #col.var = "contrib",

                gradient.cols = c("#00AFBB", "#FC4E07"), #variable的颜色也是按照palette进行修改的

                select.var = list(cos2 = 30),#选择cos2响应前30

                labelsize = 3,

              legend.title = list(fill = "Species", color = "kmeans",alpha = "Contrib"),

                title = "NR",

                xlab = "PC1 (18.2%)", ylab = "PC2 (11.8%)",             

                ) + font("title", size = 20, color = "black", face = "bold") +

  font("subtitle", size = 12, color = "black", face = "bold") +

  font("xlab", size = 14, color = "black", face = "bold") +

  font("ylab", size = 14, color = "black", face = "bold") +

  font("xy.text", size = 12, color = "black", face = "bold") +

  border("black", 0.2) + rotate_x_text(0) +

  font ("legend.title", size = 12, color = "black", face = "bold") +

  font("legend.text", size = 10, color = "black", face = "bold") +

  theme(plot.title = element_text(hjust = 0.45, vjust = -8)) +

  theme(aspect.ratio = 0.5)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

运行以上代码,得到下面的结果,图1中左侧椭圆的边框为蓝色,右侧边框颜色为红色。

图1 椭圆置信区间边框颜色显示的问题

解决办法:

将上述代码中的< “col.var = “contrib”, >取消注释再次运行就正常,如下图:

图2 椭圆置信区间边框颜色显示的问题

(二)PCA分析后的变量个数与原数据中变量个数不匹配

原代码:

# 不希望k-means算法依赖于任意变量单位,因此我们首先使用R函数scale()缩放数据

NR_scale <- scale(data_NR[,1:168])

# 估计最佳聚集数目

fviz_nbclust(NR_scale, kmeans, method = "wss")

#利用kmeans创建变量分组

#创建3组变量

set.seed(123)

res.km <- kmeans(var$coord, centers = 3, nstart = 25) #由于k均值聚类结果的最终结果对随机开始分配敏感,因此我们指定nstart = 25。这意味着R将尝试25种不同的随机开始分配,然后选择与簇内变异最小的结果相对应的最佳结果。R中nstart的默认值为1。但是,强烈建议以较大的nstart值(例如25或50)计算k均值聚类,以获得更稳定的结果。

grp <- as.factor(res.km$cluster)

# Color variables by groups

fviz_pca_var(NR.pca, col.var = grp,

            palette = c("#0073C2FF", "#EFC000FF", "#868686FF"),

            legend.title = "Cluster")

#绘图

NR_biplot <- fviz_pca_biplot(NR.pca,

                win.asp = 0.8,

                # Fill individuals by groups

                geom.ind = "point",

                fill.ind = data_NR$Label, # 个体的填充

                col.ind = "black", #habillage = data_NR$Label, 个体的边框及对应名称颜色

                palette = c("#00AFBB", "#EFC000FF", "#FC4E07"), # "jco"

                pointshape = 21, pointsize = 3, #符号大小

                addEllipses = TRUE,#添加浓度椭圆

                repel = TRUE,#避免文字重叠

                # Color variable by groups

                geom.var = "arrow",

                alpha.var = "contrib",               

                #col.var = grp,

                gradient.cols = c("#00AFBB", "#EFC000FF", "#FC4E07"), #variable的颜色也是按照palette进行修改的

                select.var = list(cos2 = 30),#选择cos2响应前30

                labelsize = 3,

                legend.title = list(fill = "Species", color = "kmeans",alpha = "Contrib"),

                title = "NR",

                xlab = "PC1 (18.2%)", ylab = "PC2 (11.8%)",

              ) + font("title", size = 20, color = "black", face = "bold") +

  font("subtitle", size = 12, color = "black", face = "bold") +

  font("xlab", size = 14, color = "black", face = "bold") +

  font("ylab", size = 14, color = "black", face = "bold") +

  font("xy.text", size = 12, color = "black", face = "bold") +

  border("black", 0.2) + rotate_x_text(0) +

  font ("legend.title", size = 12, color = "black", face = "bold") +

  font("legend.text", size = 10, color = "black", face = "bold") +

  theme(plot.title = element_text(hjust = 0.45, vjust = -8)) +

  theme(aspect.ratio = 0.5)

NR_biplot

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

运行以上代码,一直报错下面内容:

Error in fviz(X, element = "var", axes = axes, geom = geom.var, color = col.var,  :

  The length of color variableshould be the same as the number of rows in the data.

1

2

分析原因:

变量的颜色数量与原数据中行数(代表变量个数)不同。

解决办法:

以上代码并没有问题,解决办法也很简单,重新检查数据发现,在利用kmeans进行分组时,res.km <- kmeans(var$coord, centers = 3, nstart = 25)这句代码里的分类数据集var$coord是另外一组数据的结果,而不是列表NR.pca中的结果,所以将该代码改为调用NR.pca中的数据即可res.km <- kmeans(NR.pca$var$coord, centers = 3, nstart = 25)。

(三) 手动定义颜色数量过少

在利用(二)中代码运行时,当其中“palette, gradient.cols”的颜色设置小于3个时,就会报错,如下所示:

错误: Insufficient values in manual scale. 3 needed but only 2 provided.

1

原因:

设置分组共3组,颜色数量设置小于3个时,不够分配而报错。

解决办法:

为其提供更多的颜色,大于等于3个颜色均可,会按照从前往后的顺序选择颜色进行绘图。

(四)Biplot只显示变量结果

原代码:

#Biplot

fviz_pca_biplot(XB.pca,

                        # Individuals

                        geom.ind = "point",

                        palette = "jco",

                        addEllipses = TRUE,

                        # Variables

                        gradient.cols = "RdYlBu",

                        legend.title = list(fill = "Species", color = "Contrib",

                                                  alpha = "Contrib")

                        )                       

1

2

3

4

5

6

7

8

9

10

11

运行以上代码时,结果如图3,由图3可知,只显示了变量(化合物)的结果(loading plot),而未显示出样本的结果(score plot)。

图3 Biplot

原因:

"XB.pca"是用其他R包进行标准化后的结果,所以此代码调用该数据集时未进行标准化。

解决方法:

利用factoextra进行PCA分析可视化时,需要将数据先利用factoMineR中的PCA()进行缩放scale(),才可以绘制图形。所以在运行上述代码前加上以下代码即可:

XB.pca <- PCA(data[,1:168], graph = TRUE)

1

PCA() 默认进行scale()。

PCA() 分析中不能含有字符,当导入原始数据具有名称或分组等非数值型信息时,可利用matrix的特性,调用数据列进行PCA() 分析(如:上述代码为调用data数据集中的第1到第168列数据,第169列为样本分组,故不调用)。

(五)fivz_pca_biplot与fivz_pca_ind中fill()的作用不同

代码1:

fviz_pca_ind(iris.pca,

            geom.ind = "point",

            fill.ind = iris$Species,

            col.ind = "black", #habillage = data_NR$Label,

            palette = c("#00AFBB",  "#EFC000FF", "#FC4E07"),

            pointshape = 20, pointsize = 3, #符号大小

            addEllipses = TRUE

            )

1

2

3

4

5

6

7

8

代码2:

fviz_pca_biplot(iris.pca,

                win.asp = 0.8,

                # Fill individuals by groups

                geom.ind = "point",

                fill.ind = iris$Species, # 个体的填充

                col.ind = "black", #habillage = data_NR$Label, 个体的边框及对应名称颜色

                palette = c("#00AFBB", "#EFC000FF", "#FC4E07"), # "jco"

                pointshape = 21, pointsize = 3, #符号大小

                addEllipses = TRUE

                )

1

2

3

4

5

6

7

8

9

10

运行代码1时,报错内容如下:

Error in if (fill %in% names(data) & is.null(add.params$fill)) add.params$fill <- fill :

  参数长度为零

1

2

提示内容为"fill.ind"的内容为空,检查对比以后发现,代码1与代码2中引用的分组数据分别为“data_NR$Label” 与“data_NR$label”,前面为手动输入有误, 将"Label"改为小写"label"问题解决。

再次运行代码1与代码2,结果分别为图4与图5:

图4 代码1的运行结果

图5 代码2的运行结果

从上图可知,图1的三组结果均为蓝色,图2的三组则根据分组显示不同颜色,检查代码发现pointshape的设置值不一样,代码1中pointshape = 20,而代码2中pointshape = 21。

利用以下代码查询R包“ggpubr”中的所有形状组合,

ggpubr::show_point_shapes()

1

结果如图6所示,由图6可知,每个数字编码都代表一种形状,21表示的为空心,20表示的为实心,导致上述运行结果不一致,可根据个人需要多尝试几个数字,通过观察出图效果选择适合的形状。

图6 R包中可用的点的形状

参考内容:

Unexpected behavior of fviz_pca_biplot___color(连续变量/分组变量)的设置问题

K-Means Clustering in R: Algorithm and Practical Examples

PCA - Principal Component Analysis Essentials

————————————————

版权声明:本文为CSDN博主「跳动的喵尾巴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_43210428/article/details/115913062

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容