Splat simulation parameters
clp
16 June, 2020
本教程更詳細地描述了Splat
模擬模型及其使用的參數(shù)枣抱。
1.The base Splat model
下圖取自Splatter發(fā)表的文章枚冗,描述了Splat模型模擬的核心。加載必要的R包
library("splatter")
#> Warning: package 'splatter' was built under R version 3.6.2
library("scater")
#> Warning: package 'ggplot2' was built under R version 3.6.2
library("ggplot2")
Splat
模擬使用分層概率,其中從適當?shù)慕y(tǒng)計分布生成數(shù)據(jù)集的不同方面牡属。第一階段產(chǎn)生每個基因的平均表達水平。這些最初是從Gamma分布中選擇的丈莺。對于一些被選為高表達量的異常值的基因屯耸,從對數(shù)正態(tài)分布中產(chǎn)生一個因子拐迁。然后將這些因子乘以基因平均數(shù)的中位數(shù),從而為這些基因創(chuàng)造新的均值疗绣。
下一階段包括每個細胞計數(shù)的變化线召。從對數(shù)正態(tài)分布中為每個細胞選擇預期的庫大小(總計數(shù))。然后使用文庫大小來縮放每個細胞的基因均值多矮,從而得到模擬數(shù)據(jù)集中每個細胞的計數(shù)范圍a缓淹。然后進一步調(diào)整基因均值以加強平均表達水平和變異性之間的關系。
然后,使用基因手段的最終細胞的基因矩陣來使用泊松分布來生成計數(shù)矩陣讯壶。結(jié)果是由伽馬-泊松(或負二項)分布的計數(shù)組成的合成數(shù)據(jù)集料仗。可以使用附加的可選步驟來復制dropout”效應伏蚊。使用基于基礎平均表達式水平的邏輯函數(shù)來生成dropout”概率罢维。然后使用伯努利分布來創(chuàng)建丟棄矩陣,該矩陣將一些生成的計數(shù)設置為零丙挽。
這里描述的模型將生成單個細胞群體肺孵,但Splat模擬被設計為盡可能靈活,可以創(chuàng)建包括多組細胞(細胞類型)颜阐、細胞類型之間的連續(xù)路徑和多個實驗批次的場景平窘。用于創(chuàng)建這些類型的模擬的參數(shù)以及它們?nèi)绾闻c模型交互如下所述。
2. Splat simulation parameters
在Splatter
中凳怨,Splat
模擬模型的參數(shù)保存在SplatParams
對象中瑰艘。讓我們創(chuàng)建其中一個對象,看看它是什么樣子肤舞。
params <- newSplatParams()
params
#> A Params object of class SplatParams
#> Parameters can be (estimable) or [not estimable], 'Default' or 'NOT DEFAULT'
#> Secondary parameters are usually set during simulation
#>
#> Global:
#> (Genes) (Cells) [Seed]
#> 10000 100 712777
#>
#> 28 additional parameters
#>
#> Batches:
#> [Batches] [Batch Cells] [Location] [Scale]
#> 1 100 0.1 0.1
#>
#> Mean:
#> (Rate) (Shape)
#> 0.3 0.6
#>
#> Library size:
#> (Location) (Scale) (Norm)
#> 11 0.2 FALSE
#>
#> Exprs outliers:
#> (Probability) (Location) (Scale)
#> 0.05 4 0.5
#>
#> Groups:
#> [Groups] [Group Probs]
#> 1 1
#>
#> Diff expr:
#> [Probability] [Down Prob] [Location] [Scale]
#> 0.1 0.5 0.1 0.4
#>
#> BCV:
#> (Common Disp) (DoF)
#> 0.1 60
#>
#> Dropout:
#> [Type] (Midpoint) (Shape)
#> none 0 -1
#>
#> Paths:
#> [From] [Steps] [Skew] [Non-linear] [Sigma Factor]
#> 0 100 0.5 0.1 0.8
與Splatter中的所有參數(shù)對象一樣锌介,此對象顯示此模擬所需的所有參數(shù)。因為我們沒有設置任何參數(shù)却特,所以會顯示默認值锭部,但是如果我們要更改其中的任何參數(shù),它們都會高亮顯示篙顺。我們還可以看到哪些參數(shù)可以通過Splat估計程序進行估計偶芍,哪些不可以。默認值已被選擇為相當真實德玫,但建議使用估計值來獲得更接近您感興趣的數(shù)據(jù)的模擬匪蟀。可以通過在SplatParams
對象中設置參數(shù)或?qū)⑵渲苯犹峁┙o模擬函數(shù)來修改參數(shù)宰僧。
本節(jié)的其余部分提供所有這些參數(shù)的詳細信息材彪,并解釋如何通過示例使用它們。
2.1 Global parameters
這些參數(shù)在每個模型中使用琴儿,并控制產(chǎn)生的數(shù)據(jù)集的全局特征段化。 #### 2.1.1 nGenes
- Number of genes
# Set the number of genes to 1000
params <- setParam(params, "nGenes", 1000)
sim <- splatSimulate(params, verbose = FALSE)
dim(sim)
#> [1] 1000 100
2.1.2 nCells
- Number of cells
要模擬的基因數(shù)量。在Splat模擬中凤类,這不能直接設置穗泵,但必須使用batchCells
參數(shù)進行控制。
2.1.3 seed
- Random seed
用于生成隨機數(shù)的種子谜疤,包括從分布中選擇值佃延。通過更改此值现诀,可以生成具有相同參數(shù)的多個模擬數(shù)據(jù)集。使用相同的參數(shù)集和隨機種子產(chǎn)生的模擬應該是相同的履肃,但操作系統(tǒng)仔沿、軟件版本等之間可能存在差異。
2.2 Batch parameters
這些參數(shù)控制模擬數(shù)據(jù)集中的實驗批次尺棋。批次效應如何包含在模型中的總體效果類似于技術(shù)重復(即多次測序相同的生物樣本)封锉。這意味著批次之間的底層結(jié)構(gòu)是一致的,但是添加全局技術(shù)簽名(global technical signature)可能會將它們分開膘螟。
2.2.1 nBatches
- Number of batches
模擬中的批次數(shù)成福。這不能直接設置,但可以通過設batchCells
進行控制荆残。
2.2.2 batchCells
- Cells per batch
指定每批中的細胞數(shù)量的向量奴艾。批次數(shù)(nBatches
)等于向量的長度,細胞數(shù)(nCells
)等于總和内斯。
# Simulation with two batches of 100 cells
sim <- splatSimulate(params, batchCells = c(100, 100), verbose = FALSE)
# PCA plot using scater
sim <- logNormCounts(sim)
sim <- runPCA(sim)
plotPCA(sim, colour_by = "Batch")
2.2.3 batch.facLoc
- Batch factor location and batch.facScale
- Batch factor scale
通過從對數(shù)正態(tài)分布為每個批次中的每個基因生成一個小比例因子來指定批次蕴潦。然后將這些因子應用于每批中的潛在基因手段。修改這些參數(shù)會通過生成更大或更小的因子來影響批次之間的差異程度俘闯。
# Simulation with small batch effects
sim1 <- splatSimulate(params, batchCells = c(100, 100),
batch.facLoc = 0.001, batch.facScale = 0.001,
verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Batch") + ggtitle("Small batch effects")
# Simulation with big batch effects
sim2 <- splatSimulate(params, batchCells = c(100, 100),
batch.facLoc = 0.5, batch.facScale = 0.5,
verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Batch") + ggtitle("Big batch effects")
2.3 Mean parameters
這些參數(shù)控制用于生成潛在原始基因均值的分布潭苞。
2.3.1 mean.shape
- Mean shape and mean.rate
- Mean rate
這些參數(shù)控制提取基因平均值的伽瑪分布。形狀和速率之間的關系可能很復雜真朗,使用從實際數(shù)據(jù)集中估計的值通常比嘗試用手動設置它們要好此疹。雖然這些參數(shù)控制堿基基因,但最終模擬中的方法將取決于模型的其他部分蜜猾,特別是模擬的每種細胞counts總數(shù)(文庫大小)秀菱。
2.4 Library size parameters
這些參數(shù)控制每個細胞的預期計數(shù)數(shù)振诬。請注意蹭睡,由于采樣的原因,最終模擬中每個細胞的實際計數(shù)可能不同赶么。啟用dropout效果也會對此產(chǎn)生影響肩豁。為了保持一致,我們在這里使用術(shù)語library size
辫呻,但預期總數(shù)更合適清钥。
2.4.1 lib.loc
- Library size location and lib.scale
- Library size scale
這些參數(shù)控制用于為每個細胞生成庫大小的分布形狀。增加lib.loc
將導致每個細胞的計數(shù)更多放闺,而增加lib.scale
將導致每個細胞的計數(shù)更具可變性祟昭。
2.4.2 lib.norm
- Library size distribution
在Splat模擬中,庫大小使用的默認(和推薦)分布是對數(shù)正態(tài)分布怖侦。然而篡悟,在極少數(shù)情況下谜叹,正態(tài)分布可能更合適。將lib.norm
設置為TRUE
將使用正態(tài)分布搬葬,而不是對數(shù)正態(tài)分布荷腊。
2.5 Expression outlier parameters
在開發(fā)Splat模擬時,我們發(fā)現(xiàn)雖然伽瑪分布通常與某些數(shù)據(jù)集的基因均值匹配良好急凰,但它沒有正確捕獲高表達的基因女仰。為此,我們將表達異常值添加到Splat模型抡锈。
2.5.1 out.prob
- Expression outlier probability
該參數(shù)控制基因被選為表達異常值的概率疾忍。較高的值將導致更多的異常值基因。
# Few outliers
sim1 <- splatSimulate(out.prob = 0.001, verbose = FALSE)
ggplot(as.data.frame(rowData(sim1)),
aes(x = log10(GeneMean), fill = OutlierFactor != 1)) +
geom_histogram(bins = 100) +
ggtitle("Few outliers")
# Lots of outliers
sim2 <- splatSimulate(out.prob = 0.2, verbose = FALSE)
ggplot(as.data.frame(rowData(sim2)),
aes(x = log10(GeneMean), fill = OutlierFactor != 1)) +
geom_histogram(bins = 100) +
ggtitle("Lots of outliers")
2.5.2 out.facLoc
- Expression outlier factor location and out.facScale
- Expression outlier factor scale
表達異常值因子是從由這些參數(shù)控制的對數(shù)正態(tài)分布中提取的床三。所生成的因子被應用于所選基因的中值平均值表達锭碳,而不是現(xiàn)有平均值。這是為了與這些因素的估計程序保持一致勿璃,并確保最終的平均值是離群值擒抛。例如,為了避免將因子應用于低表達的基因补疑,使其只是適度表達歧沪,而不是表達異常值。
2.5.3 Group parameters
在此模擬階段之前莲组,只考慮了單個細胞群體诊胞,但我們通常希望模擬具有多種細胞的數(shù)據(jù)集。我們通過將細胞分配到組來做到這一點锹杈。
2.5.4 nGroups
- Number of groups
要模擬的組數(shù)撵孤。此參數(shù)不能直接設置,可使用group.prob
進行控制竭望。
2.5.5 group.prob
- Group probabilities
給出細胞將被分配到組的概率的向量邪码。向量的長度給出組(nGroups
)的數(shù)量,并且概率總和必須為1咬清。調(diào)整概率的數(shù)量和相對值會更改組的數(shù)量和相對大小闭专。要模擬分組,我們還需要使用splatSimulateGroups
函數(shù)或設置method = "groups"
旧烧。
params.groups <- newSplatParams(batchCells = 500, nGenes = 1000)
# One small group, one big group
sim1 <- splatSimulateGroups(params.groups, group.prob = c(0.9, 0.1),
verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Group") + ggtitle("One small group, one big group")
# Five groups
sim2 <- splatSimulateGroups(params.groups,
group.prob = c(0.2, 0.2, 0.2, 0.2, 0.2),
verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Group") + ggtitle("Five groups")
注意:一旦有三個或四個以上的組影钉,就很難在PCA空間中正確地查看它們。為簡單起見掘剪,我們在這里使用PCA平委,但通常非線性降維(如t-SNE或UMAP)是可視化分組的更有用的方式。
2.5.6 Differential expression parameters
通過修改所選基因的基本表達水平來創(chuàng)建不同的組夺谁。這樣做的過程是模擬每個組和一個虛構(gòu)的基底細胞之間的差異表達(DE)廉赔。改變差異表達參數(shù)可控制組之間的相似程度愚墓。
2.5.7 de.prob
- DE probability
此參數(shù)控制選擇基因進行差異表達的概率。
# Few DE genes
sim1 <- splatSimulateGroups(params.groups, group.prob = c(0.5, 0.5),
de.prob = 0.01, verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Group") + ggtitle("Few DE genes")
# Lots of DE genes
sim2 <- splatSimulateGroups(params.groups, group.prob = c(0.5, 0.5),
de.prob = 0.3, verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Group") + ggtitle("Lots of DE genes")
2.5.8 de.downProb
- Down-regulation probability
選定的DE基因既可以下調(diào)(因子小于1)昂勉,也可以上調(diào)(因子大于1)浪册。此參數(shù)控制選定基因下調(diào)的概率。
2.5.9 de.facLoc
- DE factor location and de.facScale
- DE factor scale
差異表達因子以類似于批次效應因子和表達異常值因子的方式從對數(shù)正態(tài)分布中產(chǎn)生岗照。更改這些參數(shù)可能會導致組之間或多或少存在極端差異村象。
# Small DE factors
sim1 <- splatSimulateGroups(params.groups, group.prob = c(0.5, 0.5),
de.facLoc = 0.01, verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Group") + ggtitle("Small DE factors")
# Big DE factors
sim2 <- splatSimulateGroups(params.groups, group.prob = c(0.5, 0.5),
de.facLoc = 0.3, verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Group") + ggtitle("Big DE factors")
僅從PCA圖來看,此效果似乎類似于調(diào)整de.prob
攒至,但效果是以不同的方式實現(xiàn)的厚者。較高的de.prob
意味著更多的基因有差異表達,但是改變DE因子會改變相同數(shù)量基因的DE水平迫吐。
2.5.10 Complex differential expression
通過提供值向量库菲,可以為每組指定每個差異表達參數(shù)。這些向量的長度必須與group.prob
相同志膀。將參數(shù)指定為向量允許進行更復雜的模擬熙宇,其中組間或多或少差異,而不是同等差異溉浙。以下是一些不同DE場景的示例烫止。
# Different DE probs
sim1 <- splatSimulateGroups(params.groups,
group.prob = c(0.2, 0.2, 0.2, 0.2, 0.2),
de.prob = c(0.01, 0.01, 0.1, 0.1, 0.3),
verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Group") +
labs(title = "Different DE probabilities",
caption = paste("Groups 1 and 2 have very few DE genes,",
"Groups 3 and 4 have the default number,",
"Group 5 has many DE genes"))
# Different DE factors
sim2 <- splatSimulateGroups(params.groups,
group.prob = c(0.2, 0.2, 0.2, 0.2, 0.2),
de.facLoc = c(0.01, 0.01, 0.1, 0.1, 0.2),
de.facScale = c(0.2, 0.5, 0.2, 0.5, 0.4),
verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Group") +
labs(title = "Different DE factors",
caption = paste("Group 1 has factors with small location (value),",
"and scale (variability),",
"Group 2 has small location and greater scale.\n",
"Groups 3 and 4 have greater location with small,",
"and large scales",
"Group 5 has bigger factors with moderate",
"variability"))
# Combination of everything
sim3 <- splatSimulateGroups(params.groups,
group.prob = c(0.05, 0.2, 0.2, 0.2, 0.35),
de.prob = c(0.3, 0.1, 0.2, 0.01, 0.1),
de.downProb = c(0.1, 0.4, 0.9, 0.6, 0.5),
de.facLoc = c(0.6, 0.1, 0.1, 0.01, 0.2),
de.facScale = c(0.1, 0.4, 0.2, 0.5, 0.4),
verbose = FALSE)
sim3 <- logNormCounts(sim3)
sim3 <- runPCA(sim3)
plotPCA(sim3, colour_by = "Group") +
labs(title = "Different DE factors",
caption = paste(
"Group 1 is small with many very up-regulated DE genes,",
"Group 2 has the default DE parameters,\n",
"Group 3 has many down-regulated DE genes,",
"Group 4 has very few DE genes,",
"Group 5 is large with moderate DE factors")
)
2.6 Biological Coefficient of Variation (BCV) parameters
BCV參數(shù)控制模擬數(shù)據(jù)集中基因的可變性。
2.6.1 bcv.common
- Common BCV
公共參數(shù)bcv.common
控制數(shù)據(jù)集中所有基因的潛在公共可變性戳稽。
2.6.2 bcv.df
- BCV Degrees of Freedom
此參數(shù)設置BCV反卡方分布中使用的自由度馆蠕。改變這一點會改變平均表達對基因變異性的影響。
2.7 Dropout parameters
這些參數(shù)控制是否添加附加丟棄以增加模擬數(shù)據(jù)集中的零數(shù)惊奇,以及是否應用該參數(shù)互躬。
2.7.1 dropout.type
- Dropout type
此參數(shù)確定要模擬的dropout效果的類型。將其設置為"none"
表示不會dropout颂郎,“experiment”
表示對每個細胞使用相同的參數(shù)集吼渡,"batch"
對同一批次中的每個細胞使用相同的參數(shù),"group"
對同一組中的每個細胞使用相同的參數(shù)集祖秒,"cell"
對每個單細胞使用不同的參數(shù)集诞吱。
2.7.2 dropout.mid
- Dropout mid point and dropout.shape
- Dropout shape
特定細胞中的特定計數(shù)被設置為零的概率與該基因在該細胞中的平均表達有關。該關系使用帶有這些參數(shù)的邏輯函數(shù)來表示竭缝。dropout.mid
參數(shù)控制概率等于0.5的點,dropout.shape
控制概率如何隨表達式的增加而變化沼瘫。這些參數(shù)必須是具有適當長度的向量抬纸,具體取決于所選的丟棄類型(dropout type)。
2.8Path parameters
對于許多用途耿戚,模擬分組就足夠了湿故,但在某些情況下阿趁,模擬細胞類型之間的連續(xù)變化更合適。路徑的數(shù)量和將細胞分配給它們的概率仍然由group.prob
參數(shù)控制坛猪,沿路徑的變化量由DE參數(shù)控制脖阵,但是splatSimulatePath
模型的其他方面由這些參數(shù)控制。
2.8.1 path.from
- Path origin
此參數(shù)控制差異化路徑的順序墅茉。它是一個與group.prob
長度相同的向量命黔,提供了每條路徑的起始位置。例如就斤,c(0悍募,1,1洋机,3)的path.from
將指示路徑1從原點(0)開始坠宴,路徑2從路徑1的末端開始,路徑3也從路徑1(分支點)的末端開始绷旗,路徑4從路徑3的末端開始喜鼓。
# Linear paths
sim1 <- splatSimulatePaths(params.groups,
group.prob = c(0.25, 0.25, 0.25, 0.25),
de.prob = 0.5, de.facLoc = 0.2,
path.from = c(0, 1, 2, 3),
verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Group") + ggtitle("Linear paths")
# Branching path
sim2 <- splatSimulatePaths(params.groups,
group.prob = c(0.25, 0.25, 0.25, 0.25),
de.prob = 0.5, de.facLoc = 0.2,
path.from = c(0, 1, 1, 3),
verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Group") + ggtitle("Branching path")
2.8.2 path.nSteps
- Number of steps
路徑是通過使用與用于組的相同的微分表達式過程來創(chuàng)建的,以生成端點衔肢。然后使用Interpolation在起點和終點之間創(chuàng)建一系列步驟颠通。此參數(shù)控制沿路徑的步數(shù),從而控制路徑的離散或平滑程度膀懈。
# Few steps
sim1 <- splatSimulatePaths(params.groups, path.nSteps = 3,
de.prob = 0.5, de.facLoc = 0.2, verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Step") + ggtitle("Few steps")
# Lots of steps
sim2 <- splatSimulatePaths(params.groups, path.nSteps = 1000,
de.prob = 0.5, de.facLoc = 0.2, verbose = FALSE)
sim2 <- logNormCounts(sim2)
sim2 <- runPCA(sim2)
plotPCA(sim2, colour_by = "Step") + ggtitle("Lots of steps")
2.8.3 path.skew
- Path skew
默認情況下顿锰,細胞沿一條路徑均勻分布,但有時在分布中引入歪斜(skew)是有用的启搂,例如硼控,您可能想要模擬干細胞較少而分化細胞較多的場景。將path.skew
設置為0將意味著所有細胞都來自終結(jié)點胳赌,而更高的值(最高為1)將使它們向起始點傾斜牢撼。
# Skew towards the end
sim1 <- splatSimulatePaths(params.groups, path.skew = 0.1,
de.prob = 0.5, de.facLoc = 0.2, verbose = FALSE)
sim1 <- logNormCounts(sim1)
sim1 <- runPCA(sim1)
plotPCA(sim1, colour_by = "Step") + ggtitle("Skewed towards the end")
2.8.4 path.nonlinearProb
- Non-linear probability
大多數(shù)基因是沿著一條路徑以線性方式插入的,但在現(xiàn)實中疑苫,情況可能并不總是如此熏版。例如,很容易想象這樣一個基因捍掺,它在一個過程開始時低表達撼短,在中間高表達,在結(jié)束時低表達挺勿。path.nonlinearProb
參數(shù)控制基因沿路徑以非線性方式改變的概率曲横。
2.8.5 path.sigmaFac
- Path skew
沿著路徑的非線性變化是通過在兩個端點之間建立布朗橋(Brownian bridge)來實現(xiàn)的。布朗橋是一種布朗運動,其控制方式是端點是固定的禾嫉。path.sigmaFac
參數(shù)控制布朗運動中每一步的極端程度灾杰,因此插值(interpolation)與線性路徑的差別有多大。