高級(jí)題目

1.安裝一些R包:

if (!require("ALL")) {BiocManager::install("ALL")}
if (!require("CLL")) {BiocManager::install("CLL")}
if (!require("pasilla")) {BiocManager::install("pasilla")}
if (!require("airway")) {BiocManager::install("airway")}
if (!require("limma")) {BiocManager::install("limma")}
if (!require("DESeq2")) {BiocManager::install("DESeq2")}
if (!require("clusterProfiler")) {BiocManager::install("clusterProfiler")}
if (!require("reshape2")) {BiocManager::install("reshape2")}

以及對(duì)這些包的一些介紹:
1、ALL: DFCI麗茲實(shí)驗(yàn)室的T細(xì)胞和B細(xì)胞急性淋巴細(xì)胞白血病數(shù)據(jù)(包括2004年4月的版本)
2.CLL: CLL軟件包包含慢性淋巴細(xì)胞性白血病(CLL)基因表達(dá)數(shù)據(jù)。CLL數(shù)據(jù)包含24個(gè)樣本,這些樣本在疾病進(jìn)展方面被分類為進(jìn)行性或穩(wěn)定。
3、pasilla:該軟件包提供了從RNA-seq數(shù)據(jù)中選擇的基因計(jì)算出的每個(gè)外顯子和每個(gè)基因的讀數(shù)計(jì)數(shù),這些數(shù)據(jù)在Brooks AN,Yang L,Duff MO,Hansen的文章“果蠅和哺乳動(dòng)物之間的RNA調(diào)節(jié)圖的保守性”中發(fā)表。
4、airway:該程序包提供了一個(gè)RangedSummarizedExperiment對(duì)象,該對(duì)象是基因的讀取計(jì)數(shù),用于在用地塞米松治療的四種人呼吸道平滑肌細(xì)胞系上進(jìn)行RNA-Seq實(shí)驗(yàn)。小插圖包裝中提供了有關(guān)基因模型和讀數(shù)計(jì)數(shù)程序的詳細(xì)信息。
5、limma: 數(shù)據(jù)分析,線性模型和微陣列數(shù)據(jù)的差異表達(dá)。
6、DESeq2:估計(jì)高通量測(cè)序分析中計(jì)數(shù)數(shù)據(jù)的方差均值依賴性,并基于使用負(fù)二項(xiàng)式分布的模型測(cè)試差異表達(dá)。
7、clusterProfiler:該軟件包實(shí)現(xiàn)了分析和可視化基因和基因簇的功能概況(GO和KEGG)的方法。
8、reshape2:使用兩個(gè)函數(shù)靈活地重組和聚合數(shù)據(jù):melt和'dcast'(或'acast')。

2.了解ExpressionSet對(duì)象,比如CLL包里面就有data(sCLLex) ,找到它包含的元素,提取其表達(dá)矩陣(使用exprs函數(shù)),查看其大小

1.什么是ExpressionSet對(duì)象?
在Biobase基礎(chǔ)包中,ExpressionSet是非常重要的類,因?yàn)?Bioconductor設(shè)計(jì)之初是為了對(duì)基因芯片數(shù)據(jù)進(jìn)行分 析,而ExpressionSet正是Bioconductor為基因表達(dá)數(shù)據(jù)格式所定制的標(biāo)準(zhǔn)。它是所有涉及基因表達(dá)量相關(guān)數(shù)據(jù)在 Bioconductor中進(jìn)行操作的基礎(chǔ)數(shù)據(jù)類型,比如affyPLM, affy, oligo, limma, arrayMagic等等
ExpressionSet的組成:assayData--頭文件--experimentData

suppressPackageStartupMessages(library(CLL))#加載包
data(sCLLex)
exprSet=exprs(sCLLex)   ##提取表達(dá)矩陣,它列是各個(gè)樣本,行是每個(gè)探針I(yè)D
samples=sampleNames(sCLLex)  ##提取名字
pdata=pData(sCLLex)  ##提取臨床信息
group_list=as.character(pdata[,2])  ##強(qiáng)制轉(zhuǎn)換類型,轉(zhuǎn)換為字符型
dim(exprSet)  ##查看維度.
[1] 12625    22    #行列
exprSet[1:5,1:5]  #查看
###再做一個(gè)QC檢測(cè)
par(cex = 0.7)  #控制圖片的文字和點(diǎn)的大小.
n.sample=ncol(exprSet)
if(n.sample>40) par(cex = 0.5)
cols <- rainbow(n.sample*1.2)
boxplot(exprSet, col = cols,main="expression value",las=2)做一個(gè)箱形圖,可以查看一些特異的點(diǎn)

