整合分析(Meta-Analysis)

許清芳,鄭中平

2024-04-27

整合分析是什麼?

整合分析是分析多個研究結果,可以用來綜合研究結果,瞭解研究異質性(研究結果變異),或是找到造成變異的可能原因。由於分析單位不是人,而是分析,是「分析的分析」,所以稱為「meta」-analysis。

分析人與分析研究

分析人,我們假設要分析同學的身高:

分析研究,我們分析研究的效果大小:

整合分析的材料是什麼?可以回答什麼問題?

整合分析的材料

整合分析可以回答什麼問題

看一個例子

恐懼管理理論

恐懼管理理論認為人類會因為意識到自己終將死亡而心生恐懼,透過認同國家、民族、文化價值或世界觀等,我們得以超愈自己終將死亡的恐懼。恐懼管理理論的研究常以實驗法進行,操弄死亡顯著性高與低的情境,看看參與者是否表現出較多的文化價值認同。

資料來源

Burke、Martens與Faucher(2010)以164篇文章中的277個研究,探索實驗的死亡顯著性效果大小,並考慮參與者特性、抽樣區域等研究屬性的可能調節效果,底下顯示分析抽樣區域的可能調節效果。

看一下資料

#整體設定,含載入套件
source("https://raw.githubusercontent.com/ChungPingCheng/R4BS2/main/R4BS_setup.R")
#讀進資料
dta <- read.table("https://raw.githubusercontent.com/ChungPingCheng/R4BS2/main/Data/TMTmeta.txt", header=T, stringsAsFactors = TRUE)
#顯示前六筆資料
#程式報表11.1
dim(dta)
[1] 277   5
head(dta)
Study Region Group N ES
10 1 1 37 0.29
20 1 1 83 0.33
30 99 1 93 0.65
41 1 1 46 0.62
42 1 1 55 0.26
43 1 1 29 0.44

描述性統計

#依不同研究群,看看效果量等的描述性統計
#程式報表11.2
dta |>
  select(-Study) |>
  gtsummary::tbl_summary(by=Group,
                statistic = list(all_continuous() ~ "{mean} ({sd})"))

#依不同區域,看看效果量等的描述性統計
#程式報表11.3
dta |>
  select(-Study) |>
  gtsummary::tbl_summary(by=Region,
                  statistic = list(all_continuous() ~ "{mean} ({sd})"))

資料圖形化

#效果量直方圖
#圖11.2
ggplot(data=dta, 
       aes(ES, after_stat(density)))+
  geom_histogram(binwidth = function(x) 2 * IQR(x) / (length(x)^(1/3)),
                 col=1, fill=8)+
  labs(x="研究所得效果(相關係數量)",
       y="密度")

整合分析

#利用相關與樣本數計算相關的抽樣變異,並放進原先資料
dta <- metafor::escalc(measure="COR", ri=ES, ni=N, data=dta)
head(dta)
Study Region Group N ES yi vi
10 1 1 37 0.29 0.29 0.0233
20 1 1 83 0.33 0.33 0.0097
30 99 1 93 0.65 0.65 0.0036
41 1 1 46 0.62 0.62 0.0084
42 1 1 55 0.26 0.26 0.0161
43 1 1 29 0.44 0.44 0.0232
#計算所有研究的平均效果
#程式報表11.4
summary(res <- metafor::rma(yi=yi, vi=vi, data=dta))

Random-Effects Model (k = 277; tau^2 estimator: REML)

  logLik  deviance       AIC       BIC      AICc   
 49.8797  -99.7594  -95.7594  -88.5186  -95.7155   

tau^2 (estimated amount of total heterogeneity): 0.0337 (SE = 0.0037)
tau (square root of estimated tau^2 value):      0.1836
I^2 (total heterogeneity / total variability):   90.46%
H^2 (total variability / sampling variability):  10.48

Test for Heterogeneity:
Q(df = 276) = 12088.7813, p-val < .0001

Model Results:

estimate      se     zval    pval   ci.lb   ci.ub 
  0.3726  0.0125  29.6979  <.0001  0.3480  0.3972 

森林圖,圖示結果

#圖11.3
metaviz::viz_forest(res)

- 圖中的每一個線段,對應一個研究,其中黑點是效果量,線段則是95%信賴區間 - 圖中虛線標示效果量為0,如果信賴區間壓到這條虛線,代表效果可能為0,不顯著

檢查出版偏誤

漏斗圖

#檢查出版偏誤,先繪製 funnelplot
#圖11.4
metaviz::viz_funnel(res)

#程式報表11.5前半
ranktest(res)
Warning in cor.test.default(yi.star, vi, method = "kendall", exact = exact):
無法給連結計算精確 p 值

Rank Correlation Test for Funnel Plot Asymmetry

Kendall's tau = 0.3035, p < .0001
#程式報表11.5後半
regtest(res)

