在 pandas 中计算方差¶
pandas 默认的.var()方法计算的是样本方差,即自由度为\(N-1\)。若想计算总体方差,需指定参数ddof=0(1)。
- Delta Degrees of Freedom。当指定
ddof时,计算方差的分母为N-ddof。
总结
- pandas 中的
var()默认的自由度是 n-1,即var(ddof=1); - NumPy 中的
var()默认的自由度是 n,即var(ddof=0); - pandas 中的
var(ddof=0)相当于 NumPy 中的var()。
在验算统计调查与数据采集课程讲义的计算结果时,我对比了pandas计算方差的结果和自己手动实现计算方差的结果,发现pandas默认的.var()方法计算的是样本方差,即自由度为\(N-1\)。若想计算总体方差,需指定参数ddof=0。
设定参数¶
读取数据¶
| 单位号 | Xi | Yi |
|---|---|---|
| 1 | 598 | 633 |
| 2 | 21 | 18 |
| 3 | 630 | 656 |
| 4 | 3012 | 3273 |
| 5 | 372 | 386 |
| 6 | 142 | 164 |
| 7 | 1072 | 1145 |
| 8 | 432 | 501 |
| 9 | 216 | 235 |
| 10 | 1698 | 1778 |
| 11 | 1570 | 1541 |
| 12 | 502 | 486 |
| 13 | 497 | 516 |
| 14 | 723 | 786 |
| 15 | 712 | 740 |
| 16 | 335 | 352 |
| 17 | 267 | 299 |
| 18 | 1658 | 1714 |
| 19 | 231 | 255 |
| 20 | 15 | 24 |
| 21 | 172 | 181 |
| 22 | 234 | 243 |
| 23 | 312 | 338 |
| 24 | 351 | 371 |
| 25 | 252 | 281 |
| 26 | 194 | 210 |
| 27 | 149 | 166 |
| 28 | 173 | 189 |
| 29 | 318 | 344 |
| 30 | 204 | 227 |
| 31 | 52 | 63 |
| 32 | 188 | 174 |
| 33 | 97 | 122 |
| 34 | 218 | 242 |
| 35 | 47 | 51 |
| 36 | 838 | 879 |
简单随机抽样的理论方差¶
Text Only
75537056.42857143
\[V(\hat Y_{{SRS}}) = 75537056\]
上面的结果与课件中的一致。

但是,当我不调用pandas中的.var()方法,而是自己实现总体方差的计算时,发现结果与课件中的不一致。

Python
# 手动计算总体方差
sum_of_squre = 0
mean = df1["Yi"].mean()
for i in range(1, N + 1):
sum_of_squre += (df1.loc[i, "Yi"] - mean) ** 2
S_square_manual = sum_of_squre / (N)
# 打印结果
print(S_square_manual)
Text Only
407993.3603395062
\[V_{{manual}}(Y_i) = {{ 407993 }}\]
Text Only
73438804.86111112
\[V_{{manual}}(\hat Y_{{SRS}}) = 73438805\]
这个结果与课件中的不一致。
检查发现,是因为pandas中的var()方法计算的是样本方差,分母除的是N-1。
Text Only
419650.3134920635
\[V_{{pandas}}(\hat Y_{{SRS}}) = 419650\]
Text Only
75537056.42857143
\(\(V_{{pandas}}(\hat Y_{{SRS}}) = 75537056\)\)'
如果我们将pandas中的var()方法改为计算总体方差,即传入ddof=0,使得分母除的是N,则结果与手动计算的一致,但与课件中的不一致。
Python
# 用 pandas 计算方差,且指定为总体方差
S_square_pandas = df1["Yi"].var(ddof=0)
# 打印结果
print(S_square_pandas)
Text Only
407993.3603395062
\[V_{{pandas}}(\hat Y_{{SRS}}) = 407993\]
Text Only
73438804.86111112
\[V_{{pandas}}(\hat Y_{{SRS}}) = 73438805\]
在计算理论方差时,若我们的数据是总体数据,则应该使用总体方差,而不是样本方差。