Ⅰ. 基因差异表达

1. Fold Change

1.计算公式

image.png

2.fold change cutoffs

image.png

3.缺点

  1. 对一些本底表达很高/很低的基因分析不足
  2. 不能考虑方差

2. p-value

1.t-test【2个条件下】

  1. 要求
    1. 两个样本之间是独立的
    2. 服从正态分布
    3. 样本>30
  2. 检验方差
  3. 单尾/双尾
  4. 多假设检验矫正:Bonferroni/FDR

    2.ANOVA【多个条件下】

  5. one-way / two-way

  6. 多假设检验矫正

    3.非参数检验【非正态分布】

  7. 秩检验

  8. 多假设检验矫正

3. 结合p-value和fold-change——火山图

image.png

Ⅱ. 基因富集分析

1. 用途

在已经获得了一系列具有差异表达的基因之后,后续希望可以将这些基因进行归类、富集,希望可以找到他们具有的共性(都参与哪一条通路、都具有什么功能等)以及这些基因的差异表达是都是偶然的。

2. 常用的方法

image.png

1.Fisher’s test & chi-squzred

image.png

2.Hypergeometric

image.png

Ⅲ 主成分分析

1. 简介

PCA是一种在损失很少信息的前提下,把多个指标转换为几个综合指标的多元统计分析方法。它的核心是数据降维思想,即通过降维的手段实现多指标向综合指标的转化,而转化后的综合指标,我们将其称为主成分。
其中,每个主成分都是众多原始变量的线性组合,且每个主成分之间互不相关,这使得主成分比原始变量具有某些更为优越的性能。在实际应用中,如果原始数据本身较为复杂,主成分分析不仅可以帮助我们抓住问题的主要矛盾,也能够显著的提高我们的分析效率。

2.原理

image.png
image.png
image.png

3.几何意义

主成分分析的过程就是旋转坐标系,各成分表达式就是新坐标系与原坐标系的转换关系。
image.png
从图中可以看出,变量F1包含了原始变量的绝大多数信息。

4. 计算步骤

对原始数据进行标准化处理,消除量纲→计算标准化数据的相关系数矩阵→计算矩阵的特征根及对应的特征向量→最大的特征根,对应的特征向量为第一主成分的系数,并以此类推→计算累计贡献率,选择恰当的主成分个数→解释主成分,写出前k个主成分的表达式→确定各样本的主成分得分→确定主成分得分的数据,作进一步的统计分析。

