信度即测量的一致性,表示若问卷中的问题重复很多次问同一个人,这个人的回答总是一致的。效度是衡量问卷中的问题能否测量出它应该测量的事物的成都,例如网上的一些 IQ 测试问题真的能反映一个人的真实智力吗?这个就属于效度要衡量的东西。
在结构方程、因子分析中一般要检测信度与效度。
测量值
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,
信度的标准定义为真值方差与测量值的方差之比,在 τ \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=1kvar(xi)]
v a r ( X ) var(X) var(X) 为所有测量值和的方差(就是问卷中所有问题加和的方差), v a r ( x i ) var(x_i) var(xi) 为每个测量值的方差(就是问卷中单个问题的方差)。
在 R 语言中需要安装 ltm 包,该包专门针对结构方程相关的计算。
#install.packages('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))
#calculate Cronbach's Alpha
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 置信区间。
Python 代码:
python 需要安装 pingouin 包,
import pandas as pd
import pingouin as pg
#enter survey responses as a DataFrame
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 方法计算的置信区间。