在 Stata 中,**Cohen's d** 是一种用于衡量两组均值差异的标准化效应量指标,通常用于独立样本或配对样本的均值比较(例如 t 检验)。Cohen’s d 的计算公式如下:
**Cohen's d 的公式**
1. **独立样本的 Cohen's d**:
\[
d = \frac{\bar{X}_1 \bar{X}_2}{s_p}
\]
\( \bar{X}_1 \) 和 \( \bar{X}_2 \):两组数据的均值。
\( s_p \):两组的合并标准差(pooled standard deviation),计算公式为:
\[
s_p = \sqrt{\frac{(n_1
1)s_1^2 + (n_2
1)s_2^2}{n_1 + n_2 2}}
\]
\( n_1, n_2 \):两组样本的大小。
\( s_1, s_2 \):两组样本的标准差。
2. **配对样本的 Cohen's d**:
\[
d = \frac{\bar{D}}{s_D}
\]
\( \bar{D} \):配对样本的均值差。
\( s_D \):配对样本差值的标准差。
**如何在 Stata 中计算 Cohen's d**
**1. 独立样本的 Cohen’s d**
假设我们有一个变量 `score`,和一个分组变量 `group`(值为 1 和
2),以下是手动计算 Cohen's d 的步骤:
**(Step
1)** 描述性统计
我们需要分别计算两组的均值、标准差和样本大小:
```stata
tabstat score, by(group) statistics(mean sd n)
```
输出结果中可以找到:
两组的均值(\(\bar{X}_1, \bar{X}_2\))。
标准差(\(s_1, s_2\))。
样本大小(\(n_1, n_2\))。
**(Step
2)** 计算合并标准差
用 Stata 的 `display` 命令计算合并标准差 \(s_p\):
```stata
display sqrt(((n11)*s1^2 + (n21)*s2^
2) / (n1 + n2
2))
```
将 `n1, n2, s1, s2` 替换为上一步中的具体值。
**(Step
3)** 计算 Cohen’s d
继续用 `display` 计算 Cohen's d:
```stata
display (mean1 mean2) / sp
```
这里的 `mean1`、`mean2` 和 `sp` 分别是两组均值和合并标准差。
**2. 配对样本的 Cohen’s d**
在配对样本中,例如同一组人在两个时间点的测量值(变量为 `score1` 和 `score2`),以下是 Cohen’s d 的计算方法:
**(Step
1)** 计算差值
创建一个新变量表示两个测量值之间的差值:
```stata
gen diff = score1 score2
```
**(Step
2)** 计算均值差和标准差
计算差值的均值和标准差:
```stata
summarize diff
```
输出中可以找到:
差值的均值 \(\bar{D}\)。
差值的标准差 \(s_D\)。
**(Step
3)** 计算 Cohen’s d
用 `display` 计算 Cohen's d:
```stata
display mean_diff / sd_diff
```
这里的 `mean_diff` 和 `sd_diff` 分别是差值的均值和标准差。
**3. 使用社区贡献的 ado 文件**
如果不想手动计算 Cohen's d,可以使用 Stata 的社区贡献程序(`cohen_d`),它会自动计算效应量。以下是安装和使用方法:
**(Step
1)** 安装 `cohen_d`
运行以下命令安装:
```stata
ssc install cohen_d
```
**(Step
2)** 使用 `cohen_d` 计算 Cohen’s d:
1. **独立样本**:
```stata
cohen_d score, by(group)
```
`score` 是要计算的变量。
`group` 是分组变量。
2. **配对样本**:
```stata
cohen_d score1 score2
```
`score1` 和 `score2` 是配对变量。
**(Step
3)** 查看结果
运行命令后,Stata 会直接输出 Cohen’s d 以及其他效应量的相关信息。
**4. 自定义计算 Cohen's d 的脚本**
如果需要频繁计算 Cohen's d,可以创建一个简单的自定义脚本:
**独立样本的脚本**
```stata
program define cohen_d_ind
syntax varname, by(varname)
preserve
sort `by'
by `by', sort: summarize `varlist'
local mean1 = r(mean) if `by'==1
local mean2 = r(mean) if `by'==2
local sd1 = r(sd) if `by'==1
local sd2 = r(sd) if `by'==2
local n1 = r(N) if `by'==1
local n2 = r(N) if `by'==2
local sp = sqrt(((n11)*sd1^2 + (n21)*sd2^
2) / (n1+n22))
local d = (mean1 mean2) / sp
di "Cohen's d = " `d'
restore
end
```
**配对样本的脚本**
```stata
program define cohen_d_paired
syntax varlist(min=2 max=2)
gen diff = `1' `2'
summarize diff
local d = r(mean) / r(sd)
di "Cohen's d = " `d'
end
```
运行脚本后:
对于独立样本:`cohen_d_ind varname, by(group)`
对于配对样本:`cohen_d_paired var1 var2`
**效应量的解释**
根据 Cohen(1988)的建议,Cohen’s d 的效应量可以解释为:
**小效应**:\( d = 0.2 \)
**中等效应**:\( d = 0.5 \)
**大效应**:\( d = 0.8 \)
**总结**
1. **手动方法**:通过 `summarize` 和 `tabstat` 计算均值、标准差和样本大小,然后用公式计算 Cohen’s d。
2. **自动方法**:使用社区贡献的 `cohen_d` ado 文件快速计算。
3. **自定义脚本**:适合需要批量或频繁计算的场景。


雷达卡


京公网安备 11010802022788号







