在 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\]
在计算理论方差时,若我们的数据是总体数据,则应该使用总体方差,而不是样本方差。