3.了解 str,head,help函數(shù),作用于 第二步提取到的表達(dá)矩陣

> help('str')  #str()函數(shù)來(lái)查看這個(gè)數(shù)據(jù)框當(dāng)中有哪些變量,以及變量的類型
> help('head')  #查看前面部分
> help('help')  #幫助函數(shù)
str(exprSet)  
head(exprSet)

4.安裝并了解 hgu95av2.db 包,看看 ls("package:hgu95av2.db") 后 顯示的那些變量

Affymetrix人類基因組U95設(shè)置注釋數(shù)據(jù)(芯片hgu95av2),使用來(lái)自公共存儲(chǔ)庫(kù)的數(shù)據(jù)組裝而成

BiocManager::install("hgu95av2.db")
library('hgu95av2.db')
ls("package:hgu95av2.db") 
str("package:hgu95av2.db") 

5.理解 head(toTable(hgu95av2SYMBOL)) 的用法,找到 TP53 基因?qū)?yīng)的探針I(yè)D

ls("package:hgu95av2.db") #查看hgu95av2有什么變量
head(toTable(hgu95av2SYMBOL)) #查看hgu95av2SYMBOL的前面部分的數(shù)據(jù)
ids <- toTable(hgu95av2SYMBOL)    #換為表格
TP53 <- ids[ids$symbol=='TP53',]     #選擇需要的內(nèi)容

6.理解探針與基因的對(duì)應(yīng)關(guān)系,總共多少個(gè)基因,基因最多對(duì)應(yīng)多少個(gè)探針,是哪些基因,是不是因?yàn)檫@些基因很長(zhǎng),所以在其上面設(shè)計(jì)多個(gè)探針呢?

①.探針和基因的對(duì)應(yīng)關(guān)系:
在用基因芯片中,是通過(guò)一系列已知的核酸探針,然后和帶有熒光標(biāo)記的核酸序列互補(bǔ)配對(duì),通過(guò)測(cè)定熒光強(qiáng)度最強(qiáng)的位置,獲取一組互補(bǔ)的探針序列.后期的分析,通過(guò)探針組的結(jié)果,去分析對(duì)應(yīng)的基因.一一對(duì)應(yīng).
②.總共多少個(gè)基因,基因最多對(duì)應(yīng)多少個(gè)探針,是哪些基因

attach(ids) #這樣后面訪問(wèn)的時(shí)候,就不用加$了
length(unique(symbol))  #查看長(zhǎng)度,也即是個(gè)數(shù)
[1] 8584   #一共有8584個(gè)基因symbol
table(symbol)[table(symbol)==max(table(symbol))]    查找眾數(shù),也就是出現(xiàn)最多的元素。table可以用來(lái)對(duì)數(shù)據(jù)統(tǒng)計(jì)出現(xiàn)的次數(shù)。

7.第二步提取到的表達(dá)矩陣是12625個(gè)探針在22個(gè)樣本的表達(dá)量矩陣,找到那些不在 hgu95av2.db 包收錄的對(duì)應(yīng)著SYMBOL的探針。

noin_exprSet <- exprSet[!row.names(exprSet)%in%ids$probe_id,]  #首先是提取exprSet的行名字,也就是探針,然后用%in%進(jìn)行一個(gè)邏輯判斷,是否相同.probe_id是在hgu95av2SYMBOL的行名.然后一比對(duì)
dim(noin_exprSet)
[1] 1166   22

8.過(guò)濾表達(dá)矩陣,刪除那1165個(gè)沒(méi)有對(duì)應(yīng)基因名字的探針。

exprSet <- exprSet[rownames(exprSet) %in% ids$probe_id, ]    ##原理和前面一題一樣。!是取反向操作,這題不用
dim(exprSet)

9.整合表達(dá)矩陣,多個(gè)探針對(duì)應(yīng)一個(gè)基因的情況下,只保留在所有樣本里面平均表達(dá)量最大的那個(gè)探針。

