克隆巴赫系数 Cronbach’s alpha 是度量问卷信度(Reliability)的一个指标,一般大于 0.7 表示问卷的信度可以接受,大于 0.8 表示问卷的信度良好,大于 0.9 表示问卷的信度优秀。
1. 信度与效度
信度即测量的一致性,表示若问卷中的问题重复很多次问同一个人,这个人的回答总是一致的。效度是衡量问卷中的问题能否测量出它应该测量的事物的成都,例如网上的一些 IQ 测试问题真的能反映一个人的真实智力吗?这个就属于效度要衡量的东西。
2. 平行测量、
τ
\tau
τ 等价与同类测量
测量值
x
x
x 与真值
τ
\tau
τ 的方程被假设为:
x
=
α
τ
+
e
x=\alpha\tau+e
x=ατ+e 其中
e
e
e 为误差,假设误差的均值为零,并且与真值不相关,即:
E
(
e
)
=
0
E(e)=0
E(e)=0,
c
o
v
(
τ
,
e
)
=
0
cov(\tau, e)=0
cov(τ,e)=0。
对于两个测量值
x
i
x_i
xi? 和
x
j
x_j
xj? 假设他们的
e
i
e_i
ei?、
e
j
e_j
ej? 不相关,真值相同
τ
i
=
τ
i
\tau_i=\tau_i
τi?=τi?,
- 若
α
i
=
α
j
=
1
\alpha_i=\alpha_j=1
αi?=αj?=1 并且
v
a
r
(
e
i
)
=
v
a
r
(
e
j
)
var(e_i)=var(e_j)
var(ei?)=var(ej?),那么
x
i
x_i
xi? 和
x
j
x_j
xj? 为平行测量值。
- 若仅仅
α
i
=
α
j
=
1
\alpha_i=\alpha_j=1
αi?=αj?=1,那么那么
x
i
x_i
xi? 和
x
j
x_j
xj? 为
τ
\tau
τ 等价测量值。
- 若
α
i
,
α
j
\alpha_i , \alpha_j
αi?,αj?,
v
a
r
(
e
i
)
,
v
a
r
(
e
j
)
var(e_i),var(e_j)
var(ei?),var(ej?) 没有相等关系,则为同类测量。
3. 计算公式
信度的标准定义为真值方差与测量值的方差之比,在
τ
\tau
τ等价时也等于真值与测量值相关系数的平方。 定义
k
k
k 个测量值的和为
X
=
x
1
+
x
2
+
.
.
.
x
k
X=x_1+x_2+...x_k
X=x1?+x2?+...xk?,克隆巴赫系数 Cronbach’s alpha 定义为
X
X
X 与真值
τ
\tau
τ 的相关系数平方,并且可以进一步推出它的计算公式为:
ρ
τ
=
k
k
?
1
[
1
?
∑
i
=
1
k
v
a
r
(
x
i
)
v
a
r
(
X
)
]
\rho_{\tau}=\frac{k}{k-1}\left[1-\frac{\sum_{i=1}^{k} var (x_i)}{var(X)}\right]
ρτ?=k?1k?[1?var(X)∑i=1k?var(xi?)?]
v
a
r
(
X
)
var(X)
var(X) 为所有测量值和的方差(就是问卷中所有问题加和的方差),
v
a
r
(
x
i
)
var(x_i)
var(xi?) 为每个测量值的方差(就是问卷中单个问题的方差)。
4. R, python 实现
4.1 R实现
在 R 语言中需要安装 ltm 包,该包专门针对结构方程相关的计算。
library(ltm)
data = data.frame(Q1=c(1, 2, 2, 3, 2, 2, 3, 3, 2, 3),
Q2=c(1, 1, 1, 2, 3, 3, 2, 3, 3, 3),
Q3=c(1, 1, 2, 1, 2, 3, 3, 3, 2, 3))
cronbach.alpha(data, CI=TRUE)
显示结果: Items: 3 Sample units: 10 alpha: 0.773
Bootstrap 95% CI based on 1000 samples 2.5% 97.5% 0.064 0.933
上面还显示了 Cronbach’s 系数的 Bootstrap 置信区间。
4.2 Python 实现
Python 代码: python 需要安装 pingouin 包,
import pandas as pd
import pingouin as pg
df = pd.DataFrame({'Q1': [1, 2, 2, 3, 2, 2, 3, 3, 2, 3],
'Q2': [1, 1, 1, 2, 3, 3, 2, 3, 3, 3],
'Q3': [1, 1, 2, 1, 2, 3, 3, 3, 2, 3]})
result = pg.cronbach_alpha(data = df)
print(result)
显示结果: (0.7734375, array([0.336, 0.939]))
python 得出的系数值与 R 语言一样,但是置信区间有点不一样,因为 python 是用固定的置信区间公式算出的,不是用 bootstrap 方法计算的置信区间。
参考文献
|