生存曲線一個循環可以畫太太太太太太多多多多多多圖了吧

2021-02-19 挑圈聯靠

各位解螺旋的小夥伴們大家周日好,我是先鋒宇,歡迎大家來到每周日的先鋒宇專欄。上一期的推文我們打開了基因組學的大門,不知道大家對於好看又好吃的棒棒糖圖有沒有留下深刻的印象呢?棒棒糖雖好,但是也不要貪吃哦。今天小編繼續給大家帶來另外一份大餐,我們來進行生存曲線再一次的批量繪製,這一次我們把目光從轉錄組學移到基因組學,我們在基因組學進行基因突變生存曲線的批量繪製,小夥伴們有沒有很心動呢?那懷著愉悅的心情和小編一起來學習一下吧。

生存曲線的繪製對於生信分析是非常重要的,往往在一篇文章中我們看到肯定不止繪製一條生存曲線,而是有很多條生存曲線。先鋒宇老師很喜歡說一句話:機械重複的工作拿給機器來完成。所以我們應該擺脫機械重複的工作,而應該用更多的時間來享受生活。那麼今天我們就一起來看看基因組學的生存曲線批量繪製能不能提升我們的科研效率呢?

經過上一期推文的講解,我們已經從Xena下載了胃癌的基因組學數據以及過濾掉了不引起胺基酸改變的突變,得到了如下的數據框(這一步不清楚的同學可以去複習一下先鋒宇老師上一期的推文:小白重頭學習基因組學分析,從繪製棒棒糖圖開始)

那接下來為了繪製每個基因突變與否的批量生存曲線,我們首先需要去構建突變矩陣,指明基因在哪些樣本是突變的,哪些樣本是不突變的。所以我們首先需要提取上面這個數據框的前兩列(這裡不懂突變矩陣沒關係,看完了你就都明白了)

mutation_matrix <- verscan2_code %>% dplyr::select(1,2)

可以看到這兩列數據是一個明顯的長數據,裡面只有樣本對應有突變的基因,所以我們先添加一列mutation,在後面標記上這些都是樣本裡面的有突變的基因。

mutation_matrix$group <- c("mutation")

可以看到我們添加了一列信息來指明這些樣本中的基因是突變的,這在我們接下來構建突變矩陣的時候非常有用。接下來我們需要對突變矩陣去重,因為一個樣本的同一個基因發生不同的突變我們在突變矩陣裡面就只需要知道它是mutation,不需要管具體的突變方式。所以我們這裡使用unique函數進行去重複。

mutation_matrix <- unique(mutation_matrix)

可以看到去重之後我們去掉了20000多行,那麼接下來我們就需要把這個長數據變成寬數據,也就是我們習慣的矩陣的形式,這樣才便於我們進行作圖。長寬數據轉換在R裡面用到的也比較多,還不會的小夥伴們也可以參考我之前的推文,我詳細介紹了長寬數據轉換的三種方法,這裡我們使用比較常用的pivot_wider函數進行轉換,函數作用和名字一樣,把數據變wider。

mutation_matrix1 <- pivot_wider(mutation_matrix,                               names_from = "Sample_ID",                               values_from = "group")

可以看到變為寬數據之後,列名為樣本名,然後我剛剛加的一列標籤(mutation)在這裡就起作用啦,當數據變為寬數據之後,我們就能看到哪些基因在哪裡樣本裡面是突變的,而沒有突變的在這裡就是NA,那麼接下來我們再把NA全部變為wild(野生型)就可以啦。

mutation_matrix1 <- mutation_matrix1 %>% column_to_rownames("gene")mutation_matrix1[is.na(mutation_matrix1)] <- c("wild")

可以看到突變矩陣就構建好了,那麼接下來我們為了要繪製生存曲線,我們接下來就需要把TCGA樣本的生存數據引入進來,前面先鋒宇專欄的推文已經講解了生存數據的下載和讀取,這裡就不加贅述啦,我們接下來讀取TCGA胃癌的生存數據。

stad_survival <- read_tsv("TCGA-STAD.survival.tsv.gz") %>% dplyr::select(1,2,4)colnames(stad_survival) <- c("sample", "fustat", "futime")stad_survival$futime <- stad_survival$futime/365

可以看到我們把TCGA胃癌病人的生存信息讀入了,那麼接下來我們就把突變矩陣和生存信息進行整合,根據TCGA樣本講兩個數據框整理為一個數據框,我們這裡仍然不使用merge函數,我們使用更為簡單的inner_join函數來進行操作

mutation_matrix2 <- t(mutation_matrix1) %>% as.data.frame() %>% rownames_to_column("sample")mutation_survival <- inner_join(stad_survival, mutation_matrix2,                               by = "sample")