提示,理解 tapply,by,aggregate,split 函數(shù) , 首先對(duì)每個(gè)基因找到最大表達(dá)量的探針。
然后根據(jù)得到探針去過(guò)濾原始表達(dá)矩陣
思路:先把是多個(gè)探針對(duì)應(yīng)一個(gè)基因的那些探針找出來(lái)——然后再比較表達(dá)量——再過(guò)濾。X
參考答案,應(yīng)該用by函數(shù),進(jìn)行分類,把多個(gè)探針對(duì)應(yīng)一個(gè)基因的這樣的情況分類出來(lái)——再比較表達(dá)量

a <- by(exprSet,ids$symbol,      ##exprSet是需要處理的數(shù)據(jù),ids$symbol是分類的標(biāo)注。分類出每一個(gè)小的data
        function(x)     ##對(duì)每一個(gè)小的data進(jìn)行函數(shù)處理。x就應(yīng)該是代表著每一個(gè)分類出來(lái)的data
          row.names(x)[which.max(rowMeans(x))])    ##先去平均值,再找最大的值,過(guò)濾開來(lái)。
head(a)    ##看出a還是有探針和基因?qū)?yīng)的,但是我們只要探針就可以了。
INDICES
     AADAC       AAK1       AAMP      AANAT      AARS1   AASDHPPT 
"36512_at" "39463_at" "38434_at" "36332_at" "36185_at" "35761_at" 
b = as.character(a)   ##轉(zhuǎn)換數(shù)據(jù)類型
[1] "36512_at" "39463_at" "38434_at" "36332_at" "36185_at" "35761_at"    ##這樣就是有探針了,后面可以用來(lái)對(duì)exprSet進(jìn)行篩選。
exprSet <- exprSet[row.names(exprSet)%in%b,]   從前面選出來(lái)的b,對(duì)exprSet進(jìn)行篩選。
 dim(exprSet)
[1] 8584   22                    

10.把過(guò)濾后的表達(dá)矩陣更改行名為基因的symbol,因?yàn)檫@個(gè)時(shí)候探針和基因是一對(duì)一關(guān)系了。

row.names(exprSet)=ids[rownames(exprSet)%in%ids$probe_id,2]    ##邏輯判斷一下,然后更換行名。注意這個(gè)“2”。應(yīng)該是要去第二列的意思。

11、對(duì)第10步得到的表達(dá)矩陣進(jìn)行探索,先畫第一個(gè)樣本的所有基因的表達(dá)量的boxplot,hist,density , 然后畫所有樣本的 這些圖

參考:http://bio-info-trainee.com/tmp/basic_visualization_for_expression_matrix.html
理解ggplot2的繪圖語(yǔ)法,數(shù)據(jù)和圖形元素的映射關(guān)系
思路:先畫第一個(gè)樣本的圖:看著參考,要畫的圖有:boxplot、vioplot、boxplot、histogram
density、gpairs、cluster、PCA、heatmap、DEG && volcano plot————再看看能不能做個(gè)循環(huán),把所有的樣本都畫出來(lái)。

##箱形圖
p=ggplot(long_exprSet,aes(x=sample,y=value,fill=group))+geom_boxplot()
print(p)
image.png

大概是這樣的圖。x軸是22個(gè)樣本,y軸是表達(dá)量。不同顏色是每樣本人的疾病進(jìn)展情況(progres和stable)
可以得出的結(jié)論是:
①、看出每個(gè)樣本的異常值的情況。有幾個(gè)樣本的異常值特別多,比如16號(hào)樣本??有什么用?
②、看出平均值,每個(gè)樣本的表達(dá)量的平均值的??

###vioplot
p=ggplot(exprSet_L,aes(x=sample,y=value,fill=group))+geom_violin()
print(p)
image.png

什么是vioplot?
vioplot叫做小提琴圖。小提琴圖 (Violin Plot) 用于顯示數(shù)據(jù)分布及其概率密度。
得出什么結(jié)論?
①、????

##直方圖
p=ggplot(long_exprSet,aes(value,fill=group))+geom_histogram()+facet_wrap(~sample,nrow = 3)##做個(gè)直方圖,其中facet_wrap是一個(gè)分面函數(shù)。
print(p)
image.png

得出的結(jié)論:
①、大部分的樣本,的表達(dá)量分布在3-4左右。

##密度圖
p=ggplot(long_exprSet,aes(value,col=group))+geom_density()+facet_wrap(~sample, nrow = 4)
print(p)
image.png

可以看出,表達(dá)量value值,在大概3-4的時(shí)候,fre頻率是最大的。

gpairs????看不懂怎么看這圖呀,相關(guān)性分析?

