python方差分析实战

数据背景:有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
ABCD
2019-12-018087592392996287
2019-12-027851561789846078
2019-12-034679548184616735
2019-12-044296647384071749
2019-01-047875168853716377
2019-01-057271607859236161
2019-01-069299673556176861
2019-01-071749258884071782
2019-03-083196259592996820
2019-03-091220113296276591
2019-03-101132331926426035

问题一与问题二都是单因素方差分析,问题三为双因素方差分析

单因素方差分析的步骤

提出如下假设:

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不全相等

  1. 计算各样本均值

  2. 计算全部观测值的总均值

  3. 计算各误差平方和

    • 总平方和(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=1kj=1ni(xijx)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ˉix)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=1kj=1ni(xijxˉi)2

  4. 计算统计量

    M S A = S S A k − 1 M S A=\frac{S S A}{k-1} MSA=k1SSA

    M S E = S S E n − k M S E=\frac{S S E}{n-k} MSE=nkSSE

    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=MSEMSAF(k1,nk)

    若 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不全相等 列因素对因变量有显著影响

双因素方差分析步骤:

  1. 计算行因素的平均值

    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.=ri=1rxij,i=1,2,,k

  2. 计算列因素的平均值

  3. 计算总平均值

  4. 构造统计量

    • 总误差平方和:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i6G5pa7j-1583071763696)(%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90%E5%AE%9E%E6%88%98.assets/1583071267074.png)]

    • 行因素的误差平方和

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0ns7NXq-1583071763697)(%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90%E5%AE%9E%E6%88%98.assets/1583071278183.png)]

    • 列因素的误差平方和

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWMeePNx-1583071763699)(%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90%E5%AE%9E%E6%88%98.assets/1583071287330.png)]

    • 随机误差平方和

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj2jr17X-1583071763701)(%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90%E5%AE%9E%E6%88%98.assets/1583071301355.png)]

      上面各平方和的关系有:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFJBCLrQ-1583071763704)(%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90%E5%AE%9E%E6%88%98.assets/1583071317152.png)]

下面来解决实际问题。

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
ABCD
2019-12-018087592392996287
2019-12-027851561789846078
2019-12-034679548184616735
2019-12-044296647384071749
2019-01-047875168853716377
2019-01-057271607859236161
2019-01-069299673556176861
2019-01-071749258884071782
2019-03-083196259592996820
2019-03-091220113296276591
2019-03-101132331926426035
# 各样本均值
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,同意原假设,即不同地区销售量也相同

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值