可以看到我們把胃癌病人的生存信息與基因突變信息整合起來,這樣接下來我們就可以進行基因突變生存曲線的批量繪製啦。

首先為了降低難度,我們仍然先進行一條生存曲線的繪製,所以我們提取前面4列,只保留矩陣的第一個基因和生存信息。

gene_survival <- mutation_survival %>% dplyr::select(1,2,3,4)

接下來我們進行生存曲線的繪製,我們首先打開survminer和survival包,方便我們調用survdiff函數來計算pvalue。

library(survminer)library(survival)diff=survdiff(Surv(futime, fustat) ~ gene_survival[[4]],data = gene_survival)pValue=1-pchisq(diff$chisq,df=1)

接下來我們使用survfit來構建一個生存函數,並使用ggsurvplot函數來進行生存曲線繪製。

fit <- survfit(Surv(futime, fustat) ~ gene_survival[[4]],data = gene_survival)ggsurvplot(fit,           data=gene_survival,          conf.int=TRUE,          pval=pValue,          pval.size=6,          legend.labs=c("mutation", "wild"),          legend.title="CLSTN1",          xlab="Time (years)",          ylab="Overall survival",          break.time.by = 1,          risk.table.title="",          palette=c("#d7191c", "#1a9641"),          risk.table=T,          risk.table.height=.25)

可以看到一張可以用於發表的基因組的生存曲線就繪製好啦。

一張生存曲線繪製好了,但是這還遠遠不敢,成年人的世界裡我們不做選擇,而是全部都要,所以我們就要對生存曲線進行批量出圖,其實總的思想跟前面講的轉錄組也是一樣的,主要的區別就是這裡不是基因的表達量,而是基因的突變信息,同樣是按照列對每個基因分別進行生存曲線的繪製。

for (gene in colnames(mutation_survival[4:17413])) { diff=survdiff(Surv(futime, fustat) ~ mutation_survival[[gene]],data = mutation_survival) pValue=1-pchisq(diff$chisq,df=1) fit <- survfit(Surv(futime, fustat) ~ mutation_survival[[gene]],data = mutation_survival) surPlot = ggsurvplot(fit,             data=gene_survival,            conf.int=TRUE,            pval=pValue,            pval.size=6,            legend.labs=c("mutation", "wild"),            legend.title=gene,            xlab="Time (years)",            ylab="Overall survival",            break.time.by = 1,            risk.table.title="",            palette=c("#d7191c", "#1a9641"),            risk.table=T,            risk.table.height=.25) pdf(file=paste0("survival/",gene,".pdf"), onefile=FALSE, width=6.5, height=5.5) print(surPlot) dev.off()}

這裡我們使用for循環對於列進行循環,最終我們可以得到10000多個基因突變信息的生存曲線圖,大家只需要慢慢挑選自己想要的基因的生存曲線圖進行展示即可。

機械重複的工作我們應該儘可能交給計算機去完成,如果我們每天就是去做機械重複的工作,比如這裡我們去重複幾百次甚至上萬次一樣的操作去繪製想要的生存曲線,那這樣科研的效率就會大打折扣,有些時候學會適當的偷懶,把這些時間用來享受生活,這才是我們應該經歷的人生,而不是永遠沉浸在科研的無底洞裡面,看不到盡頭。

好啦,今天的生存曲線批量繪製就到這裡結束啦,希望這道大餐能給冬日冷冷的天氣裡面增加一絲暖意。我是先鋒宇,我們下周日繼續相約挑圈聯靠的先鋒宇專欄,我們不見不散。

往期傳送門:

讓生信工作者失業的神器——DrBioRight,真捨不得告訴你!

高效數據清洗!這個R包太強大了!你一定要試試!(文末附贈小彩蛋)

一站式分析R包來了,承包了生信各種分析!太全能了!

搞定這一步,說明你學R有天賦!TCGA數據從下載到差異分析(附代碼)

別走,baby,COX森林需要你

生存曲線居然能夠批量繪製了

ROC居然能夠批量篩選

TCGA轉錄組和臨床信息聯合分析,結果發現.

小白重頭學習基因組學分析,從繪製棒棒糖圖開始

歡迎大家關註解螺旋生信頻道-挑圈聯靠公號~





2021年國自然申請指南已公布

2021申請國自然還很迷茫?
國自然申請指南找不到重點?
酸談為你解讀最新國自然申請指南!

本周四酸談老談直播主題
---2021年國自然申請指南解讀---

下方視頻號點擊預約直播
  酸菜老談助你衝刺國自然!

周四酸談直播基本信息

主題:《2021年國自然申請指南解讀》
日期:1月21日 18:00—20:00