12.理解統(tǒng)計(jì)學(xué)指標(biāo)mean,median,max,min,sd,var,mad并計(jì)算出每個(gè)基因在所有樣本的這些統(tǒng)計(jì)學(xué)指標(biāo),最后按照mad值排序,取top 50 mad值的基因,得到列表。

注意:這個(gè)題目出的并不合規(guī),請(qǐng)仔細(xì)看。
思路:可以很簡(jiǎn)單的計(jì)算出一個(gè)基因的這些統(tǒng)計(jì)指數(shù),如何計(jì)算多個(gè)基因的呢??
——所以需要用到apply函數(shù)才可以

mean <- apply(exprSet, 1,mean)
mean <- as.data.frame(mean)

median <- apply(exprSet, 1,median)
median <- as.data.frame(median)

max <- apply(exprSet, 1,max)
max <- as.data.frame(max)

min <- as.data.frame(apply(exprSet, 1,min))

var <- as.data.frame(apply(exprSet, 1,var))
mad <- as.data.frame(apply(exprSet, 1,mad))

merge(mean,median,max,min,sd,var,mad,by=rownames)??想合并起來(lái),看起來(lái)會(huì)比較好看,不過(guò)好像不行,因?yàn)閐im()看出來(lái),只有一列。還是算了,不合并了。
g_mad <- tail(sort(apply(exprSet,1,mad)),50)
names(g_mad)

13.根據(jù)第12步驟得到top 50 mad值的基因列表來(lái)取表達(dá)矩陣的子集,并且熱圖可視化子表達(dá)矩陣。試試看其它5種熱圖的包的不同效果。

思路:先根據(jù)g_mad來(lái)在exprest里面取出部分?jǐn)?shù)據(jù)——然后再對(duì)這份數(shù)據(jù)進(jìn)行做個(gè)熱圖。

TOP50 <- exprSet[g_mad,]
library(pheatmap)
pheatmap(TOP50)
image.png

14.取不同統(tǒng)計(jì)學(xué)指標(biāo)mean,median,max,mean,sd,var,mad的各top50基因列表,使用UpSetR包來(lái)看他們之間的overlap情況。

UpSetR包:對(duì)集合,進(jìn)行可視化的一個(gè)包。
思路:怎么去做一個(gè),符合UpSetR包的表格。

g_all <- unique(c(names(g_mean),names(g_median),names(g_max),names(g_min),
                  names(g_sd),names(g_var),names(g_mad) ))     ###行名
dat=data.frame(g_all=g_all,
               g_mean=ifelse(g_all %in% names(g_mean) ,1,0),    ##ifelse的一個(gè)循環(huán)。
               g_median=ifelse(g_all %in% names(g_median) ,1,0),
               g_max=ifelse(g_all %in% names(g_max) ,1,0),
               g_min=ifelse(g_all %in% names(g_min) ,1,0),
               g_sd=ifelse(g_all %in% names(g_sd) ,1,0),
               g_var=ifelse(g_all %in% names(g_var) ,1,0),
               g_mad=ifelse(g_all %in% names(g_mad) ,1,0)
)
upset(dat,nsets = 7)
image.png

點(diǎn)和點(diǎn)相連的就是有交集。交集的個(gè)數(shù)就往上看柱形圖。

15.在第二步的基礎(chǔ)上面提取CLL包里面的data(sCLLex) 數(shù)據(jù)對(duì)象的樣本的表型數(shù)據(jù)。

pdata=pData(sCLLex)
dim(pdata)
Disease <- pdata$Disease
print(Disease)

16.對(duì)所有樣本的表達(dá)矩陣進(jìn)行聚類并且繪圖,然后添加樣本的臨床表型數(shù)據(jù)信息(更改樣本名)

思路:如何聚類?——繪圖?——更改樣本名。
怎么看聚類圖。從大的往里面切,看看自己分幾類
那分類的依據(jù)是什么?不知道用的是什么算法,但分類的依據(jù)應(yīng)該是,基因表達(dá)量。

colnames(exprSet)=paste(group_list,1:22,sep='')  ##把CLL11.CEL——換為progres.這樣的病例信息
exprSet <- t(exprSet) ##需要吧行和列轉(zhuǎn)換一下。因?yàn)榻酉聛?lái)要多個(gè)dist,求距離的,是對(duì)dist的是計(jì)算每一行的之間的距離,然后是以每一列的作為變量作為標(biāo)注
hc <- hclust(dist(exprSet))   ##聚類
plot(as.dendrogram(hc), horiz = TRUE)  ##horiz = TRUE是吧豎向的換為橫向的。