Regression Test for Funnel Plot Asymmetry

Model:     mixed-effects meta-regression model
Predictor: standard error

Test for Funnel Plot Asymmetry: z = -7.3122, p < .0001
Limit Estimate (as sei -> 0):   b =  0.6401 (CI: 0.5656, 0.7147)

整合調節分析

#後續要分析區域與研究群的調節效果
#先排除區域不明與第四組研究群體資料
dta <- dta |>
  dplyr::filter(Region != 99 & Group < 4) |> 
  dplyr::mutate( Region = factor(Region),
                 Group = factor(Group))
#抽取277筆中的13%,依區域與 ES 排序,繪製森林圖,標示區域
set.seed(201408)
dta_13 <- dta |> 
  dplyr::sample_frac(.13) |> 
  arrange(Region, ES)
#圖11.5
with(dta_13, metafor::forest(yi, vi, slab = Region))

#檢查區域效果。排除區域不明與第四組研究群體資料
#程式報表11.6
dta <- 
  dta |> arrange(Region, ES)
res_rgn <- rma(yi=yi, vi=vi, mods = ~ Region, data=dta)
res_rgn |> summary()

Mixed-Effects Model (k = 232; tau^2 estimator: REML)

  logLik  deviance       AIC       BIC      AICc   
 41.3077  -82.6154  -70.6154  -50.0657  -70.2336   

tau^2 (estimated amount of residual heterogeneity):     0.0337 (SE = 0.0041)
tau (square root of estimated tau^2 value):             0.1836
I^2 (residual heterogeneity / unaccounted variability): 88.12%
H^2 (unaccounted variability / sampling variability):   8.42
R^2 (amount of heterogeneity accounted for):            3.21%

Test for Residual Heterogeneity:
QE(df = 227) = 6206.1429, p-val < .0001

Test of Moderators (coefficients 2:5):
QM(df = 4) = 10.2446, p-val = 0.0365

Model Results:

         estimate      se     zval    pval    ci.lb    ci.ub 
intrcpt    0.3990  0.0190  20.9591  <.0001   0.3617   0.4363 
Region2   -0.0590  0.0351  -1.6810  0.0928  -0.1279   0.0098 
Region3   -0.1334  0.0714  -1.8685  0.0617  -0.2734   0.0065 
Region4   -0.1064  0.0398  -2.6742  0.0075  -0.1843  -0.0284 
Region5   -0.0356  0.0556  -0.6414  0.5212  -0.1445   0.0733 
#繪製 forest,標示區域(不只抽出一部份)
#圖11.6
p1 <- metaviz::viz_forest(res_rgn, group=dta[,'Region'],
              xlab = "r", x_limit=c(-.80,1.1), type="study_only")
p2 <- metaviz::viz_forest(res_rgn, group=dta[,'Region'],
              xlab = "r", x_limit=c(-.80,1.1),type="summary_only")
p1/p2+plot_layout(heights = c(7, 1))

#檢查出版偏誤,繪製 funnelplot,設定點的形狀
#圖11.7
metaviz::viz_funnel(res_rgn, group=dta[,"Region"],group_legend=T)+
    scale_shape_manual(values = c(15:17,0,1)) 
Scale for shape is already present.
Adding another scale for shape, which will replace the existing scale.

#每組抽取10筆,依 Group 與 ES 排序,繪製森林圖,以 Group 標示
set.seed(2014)
dta1 <- dta[dta$Group==1,][sample(145,10),]
dta2 <- dta[dta$Group==2,][sample(36,10),]
dta3 <- dta[dta$Group==3,][sample(93,10),]
dta30 <- rbind(dta1,dta2,dta3)

dta30 <- dta30 |> 
  arrange(Group, ES)

#圖11.8
with(dta30, metafor::forest(yi, vi, slab = Group))

整合分析前的準備

整合分析前的準備(細部版)

小結

習題

去個人化與反社會行為

當人們感到個人責任時,通常會遵守社會規範。然而,在匿名環境中,這些規範經常被忽略。許多實驗通過改變匿名群體的大小或特性,來觀察違規行為的變化。

資料

Postmes 與 Spears(1998) 以整合分析的方式瞭解去個人化與反社會行為的關係,記錄了七十個研究的資料,包括四個變項,依序是研究編號、效果量(以r作為效果量)、樣本數、匿名團體的成員屬性(1、2、3分別標示學生、小孩與其他)與參與者是否在群體中(1、2 分別標示在與不在)。

小題

(1)請用下列方式讀入資料,並繪製森林圖。 dta <- read.csv(“https://raw.githubusercontent.com/ChungPingCheng/R4BS2/main/Data/Deindividuation.csv”, header=T)

(2)請計算平均效果量,並檢驗是否為0。

(3)請繪製漏斗圖,並檢驗是否有出版偏誤。

(4)請檢驗匿名團體的參與者是否在群體中,是否會影響研究中效果的大小。