相關焦點

  • 房東太太什麼梗?英雄聯盟S10房東太太意思出處介紹[多圖]
    英雄聯盟S10賽事的評論下全部都是房東太太,這個房東太太究竟是什麼意思?大家在抖音或者微博中看到房東太太卻並不輕蹙具體的含義,今天我們就來了解一下在S10小組賽評論下房東太太的意思,各位可以看一看。在比賽中,SN前期打的十分有血性,前期硬是操作出了優勢,但中期時因為太浪被G2守住了好幾波,後期的G2依靠賽納打贏兩波,但倒數第二波團戰後G2的閃現都七七八八,SN的船長終於可以TP繞後,最後兩個暴擊筒子直接將G2賽納秒殺,一波結束比賽。
  • 戴眼鏡的人真是太太太太太慘了!
    因為說到戴眼鏡的難處,實在是太太太太有共鳴了。對戴眼鏡的人來說,冬天實在太不友好。一進門就是兩個白片。吃個火鍋也得摘眼鏡。吃碗熱湯麵也得摘掉眼鏡。為愛鼓掌也得先摘眼鏡。知道大家工作學習都特別辛苦,但還是好好愛護自己的眼睛吧,那可是你心靈的落地窗啊。最後說一下,翻白眼可以緩解眼部疲勞。親測有效,不信你現在就試試。如果你也被戳中,歡迎把文章分享給朋友們哦!
  • 房東太太是什麼梗 彈幕獎勵房東太太是什麼意思出處在哪
    房東太太是什麼梗 彈幕獎勵房東太太是什麼意思出處在哪 最近不少朋友在B站或者其他社交論壇上看到有一個很好玩的梗
  • 《三十而已》中被王太太認錯的,究竟是怎樣的名畫?
    王太太聽了顧佳的話以後略帶驕傲地回答買贗品多掉價,這是在拍賣會拍下的梵谷的《睡蓮》……剛剛還在感嘆有錢人的生活的顧佳這時突然變得不自然了,因為她知道王太太犯了一個非常簡單的常識錯誤,就像後來幾乎和王太太翻臉時說的那樣:
  • 古人怎麼稱呼妻子,也是稱為「太太」嗎?
    現在,人們常常把自己的妻子稱為「太太」。在古代,「太太」一詞是不能亂稱的,它有嚴格的等級分界線。   明清時代,「太太」一詞專指一二品官員的妻子,一般人是不能稱「太太」的。明代胡應麟《甲乙剩言·邊道詩》中說,明代中丞以上官吏之妻稱太太。
  • 李榮浩:我的貓真的太太太太太粘人了!
    最近,李榮浩又更新了一條關於貓的微博,這次說的是自己家的貓太太太太粘人了。不得不說,這個內容也有點太可愛了!每天睡覺必須摟著睡,沒有第二個選項09睡覺,玩手機,洗澡,學習,它無處不在,我覺得它沒有自己的生活,每天都是圍著我轉10一睜眼就是一張大臉11經常抱著我,像一個一個樹懶一樣
  • 「老魏太太」你準備啥時候休息?
    「老魏太太」你準備啥時候休息?而信息的主角就是被同事和居民們暱稱為「老魏太太」的新加坡城社區副主任魏巍。  也許是軍屬的緣故,多年「上班帶娃連軸轉、工作生活一肩挑」的兩地生活,鍛造了魏巍鋼鐵般的意志和捨身奉獻的特質。在這次全民核酸檢測的工作中,六天裡她已經連續奮戰了近百個小時!
  • 王太太刷新了我對土豪的認知,沒有文化就是有錢,氣人不!
    王太太刷新了我對土豪的認知,沒有文化就是有錢,氣人不! 最近《三十而已》火了,該劇是以三位三十歲女性的視角展開,講述她們在三十歲的節點上,遭遇的壓力和抉擇的故事。三條故事線都很精彩,不過最出彩的當屬童瑤飾演的顧佳這條線,完成度很高且真實,值得細細品味。
  • 虐戀文:「陸太太,我懷孕了,孩子是景琛的!」
    作為一個老書蟲,小編也是非常明白大家的感受。今天小編給大家獻上:虐戀文:「陸太太,我懷孕了,孩子是景琛的!」《枕上豪門:冷血總裁的心尖妻》作者:簡小喬簡介:她遇見了一個天神一般美好的男人,這個男人居然與他的新婚丈夫長得一模一樣……雙生子?雙胞胎?他究竟是誰?
  • 沒文化真可怕,「梵谷的睡蓮」讓闊太太露怯成了笑柄!
    這兩天追熱劇《三十而已》,其中女主角顧佳為了孩子能上好的幼兒園,去求富婆王太太的橋段,讓「梵谷的睡蓮」火了,引發了網友的群嘲。劇中王太太的確是個有錢人,但她淺薄的文化和藝術無知讓曾經的學霸顧佳智商和自尊受到了傷害。
  • 鬼滅之刃 雜食黨跟著這位太太吃糖吧!
    鬼滅之刃 雜食黨跟著這位太太吃糖吧! 圖源來自網絡,侵刪聯繫 喜歡看此類消息的小夥伴們 可以點個關注 小宅每周不定時都會為大家推送
  • 「全職太太」別說「full-time wife」,別人會很生氣!
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——全職太太, 這個短語的含義不是指「full-time wife」,這個短語首先很奇怪,如果直譯過來就是「全職的妻子」,言下之意就還有「part-time wife」,兼職的妻子。所以不要亂說。
  • 妻子當全職太太,是受教育女性最大的浪費嗎
    #如何看待華坪女高張桂梅校長反對女生做全職太太?受教育女性當全職太太是浪費嗎?#今天,知乎上一個話題被熱議:如何看待華坪女高張桂梅校長反對女生做全職太太?受教育女性當全職太太是浪費嗎?我們先來看一下全職太太在詞典裡的定義:一般是指沒有工作或辭去工作,只在家裡照顧一家人衣食起居的女人,又稱家庭主婦。所謂全職就是指專心在做一項事情,當然,這也是相對而言的。敲3遍黑板:全職太太是一個職業,我們應該尊重和承認這個職業的社會屬性。1.
  • 《小婦人》馬奇太太的養女之道:讓孩子成為更好的自己
    馬奇太太不認同艾美的婚姻觀,但她信任自己的女兒,認為她是一個聰明清醒的女孩,完全有能力為自己的人生做最重要的決定。艾美沒讓母親失望,故事的結尾,艾美嫁給了愛情又擁有麵包,真正成為了一位優雅的上流社會的社交女王。這應該就是信任的力量。
  • 紀念|再見,詹姆斯·邦德太太
    說起來,性感的「邦女郎」是007電影創世之初便確立下的「必備元素」,儘管一直以來為女權主義所詬病,新世紀後「邦女郎」片中的話語聲量逐漸同男主看齊均衡,乃至今年11月即將公映的第25部007電影《無暇赴死》中,007的番號已然被一位黑人女性「褫奪」……但黛安娜飾演的崔西,永遠是一個特殊的存在——如製片人所言,她是橫亙半個多世紀的系列電影中,唯一同邦德有過婚約並正式舉行婚禮的女性。
  • 新冠疫情竟然影響了全球天氣預報,這個知識太太太太冷門了
    利用飛機導航系統和空速系統,計算飛機相對於地面的速度和空氣相對於飛機速度的矢量差,來獲得風場數據;通過鉑電阻測溫元件可以獲得不同高度層的溫度。如果在民航飛機上加裝水蒸氣傳感器,就能探測空中的溼度、冰粒有效密度等雲物理量,簡直就是空中氣象臺。
  • 現場真的是太太太火爆了!
    現場真的是太太太火爆了! 各位策術師,大家好! BW現場真的是太太太火爆了 快來跟著小編的鏡頭一起去看看吧!
  • 英媒十大非足球太太 英超巨星得不到的美女(圖)
    「這些美女沒有一個會在夜總會中向英超球星投懷送抱。」月18日報導:謝莉爾、科琳、庫蘭和託妮等英超太太團主要成員在英格蘭備受寵愛,她們的一舉一動無不是英國小報關注的事情。
  • 《三十而已》顧佳和太太們交往時就已犯了「大忌」,被騙也是必然
    他們兩個原本是打算撤回止損,就當花錢買了一個教訓。可是,這個村子裡的一景一物夫妻倆看了一天,認為關廠會影響到太多的人,那樣自己等於是以失敗者的姿態回到太太圈。只能暫時先吃了這個啞巴虧。顧佳為了追求利益打入太太圈,最終因為利益被太太套路了,實在是諷刺。顧佳沒入圈以前,這些太太不過是聚到一起喝喝下午茶,練練縫紉,品品油畫,一切都是安逸閒適,風平浪靜。
  • 【乾貨】老婆、妻子、太太、丈夫,這些稱呼都是怎麼來的?
    太太 " 漢哀帝時,「太太」原為尊稱老一輩的王室夫人。到後來,漢室又稱皇太后為皇太太后。太太的稱謂,漢代在貴族婦女中逐漸推廣起來。 明代時稱太太要具備這樣的條件:「凡士大夫妻,年來三十即呼太太」,即司眷屬,中丞以上的官職才配稱太太。清朝的人,則喜歡叫家庭主婦為太太,不過都以婢僕呼女主人的居多。