5.R中代码

  1. 基础包中的princomp()函数
  2. psych包中的principal()函数【功能更多】 ```r

    principal(r, nfactors = 1, residuals = FALSE, rotate=”varimax”,

  • n.obs=NA, covar=FALSE, scores=TRUE,missing=FALSE, impute=”median”,
  • oblique.scores=TRUE, method=”regression”,…)

    r:指定输入的数据,如果输入的是原始数据,R将自动计算其相关系数矩阵

    nfactors:指定主成分个数

    residuals:是否显示主成分模型的残差,默认不显示

    rotate:指定模型旋转的方法,默认为最大方差法

    n.obs:如果输入的数据是相关系数矩阵,则必须指定观测样本量

    covar:逻辑参数,如果输入数据为原始数据或方阵(如协方差阵),R将其转为相关系数矩阵

    scores:是否计算主成分得分

    missing:缺失值处理方式,如果scores为TRUE,且missing也为TRUE,缺失值将被中位数或均值替代

    impute:指定缺失值的替代方式,默认为中位数替代;

    method:指定主成分得分的计算方法,默认使用回归方法计算。

    ```
  1. stats包中的prcomp()函数

    1. > prcomp(x, retx = TRUE, center = TRUE, scale. = FALSE,
    2. tol = NULL, rank. = NULL, ...)
    3. # x:指定输入的数据
    4. # retx:是否返回rotates变量
    5. # center:变量是否能转换成0
    6. # scale.:是否有单位方差

    6.结果解读

    1. > data_pca <- principal(data[,-1],nfactors = 2,rotate = "none")
    2. > data_pca
    3. Principal Components Analysis
    4. Call: principal(r = data[, -1], nfactors = 2, rotate = "none")
    5. Standardized loadings (pattern matrix) based upon correlation matrix
    6. PC1 PC2 h2 u2 com
    7. X1 0.13 0.84 0.72 0.281 1.0
    8. X2 0.92 0.33 0.96 0.043 1.3
    9. X3 0.81 -0.30 0.75 0.251 1.3
    10. X4 0.88 0.32 0.87 0.129 1.3
    11. X5 0.60 0.35 0.49 0.512 1.6
    12. X6 0.97 0.19 0.97 0.026 1.1
    13. X7 0.87 -0.27 0.82 0.177 1.2
    14. X8 0.94 -0.19 0.91 0.090 1.1
    15. X9 0.31 -0.83 0.79 0.210 1.3
    16. X10 0.72 -0.04 0.52 0.480 1.0
    17. X11 0.97 0.14 0.97 0.034 1.0
    18. X12 0.96 0.22 0.97 0.030 1.1
    19. X13 0.94 0.17 0.91 0.087 1.1
    20. X14 0.86 0.33 0.85 0.148 1.3
    21. X15 0.72 -0.30 0.61 0.390 1.3
    22. X16 0.87 -0.43 0.93 0.067 1.5
    23. X17 0.71 -0.48 0.73 0.266 1.8
    24. PC1 PC2
    25. SS loadings 11.11 2.67
    26. Proportion Var 0.65 0.16
    27. Cumulative Var 0.65 0.81
    28. ......
  2. PC1与PC2栏为成分载荷,它是指观测变量与主成分的相关系数,从上表中我们可以看到,第一主成分与X2、X4、X6等变量高度相关,第二主成分与X1、X9等变量相关。

  3. h2栏指成分公因子方差,即主成分对每个变量的方差解释度。对于X2,两个主成分一共解释了96%的方差
  4. u2栏指成分唯一性,即方差无法被主成分解释的比例(1–h2)。
  5. SS loadings行包含了与主成分相关联的特征值,指的是与特定主成分相关联的标准化后的方差值
  6. Proportion Var行表示的是每个主成分对整个数据集的解释程度,在这一案例中,第一主成分解释了65%的方差,第二主成分解释了16%,两者总共解释了81%的方差。

    7.绘制主成分分析图

    ggfortifyautoplot()函数

    Ⅳ 聚类分析

    1.简介

    聚类分析的本质是一种数据归约技术,旨在揭露一个数据集中观测值的子集。它可以把大量的观测值归为若干个群组,去组内的观测值相似度要比不同的群之间相似度高。

    2.分析步骤

  7. 对数据文件进行深入的理解,选择对观测值分组具有重要影响的变量

  8. 数据的标准化处理,消除量纲的影响
  9. 搜寻异常值。许多聚类方法对于异常值是十分敏感的,他甚至能扭曲我们的聚类方案。因此,我们需要筛选和删除异常点,或者使用对异常值稳健的聚类方法。
  10. 距离的计算,这是我们进行分类的判别标准。做常用的是欧几里得距离,还有曼哈顿距离、兰氏距离、非对称二元距离、最大距离等。
  11. 聚类算法的选择:层次聚类和划分聚类。
  12. 确定类的数目以及实现算法
  13. 结果的可视化展示
  14. 对聚类结果的解读及实际验证

    3.计算欧式距离

    image.png

    1. #准备数据
    2. > datat <- iris[1:4]
    3. #对数据进行标准化处理
    4. > data_scale <-scale(data)
    5. #计算距离
    6. > data_dist <- dist(data_scale)
    7. #格式处理
    8. > data_average <- as.matrix(dist_iris)

    4.层次聚类分析

    每一个观测值自成一类,每次两两合并,直至所有的类被聚到一起。具体算法如下:

  15. 定义每个观测值为一类

  16. 计算每类和其他类的距离【不同算法的主要区别】
  17. 把距离最短的两类合并成一类,这些类的个数就减少一个
  18. 重复以上步骤,直到包含所有观测值的类合并成单个的类为止 ```r

    实现层次聚类的hclust()函数

    hclust(d, method = “complete”)

    d:欧式距离矩阵

    method:计算类间距离的方法。”single”(最小距离)、”complete”(最大距离)、”average”(类平均法)、”median”(中间距离法)、”centroid”(重心法)和”ward”(离差平方和法)

可视化展示

plot(data,hang=-1) ``` 注:高度刻度代表该类合并的判定值。

该方法是贪婪的,一旦一个观测值被分配到一个类中,就不能在后面的过程中重新分配。另外,层次聚类分析难以应用到数百甚至数千观测值的大样本中,而划分聚类则对大样本分析有显著的优势。

5.划分聚类分析

观测值被分为K组,并根据给定的规则改组成具有粘性的类,主要有两种算法:K-means聚类算法和基于中心点的划分。

1.K-means聚类算法

随机选择k个中心点→把每个数据点分配到离它最近的中心点→重新计算每一类中的点到该类中心点的平均值→重新分配→直至所有观测值都不在重新被分配。

  1. #K-means聚类分析
  2. > kmeans(data,centers)
  3. #center:聚类数目
  4. #可视化聚类结果
  5. > library(ggfortify)
  6. > autoplot(kmeans(data_scale, 3),data=data_scale,label=TRUE, label.size=3, frame=TRUE)

2.围绕中心点的划分

由于K-means聚类方法是基于均值的,所以它对异常值敏感。而PAM法更加的稳健,具体步骤如下:
随机选择k个观测值,且每个都成为中心点→计算每个观测值的到各个中心的距离,即相异型→把每个观测值分配到最近的中心点→计算每个中心点到每个观测值的距离的总和→选择一个该类中不是中心的点,和中心点互换→重新吧每个点分配到据他最近的中心点→再次计算总距离,如果比原本的少,则把新的点作为中心点→重复上述步骤,直至中心点不再改变。

  1. #pan函数
  2. > library(cluster)
  3. > data_pam <- pam(data_scale,k=3,stand=TRUE)