image.png

怎么看這個(gè)圖:從左往右看,看看那些樣本是一大類的。——這樣又能得出什么有用的信息呢?

17.對(duì)所有樣本的表達(dá)矩陣進(jìn)行PCA分析并且繪圖,同樣要添加表型信息。

思路:什么是PCA分析。ggfortify這個(gè)包怎么用。
PCA分析:主成分分析,數(shù)據(jù)的降維?看疾病組和對(duì)照組能否分開

install.packages("ggfortify")
library(ggfortify)
exprSet <- exprs(sCLLex)  
df <- as.data.frame(t(exprSet))
df$group <- group_list
autoplot(prcomp(df[,1:(ncol(df)-1)]), data=df, colour = 'group')  ???
image.png

第一成分和第二成分加起來(lái)才30%左右,證明這個(gè)是不太好的?
另外一個(gè)就是progres組和stable組是沒(méi)有明顯差異的,因?yàn)樗麄冇薪患?,距離比較近。是否有差異還得看p值

18.根據(jù)表達(dá)矩陣及樣本分組信息進(jìn)行批量T檢驗(yàn),得到檢驗(yàn)結(jié)果表格

如何進(jìn)行T檢驗(yàn)?
還是不懂??雙樣本的檢驗(yàn)?

19.使用limma包對(duì)表達(dá)矩陣及樣本分組信息進(jìn)行差異分析,得到差異分析表格,重點(diǎn)看logFC和P值,畫個(gè)火山圖(就是logFC和-log10(P值)的散點(diǎn)圖)。

??如何用這個(gè)包?
對(duì)哪些數(shù)據(jù)進(jìn)行分析?

suppressMessages(library(limma))   #使用limma包進(jìn)行差異基因分析時(shí),做最多的是兩分類的,例如control組和disease組,但也會(huì)碰到按照序列進(jìn)行的分組。這時(shí),如果逐一使用兩兩比較求差異基因則略顯復(fù)雜。其實(shí)開發(fā)limma包的大神們已經(jīng)替我們考慮到

design <- model.matrix(~0+factor(group_list))    ##構(gòu)建分組矩陣
colnames(design)=levels(factor(group_list))
rownames(design)=colnames(exprSet)
design

contrast.matrix<-makeContrasts(paste0(unique(group_list),collapse = "-"),levels = design)  ##構(gòu)建比較矩陣
contrast.matrix
##這個(gè)矩陣聲明,我們要把progres.組跟stable進(jìn)行差異分析比較

##step1
fit <- lmFit(exprSet,design)
fit
##step2
fit2 <- contrasts.fit(fit, contrast.matrix) ##這一步很重要,大家可以自行看看效果
fit2 <- eBayes(fit2) ## default no trend !!!
##eBayes() with trend=TRUE
##step3
tempOutput = topTable(fit2, coef=1, n=Inf)


nrDEG = na.omit(tempOutput)   去掉NA值
head(nrDEG )
#write.csv(nrDEG2,"limma_notrend.results.csv",quote = F)
head(nrDEG)

## volcano plot
DEG=nrDEG
logFC_cutoff <- with(DEG,mean(abs( logFC)) + 2*sd(abs( logFC)) )
DEG$change = as.factor(ifelse(DEG$P.Value < 0.05 & abs(DEG$logFC) > logFC_cutoff,
                              ifelse(DEG$logFC > logFC_cutoff ,'UP','DOWN'),'NOT')
)
this_tile <- paste0('Cutoff for logFC is ',round(logFC_cutoff,3),
                    '\nThe number of up gene is ',nrow(DEG[DEG$change =='UP',]) ,
                    '\nThe number of down gene is ',nrow(DEG[DEG$change =='DOWN',])
)

g = ggplot(data=DEG, aes(x=logFC, y=-log10(P.Value), color=change)) +
  geom_point(alpha=0.4, size=1.75) +
  theme_set(theme_set(theme_bw(base_size=20)))+
  xlab("log2 fold change") + ylab("-log10 p-value") +
  ggtitle( this_tile ) + theme(plot.title = element_text(size=15,hjust = 0.5))+
  scale_colour_manual(values = c('blue','black','red')) ## corresponding to the levels(res$change)
print(g)

20.對(duì)T檢驗(yàn)結(jié)果的P值和limma包差異分析的P值畫散點(diǎn)圖,看看哪些基因相差很大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容