美文网首页R语言做生信
R语言机器学习与临床预测模型30--主成分分析(PCA)

R语言机器学习与临床预测模型30--主成分分析(PCA)

作者: 科研私家菜 | 来源:发表于2022-03-15 21:31 被阅读0次

    本内容为【科研私家菜】R语言机器学习与临床预测模型系列课程

    R小盐准备介绍R语言机器学习与预测模型的学习笔记

    你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


    01 基础知识介绍

    方差:用来衡量随机变量与其数学期望(均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。

    协方差:度量两个随机变量关系的统计量,协方差为0的两个随机变量是不相关的。

    协方差矩阵:在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差。特殊的,矩阵对角线上的元素分别是向量的方差。

    02 主成分分析PCA

    PCA(主成分分析)是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。
    主成分分析法(Principal Component Analysis)是一种基于变量协方差矩阵对数据进行压缩降维、去噪的有效方法,它借助正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分(PC),主成分是旧特征的线性组合。
    PCA除了可以将优化目标定义为变换后样本的方差最大,还可以定义为原样本点距离变换矩阵所构成的超平面的距离最小,此二者定义是等价的。

    PCA常用于高维数据的降维、数据噪音消除、图像压缩、特征脸等等。

    效果如下:


    02 R语言实现

    #####
    library(factoextra)
    library(tidyverse)
    
    # Split Data into Training and Testing in R 
    sample_size = floor(0.8*nrow(iris))
    set.seed(777)
    
    # randomly split data in r
    picked = sample(seq_len(nrow(iris)),size = sample_size)
    df1 =iris[picked,] %>% as.tbl()
    df2 =iris[-picked,] %>% as.tbl()
    
    ## 1.pca
    res.pca <- prcomp(df1[,-5], scale = T) # 标准化
    ## 2.the percentage of variances explained by each principal component.
    fviz_eig(res.pca)
    
    ## 3.Individuals with a similar profile are grouped together.
    fviz_pca_ind(res.pca,
                 col.ind = "cos2", # Color by the quality of representation
                 gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
                 repel = TRUE     # Avoid text overlapping
    )
    
    
    ## 4.Graph of Coordinate
    fviz_pca_ind(res.pca,
                 col.ind = df1$Species, # color by groups
                 palette = c("#00AFBB",  "#FC4E07","black"),
                 addEllipses = TRUE, # Concentration ellipses
                 ellipse.type = "confidence",
                 ellipse.level=0.95,
                 legend.title = "Groups",
                 ggtheme = theme_minimal())
    
    ## 5. Coordinate of groups
    coord.groups <- res.ind$coord %>%
      as_data_frame() %>%
      select(Dim.1, Dim.2) %>%
      mutate(Species = df1$Species) %>%
      group_by(Species) %>%
      summarise(
        Dim.1 = mean(Dim.1),
        Dim.2 = mean(Dim.2))
    
    coord.groups
    
    # A tibble: 3 x 3
    Species     Dim.1  Dim.2
    <fct>       <dbl>  <dbl>
      1 setosa      2.10   0.278
    2 versicolor -0.570 -0.529
    3 virginica  -1.82   0.248
    
    ### predict
    #ind.sup=veteran %>% select(-trt) %>% as.tbl() %>% slice(101:136)
    ind.sup.coord <- predict(res.pca, newdata = df2)
    ind.sup.coord[, 1:4]
    
    # df1
    coord1 = res.ind$coord %>%
      as_data_frame() %>%
      select(Dim.1, Dim.2) %>%
      mutate(Species = df1$Species) %>% set_names("PC1","PC2","Species")
    
    # df2
    coord2 =ind.sup.coord[, 1:2] %>% as_data_frame() %>% 
      mutate(Species = df2$Species) 
    
    # plot
    coord1 %>% bind_rows(coord2) %>% 
      ggplot()+
      geom_point(aes(PC1,PC2,group=Species,color=Species),shape=0,size=3)+
      geom_point(data=coord2,aes(PC1,PC2),fill=0.1)
    

    关注GZH,回复PCA 获取分析代码

    参考资料:
    https://royalsocietypublishing.org/doi/10.1098/rsta.2015.0202
    http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/118-principal-component-analysis-in-r-prcomp-vs-princomp/
    https://aaronschlegel.me/principal-component-analysis-r-example.html


    关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

    相关文章

      网友评论

        本文标题:R语言机器学习与临床预测模型30--主成分分析(PCA)

        本文链接:https://www.haomeiwen.com/subject/tmnamltx.html