實驗設計:不平衡的數據集能比平衡的更好嗎?
我正處於一些生物醫學時程研究的實驗設計階段。假設我們將有 2 組主題 - 案例和控制。受試者的總數是有限的(例如,30 個),我們需要決定如何更好地在案例和對照之間劃分受試者。一種方法是平衡數據集 50% 的案例與 50% 的控制。另一種方法是將 2/3 的主題分配給案例,1/3 分配給控制,因為案例主題會更有趣。
你會建議什麼樣的實驗設計?在這兩種情況下都應該考慮哪些問題/陷阱?實驗設計是否應該取決於提出的問題?
如何回答這個問題取決於如何分析數據。 但也有可以應用的一般原則。主要思想是確定實驗控制下的內容並對其進行更改以優化統計測試檢測效果(如果確實存在)的能力。
為了說明這種事情是如何解決的,讓我們考慮一下由問題中的描述引起的經典教科書情況:比較治療均值的t 檢驗對控制均值,假設(至少大約)相等的方差在兩組中。在這種情況下,我們可以控制放入對照組的受試者數量(其中)和治療組(其中)。如果確實存在這種差異,則策略是以最大化檢測群體中組均值之間差異的機會的方式執行此操作。在此過程中,我們通常願意做出合理的簡化假設,期望在這種理想化情況下獲得的最優設計將接近真實實驗條件下的最優設計。在以下分析中註意這些假設。
在鏈接的維基百科文章的符號中,統計是
在哪裡和是兩組的通常方差估計值,並且
估計共同方差. 對於組內假設的正態分佈和/或足夠大和,至少大致是這樣的情況:
- ,, 和是獨立的;
- 前者俱有零均值的正態分佈;和
- 後者有分佈與和自由度,分別。
總和從何而來將會次分配不管什麼值和可能需要。
因此,當原假設為真時,會有學生分佈與自由度,無論我們如何選擇和. 我們的選擇和不會影響這一點。然而,當原假設為假時,比率
將趨於接近標準化效應大小 - 組之間相對於. 在計算,該差異被係數放大 當放大倍數盡可能大時,我們獲得最大的能力來檢測差異。 鑑於“實驗因素”術語
顯然是通過使最大化盡可能小(給出接近的最大值.) 因此,當受試者在組之間盡可能均勻地(但隨機地)劃分時,獲得了通過該測試檢測治療和對照方法之間差異的最佳能力。
作為該結果的進一步演示,我模擬了以下情況,在每組內具有正態分佈,使用四個標準化效應大小和. 通過運行每個實驗的所有合理值的重複(範圍從通過),蒙特卡羅分佈獲得了。下圖顯示了它的平均值如何與實驗因子緊密對應,除非沒有影響 (),正如所聲稱的那樣。
**因為現實世界很少表現得像計算機模擬一樣好,**讓我們通過模擬組內高度偏斜的分佈來給我們的分析帶來困難(這對於測試處理)。為此,我使用了 Gamma對照組和 Gamma 的分佈治療組的分佈。結果如下:
儘管這些圖不像前面的圖那麼完美,但儘管與簡化假設有很大不同,但*它們已經足夠接近了(*很小,數據遠不及正態分佈)。 因此,我們可以相信這樣的結論,即當受試者在治療組和對照組之間的分配接近相等時,實驗將是最有力的。
對於那些想進一步研究的人,這裡是
R
代碼。# # Perform a t-test to compare the first n1 values to the next n2 values of `x`. # f <- function(x, n1, n2) t.test(x[1:n1], x[1:n2+n1], var.equal=TRUE)$statistic # # Perform a full simulation for n1 = 2, 3, ..., n/2 for a given standardized # effect size `delta`. `N` Monte-Carlo iterations will be performed. # sim <- function(delta, n, N=500) { z <- sapply(2:floor(n/2), function(n1) { apply(matrix(rnorm(N*n, mean=c(rep(delta, n1), rep(0, n-n1))), nrow=N, byrow=TRUE), 1, f, n1=n1, n2=n-n1) }) apply(z, 2, mean) # Average t-statistics, one for each of the `N` iterations. } # # Run simulations for various deltas and compare to the "experimental factor," # here stored in `x`. # n <- 16 # Total number of subjects in the experiment x <- sapply(2:floor(n/2), function(x) 1/sqrt(1/x + 1/(n-x))) par(mfrow=c(1, 4)) for (delta in c(0, 1/2, 1, 3/2)) { y <- sim(delta, n) # N=5000 was used for the figure in the text plot(x, y, pch=19, col="Red", main=paste("Delta =", delta)), xlab="Experimental factor", ylab="Mean simulated t statistic") abline(lm(y ~ x)) # Least squares fit for comparison }
rnorm
對於第二個模擬,對 inside的調用sim
被替換為rgamma(N*n, shape=2, scale=c(rep(1+delta/2, n1), rep(1, n-n1)))