有两种方法可以安装
1.先安装BiocManager
install.packages("BiocManager")
library("BiocManager")
BiocManager::install("phyloseq")
library("phyloseq")
2.source("https://bioconductor.org/biocLite.R")
biocLite("phyloseq")
#安装phyloseq
library("phyloseq")
安装并加载了phyloseq包后,开始读取数据,前面计算α多样性,用到的是read.table……
qiimedata <- import_qiime(otufilename = "feature-table.taxonomy.txt", mapfilename = "mapping_file.txt", treefilename = "tree.rooted.nwk", refseqfilename = "dna-sequences.fasta")
#读取数据,参数都是文件名,注意加后缀
#otufilename指定out表格,mapfilename指定map文件(分组数据)
#treefilename指定有根进化树文件
#refseqfilename指定代表序列文件
otu<-qiimedata@[email protected]
#从qiimedata里面提取otu
sum_of_otus<-colSums(t(otu))
#t_转置,colsums计算列的和,即计算各个otu检测到的总序列数,为了筛掉一些总序列数过低的otu(可能是测序错误)
sum_of_otus
#查看otu总序列数
selected_otu<-names(sum_of_otus)[sum_of_otus>10]
#获取总序列数大于10的otu id
sub_qiimedata <- prune_taxa(selected_otu, qiimedata)
#筛选总序列数大于10的otu的phyloseq数据
weighted_unifrac<-distance(sub_qiimedata,method = 'wunifrac')
#计算样本间加权unifrac
unweighted_unifrac<-distance(sub_qiimedata,method = 'unifrac')
#计算样本间非加权unifrac
bray_curtis <- distance(sub_qiimedata, method='bray')
write.table(as.matrix(bray_curtis),"bray_curtis.txt",sep = '\t',quote = FALSE,col.names = NA)
#保存距离矩阵
#计算样本间Bray-Curtis距离矩阵,method 可选" wunifrac ", " unifrac " ,"jaccard"等
pcoa_of_bray_curtis<-ordinate(physeq=sub_qiimedata,distance = 'bray',method = "PCoA")
#基于Bray-Curtis距离矩阵的PCoA排序分析
p<-plot_ordination(sub_qiimedata, pcoa_of_bray_curtis, type="samples", color="Group1",shape = "Group1")
#将PCoA排序分析结果可视化
library("ggplot2")
p<-p+ scale_colour_manual(values=c("#DC143C","#808000","#00CED1")) + geom_point(size=2) +ggtitle("PCoA of Bray-Curtis distance")+theme(text = element_text(size = 15))
#修改图形大小,ggtitle加标题,stat_ellipse加椭圆
#用scale_colour_manual(values=c())自定义颜色,可查颜色的16进制对照表
p
nmds_of_bray_curtis<-ordinate(physeq=sub_qiimedata,distance = 'bray',method = "NMDS")
#基于Bray-Curtis距离矩阵的NMDS排序分析
p1<-plot_ordination(qiimedata, nmds_of_bray_curtis, type="samples", color="Group1")
#将NMDS排序分析结果可视化
# color=“Group1”指定不同分组的点染不同颜色
p1
p1<-p1+ geom_point(size=3) +ggtitle("NMDS of Bray-Curtis distance") + stat_ellipse()+theme(text = element_text(size = 15))
#对图片进行适当修饰, stat_ellipse()加椭圆, ggtitle()加标题
ggsave(plot = p1,“nmds_of_bary_curtis.pdf",dpi = 300,width
PCoA中的两个点距离,接近β多样性指数
PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,首先利用线性变换,将数据变换到一个新的坐标系统中然后再利用降维的思想,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。
PCoA(Principal Co-ordinates Analysis)分析即主坐标分析,可呈现研究数据相似性或差异性的可视化坐标,是一种非约束性的数据降维分析方法,可用来研究样本群落组成的相似性或相异性。它与PCA类似,通过一系列的特征值和特征向量进行排序后,选择主要排在前几位的特征值,找到距离矩阵中最主要的坐标,结果是数据矩阵的一个旋转,它没有改变样本点之间的相互位置关系,只是改变了坐标系统。两者的区别为PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标。
NMDS图中两个点的距离的排序,接近β多样性指数的排序
孟德尔随机化(Mendelian randomization,MR)是以孟德尔独立分配定律为基础进行流行病学研究设计和数据分析,论证病因假说的一种方法。由基因型决定中间表型(暴露)的差异, 因果方向明确。通过引入一个称之为工具变量的中间变量,来分析暴露因素和结局之间的因果关系
2.孟德尔随机化 vs RCT
孟德尔随机化的目的不是估计遗传效应的大小,而是估计暴露对结果的因果效应,所以与遗传变异相关的结局的平均变化幅度可能与干预措施导致的变化幅度不同
即使遗传变异与结果之间的关联程度很小,暴露的人群归因风险也不一定很低,因为暴露可能会比遗传变异解释更大的变化程度(例如,他汀类药物对低密度脂蛋白胆固醇水平的影响比低密度脂蛋白胆固醇水平与HMGCR基因变异的关联要大几倍,因此对后续结果的影响更大。)
孟德尔随机化要求大样本研究,变异发生率不能太小(最小等位基因频率MAF>5%)
3.工具变量
工具变量本身是一个计量经济学的概念,在孟德尔随机中,遗传变异被用作工具变量评估暴露对结局的因果效应,遗传变异满足工具变量的基本条件总结为(孟德尔随机化核心假设):
关联性假设——遗传变异与暴露有关
独立性假设——该遗传变异与暴露-结果关联的任何混杂因素均不相关
排他性假设——该遗传变异不会影响结果,除非可能通过与暴露的关联来实现
某研究组想了解非洲村落里的儿童补充维生素A和其死亡情况的关联,如果仅仅利用维生素A的服用情况和死亡情况去判断两者的关联,那极有可能会产生很大的偏倚,这是因为维生素A的服用情况和很多潜在因素相关,比如家庭的经济困难程度、家庭成员以及实验儿童的依从性,而这些潜在的因素也可能对儿童的身体健康有很大的影响。因此,在研究起始设计中,研究者便利用工具变量来解决这个问题。
在这里,工具变量Z是指服用维生素A这个任务,类似于随机抽签。这样的话工具变量Z便只和X服用维生素A这个行为相关,与除X以外的混杂因素不相关。
4.应用范围
行为因素与健康:基因变异引起各个倾向某行为,决定暴露状态。如ALDH2变异引起乙醛代谢障碍,改变饮酒行为,不同ALDH基因型代表饮酒量多少;
机体代谢产物与疾病关系,估计长期效应。代谢产物是基因表达的中间表型,酶的底物或者体外难测量的代谢指标:如LDL受体基因变异引起家族高胆固醇血症,比较不同基因型之间CHD发病情况的差异,可模拟血胆固醇水平和CHD发病关系;
子宫内环境暴露于子代健康关系。
5.发文分析
孟德尔随机化研究均发表在影响因子5分以上的期刊中
6.基础分析流程——TwoSampleMR
找工具变量,我们要的是基因作为工具变量,这些基因都是从别人的研究中挑出来的,所有的基因研究有个专门的库叫做genome wide association studies (GWAS)。我们需要做的就是从这个库中挑出来我们自己需要的和我们暴露相关的基因变量SNPs。
估计工具变量对结局的作用,工具变量对结局的作用也是从所有的研究中估计出来的整体效应,这样可以拒绝单个研究的偏倚。
合并多个SNP的效应量,这个效应量是我们得到暴露和结局因果效应的前提。
处理数据,用合并后的数据进行孟德尔随机化分析和相应的敏感性分析。
7.TwoSampleMR代码实现
安装相关R包
install.packages('devtools')
library('devtools')
install_github("MRCIEU/TwoSampleMR") #安装TwoSampleMR包
library('TwoSampleMR')
devtools::install_github("mrcieu/ieugwasr",force = TRUE)
获取MR base的表型ID,将结果保存为pheno_info.csv这个文件
ao <-available_outcomes(access_token=NULL) #获取GWAS数据,但近期Google限制,容易被墙
write.csv(ao,'pheno_info.csv',row.names=F)#将数据写入本地存储
查看pheno_info.csv文件,获取与暴露相关的工具变量的信息以及结局信息。这里选择暴露为obesity class 2 (ID = 91), 结局为 type 2 diabetes (ID = 1090)
exp_dat <- extract_instruments(outcomes=91,access_token=NULL)
obesity_exp_dat <- clump_data(exp_dat)
t2d_out_dat <- extract_outcome_data(snps=obesity_exp_dat$SNP, outcomes=1090, access_token=NULL)#提取结果信息
dat <- harmonise_data(exposure_dat =obesity_exp_dat, outcome_dat= t2d_out_dat)#数据合并,计算基因对结局的合并效应量
孟德尔随机化
results <- mr(dat)
OR值
OR <- generate_odds_ratios(results)
异质性检验
heterogeneity<- mr_heterogeneity(dat)
多效性检验
pleiotropy<- mr_pleiotropy_test(dat)
逐个剔除检验
leaveoneout<- mr_leaveoneout(dat)
散点图
mr_scatter_plot(results,dat)
森林图
results_single<- mr_singlesnp(dat)
mr_forest_plot(results_single)
漏斗图
mr_funnel_plot(results_single)
实例解析
2022年10月10日
西安交通大学生物医学信息与基因组学中心杨铁林教授团队在Nature Neuroscience (IF=28.771)期刊发表了题为:Mendelian randomization analyses support causal relationships between brain imaging-derived phenotypes and risk of psychiatric disorders 的文章。
研究背景
精神类疾病是一组脑功能紊乱的复杂疾病,会导致情感、认知和行为受到干扰和破坏。全球约有数亿人患有不同的精神障碍,被列为严重的公共卫生问题。近年来,脑影像学数据在脑疾病和功能的研究中受到广泛关注。以核磁共振成像为代表的脑影像技术,可用于活体无创定量评估人脑结构、连接和功能的特性。
虽然已有大量的观察性研究证据表明,精神疾病患者与健康正常人的脑影像表型存在显著差异,但脑影像学数据与精神障碍发病机制的因果关系尚不明确,探讨脑影像表型对精神疾病的因果作用具有重要的生物学和临床研究意义。
研究方法和结果
该研究基于大规模基因组数据,对常见的10种精神类疾病(包括注意力缺陷多动症、神经性厌食症、焦虑症、孤独症、双相情感障碍、抑郁症、强迫症、创伤后应激障碍、精神分裂症、抽动症)和587个关键的脑磁共振成像(MRI)结构表型进行了因果关系评估。
正向孟德尔随机化结果发现,脑白质纤维束的上额枕束的FA值和上放射冠的ICVF值、胼胝体内矢状层的MD值、第三脑室的体积等9个脑影像表型是精神分裂症、神经性厌食症和双相情感障碍的风险因素。进一步通过反向孟德尔随机化分析显示,发现精神分裂症的发生会导致额下回眶部的表面积和体积的增加。
该研究将基因组信息作为纽带,使脑影像表型和精神疾病联系起来,避免了观察性研究中由于药物或环境、生活方式等改变引起的样本检测数据偏差的缺点,确保了研究结果的稳健性。
多元线性回归 是 简单线性回归 的扩展,用于基于多个不同的预测变量(x)预测结果变量(y)。
例如,对于三个预测变量(x),y的预测由以下等式表示: y = b0 + b1*x1 + b2*x2 + b3*x3
回归贝塔系数测量每个预测变量与结果之间的关联。“ b_j”可以解释为“ x_j”每增加一个单位对y的平均影响,同时保持所有其他预测变量不变。
在本节中,依然使用 datarium 包中的 marketing 数据集,我们将建立一个多元回归模型,根据在三种广告媒体(youtube,facebook和报纸)上投入的预算来预测销售。计算公式如下: sales = b0 + b1*youtube + b2*facebook + b3*newspaper
您可以如下计算R中的多个回归模型系数:
请注意,如果您的数据中包含许多预测变量,则可以使用 ~. 以下命令将模型中的所有可用变量简单地包括在内:
从上面的输出中,系数表显示β系数估计值及其显着性水平。列为:
如前所述,您可以使用R函数轻松进行预测 predict() :
在使用模型进行预测之前,您需要评估模型的统计显着性。通过显示模型的统计摘要,可以轻松地进行检查。
显示模型的统计摘要,如下所示:
摘要输出显示6个组件,包括:
解释多元回归分析的第一步是在模型摘要的底部检查F统计量和关联的p值。
在我们的示例中,可以看出F统计量的p值<2.2e-16,这是非常重要的。这意味着 至少一个预测变量与结果变量显着相关 。
要查看哪些预测变量很重要,您可以检查系数表,该表显示了回归beta系数和相关的t统计p值的估计。
对于给定的预测变量,t统计量评估预测变量和结果变量之间是否存在显着关联,即,预测变量的beta系数是否显着不同于零。
可以看出,youtube和facebook广告预算的变化与销售的变化显着相关,而报纸预算的变化与销售却没有显着相关。
对于给定的预测变量,系数(b)可以解释为预测变量增加一个单位,同时保持所有其他预测变量固定的对y的平均影响。
例如,对于固定数量的youtube和报纸广告预算,在Facebook广告上花费额外的1000美元,平均可以使销售额增加大约0.1885 * 1000 = 189个销售单位。
youtube系数表明,在所有其他预测变量保持不变的情况下,youtube广告预算每增加1000美元,我们平均可以预期增加0.045 * 1000 = 45个销售单位。
我们发现报纸在多元回归模型中并不重要。这意味着,对于固定数量的youtube和报纸广告预算,报纸广告预算的变化不会显着影响销售单位。
由于报纸变量不重要,因此可以 将其从模型中删除 ,以提高模型精度:
最后,我们的模型公式可以写成如下:。 sales = 3.43+ 0.045*youtube + 0.187*facebook
一旦确定至少一个预测变量与结果显着相关,就应该通过检查模型对数据的拟合程度来继续诊断。此过程也称为拟合优度
可以使用以下三个数量来评估线性回归拟合的整体质量,这些数量显示在模型摘要中:
与预测误差相对应的RSE(或模型 sigma )大致代表模型观察到的结果值和预测值之间的平均差。RSE越低,模型就越适合我们的数据。
将RSE除以结果变量的平均值将为您提供预测误差率,该误差率应尽可能小。
在我们的示例中,仅使用youtube和facebook预测变量,RSE = 2.11,这意味着观察到的销售值与预测值的平均偏差约为2.11个单位。
这对应于2.11 / mean(train.data $ sales)= 2.11 / 16.77 = 13%的错误率,这很低。
R平方(R2)的范围是0到1,代表结果变量中的变化比例,可以用模型预测变量来解释。
对于简单的线性回归,R2是结果与预测变量之间的皮尔森相关系数的平方。在多元线性回归中,R2表示观察到的结果值与预测值之间的相关系数。
R2衡量模型拟合数据的程度。R2越高,模型越好。然而,R2的一个问题是,即使将更多变量添加到模型中,R2总是会增加,即使这些变量与结果之间的关联性很小(James等,2014)。解决方案是通过考虑预测变量的数量来调整R2。
摘要输出中“已调整的R平方”值中的调整是对预测模型中包含的x变量数量的校正。
因此,您应该主要考虑调整后的R平方,对于更多数量的预测变量,它是受罚的R2。
在我们的示例中,调整后的R2为0.88,这很好。
回想一下,F统计量给出了模型的整体重要性。它评估至少一个预测变量是否具有非零系数。
在简单的线性回归中,此检验并不是真正有趣的事情,因为它只是复制了系数表中可用的t检验给出的信息。
一旦我们开始在多元线性回归中使用多个预测变量,F统计量就变得更加重要。
大的F统计量将对应于统计上显着的p值(p <0.05)。在我们的示例中,F统计量644产生的p值为1.46e-42,这是非常重要的。
我们将使用测试数据进行预测,以评估回归模型的性能。
步骤如下:
从上面的输出中,R2为 0.9281111 ,这意味着观察到的结果值与预测的结果值高度相关,这非常好。
预测误差RMSE为 1.612069 ,表示误差率为 1.612069 / mean(testData $ sales) = 1.612069/ 15.567 = 10.35 % ,这很好。
本章介绍了线性回归的基础,并提供了R中用于计算简单和多个线性回归模型的实例。我们还描述了如何评估模型的性能以进行预测。