久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

生信編程16.對有臨床信息的表達(dá)矩陣批量進(jìn)行生存分析

 健明 2021-07-14

 有一些五六年前的學(xué)生們都成長為了各個生物信息學(xué)相關(guān)公司的小領(lǐng)導(dǎo),,而且他們都有了自己的公眾號,,知乎號,,也算是一番人物,。最近他們跟我反饋面試找不到或者說很難直接考核篩選到認(rèn)真干活的生信工程師,,挺有意思的,。讓我想起來了早在生信技能樹論壇創(chuàng)立之初我為了引流,,而規(guī)劃的200個生信工程師面試題。值得繼續(xù)分享:

200個生信工程師面試考題

生存分析簡介

在生物醫(yī)學(xué)研究中,,生存分析是非常重要和常見的分析方法,。生存分析經(jīng)常用在癌癥等疾病的研究中,例如在對某種抗癌藥物做臨床實驗時,,會首先篩選一部分癌癥患者隨機(jī)分為兩組,,一組服用該實驗藥物,,一組用對照藥物,,服藥之后開始統(tǒng)計每個患者從服藥一直到死亡的生存時間,通過考察兩組之間的病人在生存時間上是否有統(tǒng)計學(xué)差異來判斷試驗藥物是否有效,。在這種情況下,,死亡是整個實驗中重點觀測的事件,,即event。對于每個病人,,需要記錄它們發(fā)生該事件的具體時間,。因此,生存分析可以抽象的概述為,,研究在不同情況下,,特定時間發(fā)生的時間的關(guān)系是否存在差異。這些具體事件可以是死亡,,也可以是腫瘤轉(zhuǎn)移,、復(fù)發(fā)、病人出院,、重新入院等任何可以明確識別的事件,,而不同條件即為不同的分組依據(jù),可以是年齡,、性別,、地獄、某個基因表達(dá)量的高低,、某個突發(fā)的攜帶是否等等,。

兩個重要的概念:

  1. 生存概率:即Survival probability,指的是研究對象從試驗開始知道某個時間點仍然存活的概率,,可見它是一個對時間t的函數(shù),,我們將其定義為S(t)
  2. 風(fēng)險概率:Hazard probability,指的是研究對象從試驗開始到某個特定時間t之間的存活,,但在t時間點發(fā)生觀測事件如死亡的概率,,它也是對時間t的函數(shù),定義為H(t),。

我覺得這個關(guān)于生存分析的教程寫得真心不錯,,像我這樣第一次接觸生存分析的人也能理解:http://thisis./blog/index.php/2020/04/06/survival-analysis/

首先使用模擬數(shù)據(jù)來了解下生存分析和風(fēng)險分析

生存分析

目的,挑選出表達(dá)高低與生存差異存在顯著相關(guān)的基因

#首先生存模擬數(shù)據(jù),,50個病人,,200個基因
dat = matrix(rnorm(10000,mean = 8,sd=4),nrow = 200)
rownames(dat) = paste0('gene_',1:nrow(dat)) #行為基因
colnames(dat) = paste0('sample_'1:ncol(dat)) #列
os_years = abs(floor(rnorm(ncol(dat),mean = 50,sd=20))) #年齡
os_status = sample(rep(c(0,1),25)) #生存狀態(tài),0代表死亡,1代表存活

library(survival)
#創(chuàng)建一個生存對象,,
mysurv = Surv(os_years,os_status )
## [1] 40  11  24+  5  52+ 31+ 40  46  47+ 57  41+ 77+ 48+  5+ 47+ 25   5  29+ 73+

#根據(jù)公式(Kaplan-Meier),、之前擬合的Cox模型或者先前擬合的加速失效時間模型創(chuàng)建生存曲線
fit.KM = survfit(mysurv~1)

#根據(jù)基因的表達(dá)情況進(jìn)行分組,高表達(dá)組和低表達(dá)組,,然后確定每個基因的高表達(dá)組和低表達(dá)組的病人之間是否存在生存的顯著差異,,計算P值
log_rank_p <- apply(dat, 1function(values1){
  group=ifelse(values1> median(values1), 'high''low')
  kmfit2 <- survfit(mysurv~group)
  #plot(kmfit2)
  data.survdiff <- survdiff(mysurv~group)
  p.val = 1 - pchisq(data.survdiff$chisq, length(data.survdiff$n) -1)
})

#挑選出表達(dá)高低能夠顯著區(qū)分生存的基因,這些基因可以用來繪制生存曲線圖
names(log_rank_p[log_rank_p<0.05])

挑選差異最顯著的兩個基因進(jìn)行生存分析繪圖

#將p值設(shè)置為0.01的時候,,只能篩選出兩個基因 ,,我們使用這兩個基因進(jìn)行分析
diff_genes<-names(log_rank_p[log_rank_p<0.01]) 
new_dat <- as.data.frame(t(dat[diff_genes,]))
new_dat$DSS.time <- os_years*30
new_dat$DSS <- os_status
new_dat$patient <- rownames(new_dat)
library(survminer)

#確定連續(xù)表達(dá)量的最優(yōu)切割點
new.cut <- surv_cutpoint(
  new_dat,
  time = 'DSS.time',
  event = 'DSS',
  variables = c("gene_37","gene_91")
)
summary(new.cut)
plot(new.cut,'gene_37',palette = 'npg')
#以切割位點為閾值,,將信息分為high,low
new.cut <- surv_categorize(new.cut)#使用兩個基因顎高低表達(dá)信息來判斷是否與病人的生存有關(guān)
library(survival)
fit <- survfit(Surv(DSS.time,DSS) ~ gene_37+gene_91, data = new.cut)

