数据背景:有A、B、C、D四个地区,不同地区的销售量不一样,现抽取了不同时间段内每个地区的销售量,试解决:
1、每个地区间的销售量是否相同?
2、不同月份的销售量是否相同?
3、不同时间与地区的销售量是否相同?
用到的数据:
链接:https://pan.baidu.com/s/1buYuBBHeMGwh11ytVAWwUg 提取码:y94o
首先读取数据并观察数据:
import pandas as pd
import numpy as np
data = pd.read_excel('saledata.xlsx')
data
A | B | C | D | |
---|---|---|---|---|
2019-12-01 | 8087 | 5923 | 9299 | 6287 |
2019-12-02 | 7851 | 5617 | 8984 | 6078 |
2019-12-03 | 4679 | 5481 | 8461 | 6735 |
2019-12-04 | 4296 | 6473 | 8407 | 1749 |
2019-01-04 | 7875 | 1688 | 5371 | 6377 |
2019-01-05 | 7271 | 6078 | 5923 | 6161 |
2019-01-06 | 9299 | 6735 | 5617 | 6861 |
2019-01-07 | 1749 | 2588 | 8407 | 1782 |
2019-03-08 | 3196 | 2595 | 9299 | 6820 |
2019-03-09 | 1220 | 1132 | 9627 | 6591 |
2019-03-10 | 1132 | 3319 | 2642 | 6035 |
问题一与问题二都是单因素方差分析,问题三为双因素方差分析
单因素方差分析的步骤
提出如下假设:
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
k
H_{0}: \mu_{1}=\mu_{2}=\cdots=\mu_{k}
H0:μ1=μ2=⋯=μk
H
1
:
μ
1
,
μ
2
,
⋯
,
μ
k
H_{1}: \mu_{1}, \mu_{2}, \cdots, \mu_{k}
H1:μ1,μ2,⋯,μk不全相等
-
计算各样本均值
-
计算全部观测值的总均值
-
计算各误差平方和
-
总平方和(sum of squares for total,SST):
S S T = ∑ i = 1 k ∑ j = 1 n i ( x i j − x ‾ ‾ ) 2 S S T=\sum_{i=1}^{k} \sum_{j=1}^{n_{i}}\left(x_{i j}-\overline{\overline{\boldsymbol{x}}}\right)^{2} SST=∑i=1k∑j=1ni(xij−x)2
-
组间平方和(sum of squares for factor A,SSA):
S S A = ∑ i = 1 k n i ( x ˉ i − x ‾ ‾ ) 2 S S A=\sum_{i=1}^{k} n_{i}\left(\bar{x}_{i}-\overline{\overline{\boldsymbol{x}}}\right)^{2} SSA=∑i=1kni(xˉi−x)2
-
组内平方和(sum of squares for error,SSE):
S S E = ∑ i = 1 k ∑ j = 1 n i ( x i j − x ˉ i ) 2 S S E=\sum_{i=1}^{k} \sum_{j=1}^{n_{i}}\left(x_{i j}-\bar{x}_{i}\right)^{2} SSE=∑i=1k∑j=1ni(xij−xˉi)2
-
-
计算统计量
M S A = S S A k − 1 M S A=\frac{S S A}{k-1} MSA=k−1SSA
M S E = S S E n − k M S E=\frac{S S E}{n-k} MSE=n−kSSE
F = M S A M S E ∼ F ( k − 1 , n − k ) F=\frac{M S A}{M S E} \sim F(k-1, n-k) F=MSEMSA∼F(k−1,n−k)
若 F>Fa,拒绝H0,有显著影响
若 F<Fa,接受H0,无显著影响
双因素方差分析步骤
对行因素提出假设:
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
k
H_{0}: \mu_{1}=\mu_{2}=\cdots=\mu_{k}
H0:μ1=μ2=⋯=μk 行因素对因变量没有显著影响
H
1
:
μ
1
,
μ
2
,
⋯
,
μ
k
H_{1}: \mu_{1}, \mu_{2}, \cdots, \mu_{k}
H1:μ1,μ2,⋯,μk不全相等 行因素对因变量有显著影响
对列因素提出假设:
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
r
H_{0}: \mu_{1}=\mu_{2}=\cdots=\mu_{r}
H0:μ1=μ2=⋯=μr 列因素对因变量没有显著影响
H
1
:
μ
1
,
μ
2
,
⋯
,
μ
r
H_{1}: \mu_{1}, \mu_{2}, \cdots, \mu_{r}
H1:μ1,μ2,⋯,μr不全相等 列因素对因变量有显著影响
双因素方差分析步骤:
-
计算行因素的平均值
x ˉ i . = ∑ i = 1 r x i j r , i = 1 , 2 , ⋯ , k \bar{x}_{i .}=\frac{\sum_{i=1}^{r} x_{i j}}{r}, \quad i=1,2, \cdots, k xˉi.=r∑i=1rxij,i=1,2,⋯,k
-
计算列因素的平均值
-
计算总平均值
-
构造统计量
-
总误差平方和:
-
行因素的误差平方和
-
列因素的误差平方和
-
随机误差平方和
上面各平方和的关系有:
-
下面来解决实际问题。
1、每个地区间的销售量是否相同?
提出如下假设:
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
k
H_{0}: \mu_{1}=\mu_{2}=\cdots=\mu_{k}
H0:μ1=μ2=⋯=μk 每个地区间的销售量相同
H
1
:
μ
1
,
μ
2
,
⋯
,
μ
k
H_{1}: \mu_{1}, \mu_{2}, \cdots, \mu_{k}
H1:μ1,μ2,⋯,μk不全相等 每个地区间的销售量不同
# 各样本均值
data_A_mean = data['A'].mean()
data_B_mean = data['B'].mean()
data_C_mean = data['C'].mean()
data_D_mean = data['D'].mean()
# 全部观测值的总均值
data_all_mean = data.mean().sum() / 4
data_all_mean
输出:
5631.75
# 总平方和
SST = ((data - data_all_mean)**2).sum().sum()
SST
输出:
280581604.25
data.shape
输出:
(11, 4)
n_i = data.shape[0]
# 组间平方和
SSA_place = n_i * (data_A_mean - data_all_mean)**2 + n_i * (data_B_mean - data_all_mean)**2 + n_i * (data_C_mean - data_all_mean)**2 + n_i * (data_D_mean - data_all_mean)**2
SSA_place
输出:
57894573.52272727
# 组内平方和
SSE_place = ((data['A'] - data_A_mean)**2).sum() + ((data['B'] - data_B_mean)**2).sum() + ((data['C'] - data_C_mean)**2).sum() + ((data['D'] - data_D_mean)**2).sum()
SSE_place
输出:
222687030.72727272
k = 4
# MSA
MSA_place = SSA_place / (k - 1)
n = data.shape[0] * data.shape[1]
n
输出:
44
# MSE
MSE_place = SSE_place / (n - k)
F = MSA_place / MSE_place
F
输出:
3.4664239064514066
k - 1 = 3
n - k = 40
查表得 F 0.05 ( 3 , 40 ) = 2.839 F_{0.05}(3,40)=2.839 F0.05(3,40)=2.839
由于F>Fa ,所以我们认为地区对销售量有显著性影响,即每个地区间销售量不同。
2、不同月份的销售量是否相同?
提出如下假设:
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
k
H_{0}: \mu_{1}=\mu_{2}=\cdots=\mu_{k}
H0:μ1=μ2=⋯=μk 不同月份的销售量相同
H
1
:
μ
1
,
μ
2
,
⋯
,
μ
k
H_{1}: \mu_{1}, \mu_{2}, \cdots, \mu_{k}
H1:μ1,μ2,⋯,μk不全相等 不同月份的销售量不同
首先查看数据
data
A | B | C | D | |
---|---|---|---|---|
2019-12-01 | 8087 | 5923 | 9299 | 6287 |
2019-12-02 | 7851 | 5617 | 8984 | 6078 |
2019-12-03 | 4679 | 5481 | 8461 | 6735 |
2019-12-04 | 4296 | 6473 | 8407 | 1749 |
2019-01-04 | 7875 | 1688 | 5371 | 6377 |
2019-01-05 | 7271 | 6078 | 5923 | 6161 |
2019-01-06 | 9299 | 6735 | 5617 | 6861 |
2019-01-07 | 1749 | 2588 | 8407 | 1782 |
2019-03-08 | 3196 | 2595 | 9299 | 6820 |
2019-03-09 | 1220 | 1132 | 9627 | 6591 |
2019-03-10 | 1132 | 3319 | 2642 | 6035 |
# 各样本均值
data_month12_mean = data.iloc[0:4, :].sum().sum() / 16
data_month1_mean = data.iloc[4:8, :].sum().sum() / 16
data_month3_mean = data.iloc[8:, :].sum().sum() / 12
data_month12_mean
输出:
6525.4375
# 全部观测值的总均值与上面一样
# 总平方和与上面一样
# 组间平方和
SSA_month = 16 * (data_month12_mean - data_all_mean) ** 2 + 16 * (data_month1_mean - data_all_mean) ** 2 + 12 * (data_month3_mean - data_all_mean) ** 2
SSA_month
输出:
29055873.89583334
# 组内平方和((data.iloc[0:4, :] - data_month12_mean) ** 2).sum()
SSE_month = ((data.iloc[0:4, :] - data_month12_mean) ** 2).sum().sum() + ((data.iloc[4:8, :] - data_month1_mean) ** 2).sum().sum() +((data.iloc[8:, :] - data_month3_mean) ** 2).sum().sum()
SSE_month
输出:
251525730.35416666
k = 3
MSA_month = SSA_month / (k - 1)
# MSE
MSE_month = SSE_month / (n - k)
F = MSA_month / MSE_month
F
输出:
2.3681291533310374
由于
k - 1 = 2
n - k = 41
查表得 F 0 , 05 ( 2 , 41 ) = 3.226 F_{0,05}(2,41) = 3.226 F0,05(2,41)=3.226
由于F<Fa ,所以我们认为月份对销售量无显著性影响,即每个月份销售量相同。
3、不同时间与地区的销售量是否相同?
这是双因素方差分析的问题
列平均数与问题一中各平均数相同
行平均数与问题二中各平均数相同
总平均数与上面相同
SST与上面也相同
# SSR 行因素误差平方和
SSR = SSA_month
# SSC 列因素误差平方和
SSC = SSA_place
# 随机误差平方和
SSE = SST - SSR - SSC
k = 3
r = 4
MSR = SSR / (k - 1)
MSC = SSC / (r - 1)
MSE = SSE / (k - 1) / (r - 1)
Fr = MSR / MSE
Fc = MSC / MSE
Fr
输出:
0.45017353154266154
k - 1 = 2
(k - 1)(r - 1) = 6
查表得 F 0 , 05 ( 2 , 6 ) = 5.143 F_{0,05}(2,6) = 5.143 F0,05(2,6)=5.143
由于Fr < Fa,同意原假设,即不同月份销售量相同
Fc
输出:
0.5979882005572679
r - 1 = 3
(k - 1)(r - 1) = 6
查表得 F 0 , 05 ( 3 , 6 ) = 4.757 F_{0,05}(3,6) = 4.757 F0,05(3,6)=4.757
由于Fr < Fa,同意原假设,即不同地区销售量也相同