ggsurvplot(fit,pval = TRUE, conf.int = FALSE, title = 'METABRIC'
           xlim = c(0,10000), break.time.by = 2000, risk.table.y.text.col=T
           risk.table.y.text = FALSE)

風(fēng)險分析

目的:挑選出能夠與患病風(fēng)險有相關(guān)性的基因

gender= ifelse(rnorm(ncol(dat))>1'male','female')
age = abs(floor(rnorm(ncol(dat), mean = 50, sd=20)))

cox_results <- apply(dat, 1function(values1){
  group = ifelse(values1 > median(values1), 'high','low')
  survival_dat <- data.frame(group=group, gender=gender, age= age, stringsAsFactors = F)
  #擬合比例風(fēng)險回歸模型,,使用Andersen和Gill技術(shù)公示將時間因變量,,時間因式,每個主題的多個時間以及其他或者的內(nèi)容都納入計算
  m = coxph(mysurv~age + gender + group, data = survival_dat)
  
  beta <- coef(m)
  se = sqrt(diag(vcov(m)))
  HR <- exp(beta)
  HRse = HR * se
  
  tmp = round(cbind(coef = beta, se=se, z = beta/se, 
                    p = 1-pchisq((beta/se)^2,1), 
                    HR = HR, HRse= HRse, 
                    HEz = (HR-1)/HRse, HRp=1-pchisq(((HR-1)/HRse)^21),
    HRCILL = exp(beta - qnorm(.9750,1)*se),
    HRCIUL = exp(beta + qnorm(.97501)*se)),3)
  return(tmp['grouplow',])
})

#挑選出能夠能夠顯著預(yù)測是否有致病風(fēng)險的基因
cox_results[,cox_results[4,]<0.05]

使用CGDS數(shù)據(jù)庫的乳腺癌表達(dá)數(shù)據(jù)進(jìn)行生存分析

library(cgdsr)
#install.packages("cgdsr")
#DT是DataTables的R接口,,使得R的數(shù)據(jù)對象可以在HTML界面中以表格的形式展示
library(DT)

#cgdsr是一個用來訪問MSKCC Cancer Genomics Data Server(CGDS)中的數(shù)據(jù)的包
#從CGDS的終端URL創(chuàng)建一個連接對象
mycgds = cgdsr::CGDS("http://www./")
#為CGDA函數(shù)的調(diào)用設(shè)置詳細(xì)的日志級別
setVerbose(mycgds, TRUE)
#從CGDS中獲取可用的癌癥研究
all_TCGA_studies = getCancerStudies(mycgds)
#從CGDS中查詢到的所有可用的數(shù)據(jù)信息以網(wǎng)頁的形式展示
DT::datatable(all_TCGA_studies)
#從某個特定的癌癥研究中獲得可用的遺傳數(shù)據(jù)
all_gen_pro = getGeneticProfiles(mycgds, 'brca_metabric')
#獲得特定癌癥研究中可用的病例列表
DT::datatable(all_gen_pro)
all_tables <- getCaseLists(mycgds, 'brca_metabric')

#通過查看all_gen_pro可以看到很多可用的數(shù)據(jù),,我們挑選mRNA的表達(dá)數(shù)據(jù)
my_dataset <- 'brca_metabric_mrna'
my_table <- 'brca_metabric_mrna'
#檢索基因以及遺傳特征的基因組數(shù)據(jù),第二個參數(shù)為目標(biāo)基因,是必須要求的,,這里以
#"BCL11A","MBNL1"兩個基因為例
exp<-getProfileData(mycgds,c("BCL11A","MBNL1"), my_dataset,my_table)
exp$patient = rownames(exp)

#獲取臨床信息
cil_dat = getClinicalData(mycgds, my_table)
head(cil_dat)
DT::datatable(cil_dat,
              extensions = "FixedColumns",
              options = list(
                scrollX=TRUE,
                fixedColumns = TRUE
              ))

#查看臨床信息,,然后取出重要的兩列
colnames(cil_dat)
cil_dat_1 <- cil_dat[,c("OS_MONTHS","VITAL_STATUS")]
cil_dat_1$patient <- rownames(cil_dat)

#將表達(dá)數(shù)據(jù)和臨床信息根據(jù)病人進(jìn)行合并
tmp <- merge(exp,cil_dat_1,by='patient')
tmp = na.omit(tmp)
#將OS_MONTHS替換為DSS.time, VITAL_STATUS替換為DSS
colnames(tmp)[4] = 'DSS.time'
colnames(tmp)[5] = 'DSS'
tmp$DSS = ifelse(tmp$DSS=='Died of Disease',1,0)
tmp$DSS.time = tmp$DSS.time*30

library(survminer)
#確定連續(xù)表達(dá)量的最優(yōu)切割點
tmp.cut <- surv_cutpoint(
  tmp,
  time = 'DSS.time',
  event = 'DSS',
  variables = c("BCL11A","MBNL1")
)
summary(tmp.cut)
plot(tmp.cut,'BCL11A',palette = 'npg')
#以切割位點為閾值,將信息分為high,,low
tmp.cut <- surv_categorize(tmp.cut)#使用兩個基因顎高低表達(dá)信息來判斷是否與病人的生存有關(guān)
library(survival)
fit <- survfit(Surv(DSS.time,DSS) ~ BCL11A+MBNL1, data = tmp.cut)

ggsurvplot(fit,pval = TRUE, conf.int = FALSE, title = 'METABRIC'
           xlim = c(0,10000), break.time.by = 2000, risk.table.y.text.col=T
           risk.table.y.text = FALSE)

DT可以將很長的數(shù)據(jù)表格以網(wǎng)頁的形式進(jìn)行展示,,

生存分析結(jié)果如下:


文末友情推薦

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多