精华内容
下载资源
问答
  • 使用Python进行多因素方差分析

    1. 前言

    背景:表格为随机挑选的不同性别与受教育程度的对象的幸福指数数据,

    目的:现要求分析幸福指数是否受不同的性别和受教育程度影响。

    分析方法:两个自变量是分类变量,因变量是连续变量,所以选择多因素方差分析。

    方差分析需要满足的条件:

    • 1.各样本须是相互独立的随机样本;
    • 2.各样本来自正态分布总体;
    • 3.各样本方差齐性。

    显著性水平:选取为0.05

    工具:Jupyter Notebook(Python 3.8)

    2. Python

    数据查看

    data = [['Male', '高中及以下', 63.0],
           ['Male', '高中及以下', 64.0],
           ['Male', '高中及以下', 60.0],
           ['Male', '高中及以下', 63.0],
           ['Male', '高中及以下', 66.0],
           ['Male', '高中及以下', 65.0],
           ['Male', '高中及以下', 61.0],
           ['Male', '高中及以下', 62.0],
           ['Male', '高中及以下', 68.0],
           ['Male', '大学本科', 66.5],
           ['Male', '大学本科', 67.0],
           ['Male', '大学本科', 69.5],
           ['Male', '大学本科', 70.0],
           ['Male', '大学本科', 69.0],
           ['Male', '大学本科', 71.5],
           ['Male', '大学本科', 67.0],
           ['Male', '大学本科', 68.5],
           ['Male', '大学本科', 63.5],
           ['Male', '研究生及以上', 88.0],
           ['Male', '研究生及以上', 89.0],
           ['Male', '研究生及以上', 86.0],
           ['Male', '研究生及以上', 92.0],
           ['Male', '研究生及以上', 90.0],
           ['Male', '研究生及以上', 84.0],
           ['Male', '研究生及以上', 91.0],
           ['Male', '研究生及以上', 87.0],
           ['Male', '研究生及以上', 88.0],
           ['Male', '研究生及以上', 85.0],
           ['Female', '高中及以下', 65.0],
           ['Female', '高中及以下', 66.0],
           ['Female', '高中及以下', 61.0],
           ['Female', '高中及以下', 64.0],
           ['Female', '高中及以下', 69.0],
           ['Female', '高中及以下', 70.0],
           ['Female', '高中及以下', 67.0],
           ['Female', '高中及以下', 63.0],
           ['Female', '高中及以下', 63.0],
           ['Female', '高中及以下', 66.0],
           ['Female', '大学本科', 70.0],
           ['Female', '大学本科', 71.0],
           ['Female', '大学本科', 66.0],
           ['Female', '大学本科', 69.0],
           ['Female', '大学本科', 74.0],
           ['Female', '大学本科', 73.0],
           ['Female', '大学本科', 72.0],
           ['Female', '大学本科', 68.0],
           ['Female', '大学本科', 65.0],
           ['Female', '大学本科', 64.0],
           ['Female', '研究生及以上', 82.0],
           ['Female', '研究生及以上', 83.0],
           ['Female', '研究生及以上', 88.0],
           ['Female', '研究生及以上', 91.0],
           ['Female', '研究生及以上', 90.0],
           ['Female', '研究生及以上', 86.0],
           ['Female', '研究生及以上', 84.0],
           ['Female', '研究生及以上', 80.0],
           ['Female', '研究生及以上', 85.0],
           ['Female', '研究生及以上', 76.0]]
    
    df = pd.DataFrame(data, columns = ['gender', 'education', 'Index'])
    df.head()
    

    在这里插入图片描述

    转换

    df1 = pd.DataFrame()
    data_list = []
    for i in df.gender.unique():
        for j in df.education.unique():
            data = df[(df.gender == i)&(df.education == j)]['Index'].values
            data_list.append(data)
            df1 = df1.append(pd.DataFrame(data, columns = pd.MultiIndex.from_arrays([[i],[j]])).T)
    df1 = df1.T
    df1
    

    在这里插入图片描述

    • 转换成更直观的形式,方便后续的操作

    各组数量统计

    # 查看各组数量分布
    df1.count().to_frame()
    

    在这里插入图片描述

    • 各组数量存在差异

    箱线图查看异常值

    plt.figure(figsize = (12,8))
    sns.boxplot(x = 'gender', y = 'Index', data = df, hue = 'education')
    plt.show()
    

    在这里插入图片描述

    • 各组数据均没有异常值

    正态性检验

    # Shapiro-Wilk 检验
    sw_test_res = pd.DataFrame()
    for i in df1.columns:
        statistic,pvalue = stats.shapiro(df1[i].dropna())
        sw_test_res[i]  = [statistic, pvalue]
    sw_test_res.index = ['statistic', 'p_value']
    sw_test_res.T.round(3)
    

    在这里插入图片描述

    • 以上各组p值均大于0.05,满足正态分布

    方差齐性检验

    # levene test
    print('基于中位数的levene test P值:', stats.levene(*data_list, center='median').pvalue)
    
    • P值为0.286,大于0.05,即任一分类都具有等方差性

    判断交互作用

    计算平均值

    df_mean = df1.mean().to_frame().unstack().round(1)
    df_mean.columns = ['大学本科', '研究生及以上', '高中及以下']
    df_mean = df_mean[['高中及以下', '大学本科', '研究生及以上']]
    df_mean
    

    在这里插入图片描述
    绘制交互图

    # 定义一个绘图函数
    def draw_pics(data, feature):
        fig, ax = plt.subplots(figsize=(8, 6)) 
        for i in data.index:
            ax.plot(data.columns, data.loc[i,], label = i, marker='o')
            ax.legend()
        ax.set_title("幸福指数平均值")
        ax.set_xlabel(feature, fontdict={'fontsize': 14})
        ax.set_ylabel("平均值", fontdict={'fontsize': 14})
        plt.show()
    # 绘制不同的性别在不同的教育程度下的均值变化
    draw_pics(data_mean, 'education')
    

    在这里插入图片描述

    # 绘制不同的教育程度在不同的性别下的均值变化
    draw_pics(data_mean.T, 'gender')
    

    在这里插入图片描述

    • 可以看到受教育程度与性别在对幸福指数的影响上可能存在交互作用。
    • 男性和女性的幸福指数都随受教育程度的增加而增加。但两者的增加趋势不同。男性的受教育程度在高中及以下、大学本科时幸福指数比女性低;但当男性的受教育程度达到研究生及以上时,其幸福指数比女性高。可见,在提高受教育程度增加幸福指数的过程中,男性比女性获益更大。

    多因素方差分析
    将交互项放入方差分析

    anova = smf.ols('Index ~ C(gender) + C(education) + C(gender)*C(education)',data = df).fit()
    sm.stats.anova_lm(anova, typ=1)
    

    在这里插入图片描述
    结果显示:

    • 性别P = 0.404大于0.05,表明性别对幸福指数没有影响
    • 教育P < 0.001,表明教育对于幸福指数有显著影响
    • 交互项具F(2,52)=4.148,P= 0.021,有统计学意义,表明性别和受教育程度在对幸福指数的影响上存在交互作用

    事后比较
    不同教育程度的事后比较

    # 事后多重比较 
    sm.stats.multicomp.pairwise_tukeyhsd(groups = df.education, endog=df.Index).summary()
    

    在这里插入图片描述
    由事后比较可得:

    • 大学本科学历 的幸福指数比 高中及以下学历 的人高4.13(95%CI:1.55-6.72),P=0.001;
    • 研究生及以上学历 的幸福指数比 高中及以下学历 的人高21.72(95%CI:19.17-24.28),P<0.001;
    • 研究生及以上学历 的幸福指数比 大学本科学历 的人高17.59(95%CI:15.04-20.15),P<0.001。

    单独效应的解释
    性别的单独效应

    # 性别的单独效应
    gender_pc_df = pd.DataFrame()
    for i in df.gender.unique():
        pc = sm.stats.multicomp.pairwise_tukeyhsd(groups = df.query("gender == @i").education, 
                                                  endog=df.query("gender == @i").Index).summary()
        pc_df = pd.DataFrame(pc, index = [i] * (df.education.nunique() + 1), )[1:]
        gender_pc_df = gender_pc_df.append(pc_df)
    
    gender_pc_df.columns = ['group1', 'group2', 'meandiff', 'p-adj', 'lower', 'upper', 'reject']
    gender_pc_df
    

    在这里插入图片描述
    从结果中可得:

    • 男性中:

      • 高中及以下学历 的幸福指数评分比 大学本科学历 的低4.50(95%CI:1.58 - 7.42),P = 0.0021;
      • 高中及以下学历 的幸福指数评分比 研究生及以上学历 的低24.44(95%CI:21.60 - 27.29),P = 0.001。
      • 大学本科学历 的幸福指数评分比 研究生及以上学历 的低19.94(95%CI:17.10 - 22.79),P = 0.001。
    • 女性中:

      • 高中及以下学历 的幸福指数评分比 大学本科学历 没有显著性差异,P = 0.071;
      • 高中及以下学历 比 研究生及以上学历 的低19.10(95%CI:15.02 - 23.17),P = 0.001。
      • 大学本科学历 的幸福指数评分比 研究生及以上学历 的低15.30(95%CI:11.23 - 19.37),P = 0.001。

    结论

    • 1.采用因素方差分析性别和受教育程度对幸福指数的影响,显著性水平选取为P = 0.05。满足方差分析前提条件:用分箱图检验没有异常值,用Shapiro-Wilk检验均满足正态性,用Levene方差齐性检验均满足等方差性(P = 0.286)。
    • 2.本研究中,性别对幸福指数没有影响(P = 0.404),教育对于幸福指数有显著影响(P < 0.001),性别和受教育程度在对幸福指数的影响上存在交互作用(P = 0.021)。
    • 3.不同性别中不同教育水平对于幸福指数的影响:
      男性中:
      - 高中及以下学历 的幸福指数评分比 大学本科学历 的低4.50(95%CI:1.58 - 7.42),P = 0.0021;
      - 高中及以下学历 的幸福指数评分比 研究生及以上学历 的低24.44(95%CI:21.60 - 27.29),P = 0.001。
      - 大学本科学历 的幸福指数评分比 研究生及以上学历 的低19.94(95%CI:17.10 - 22.79),P = 0.001。
      女性中:
      - 高中及以下学历 的幸福指数评分比 大学本科学历 没有显著性差异,P = 0.071;
      - 高中及以下学历 比 研究生及以上学历 的低19.10(95%CI:15.02 - 23.17),P = 0.001。
      - 大学本科学历 的幸福指数评分比 研究生及以上学历 的低15.30(95%CI:11.23 - 19.37),P = 0.001。

    参考链接:两因素方差分析-SPSS教程点击链接

    展开全文
  • 一、方差分析简介1.1 方差分析基本思想通过分析研究不同变量的变异对总变异的贡献大小,确定控制变量对研究结果影响力的大小。如果控制变量的不同水平对结果产生了显著影响,那么它和随机变量共同作用,必然使结果有...

    a2994302-9511-eb11-8da9-e4434bdf6706.png

    一、方差分析简介

    1.1 方差分析基本思想

    通过分析研究不同变量的变异对总变异的贡献大小,确定控制变量对研究结果影响力的大小。

    • 如果控制变量的不同水平对结果产生了显著影响,那么它和随机变量共同作用,必然使结果有显著的变化
    • 如果控制变量的不同水平对结果没有显著的影响,那么结果的变化主要由随机变量起作用,和控制变量关系不大

    1.2 方差分析的前提条件

    1. 独立,各组数据相互独立,互不相关;
    2. 正态:即各组数据符合正态分布;
    3. 方差齐性:即各组方差相等。

    1.3 方差分析通常使用F统计量检验

    在spss中经常使用方差齐性检验(都是levene检验),

    • 一般情况下,只要sig值大于0.05就以认为方差齐性的假设成立,因此方差分析的结果应该值得信赖;
    • 如果sig值小于或等于0.05方差齐性的假设就值得怀疑,导致方差分析的结果也值得怀疑。

    SPSS会自动计算 F 统计值, F 服从 (k-1,n-k) 自由度的 F 分布(k 是水平数, n 为个案数), SPSS依据 F 分布表给出相应的相伴概率值。

    • 如果相伴概率值小于显著性水平(一般为0.05) ,则拒绝零假设,认为控制变量不同水下各总体均值有显著差异;
    • 反之,则认为控制变量不同水平下各总体均值没有显著差异。

    二、不同分析方法

    首先要理解实验的设计或模型的类型,选取正确的方法才能得出正确的结论

    2.1 单因素设计方差分析

    单因素方差分析测试某一个控制变量的不同水平是否给观察变量造成了显著差异和变动。

    2.2 随机区组设计方差分析

    又称配伍组设计。在进行统计分析时,将区组变异离均差平方和从完全随机设计的组内离均差平方和中分离出来,从而减小组内平方和(误差平方和),提高了统计检验效率。

    2.3 析因设计方差分析

    析因设计(Facorial design)是将两个或两个以上因素的各种水平进行排列组合、交叉分组的实验设计,是对影响因素的作用进行全面分析的设计方法,可以研究两个或者两个以上因素多个水平的效应,也可以研究各因素之间是否有交互作用并找到最佳组合。常见析因设计有: 2x2析因设计、IxJ两因素析因设计、IxJxK三因素析因设计。

    2.4 交叉设计方差分析

    交叉设计(cross-over design)是一种特殊的自身对照设计,它按事先设计好的实验次序,在各个时期对受试对象先后实施各种处理,以比较处理组间的差异。受试对象可以采用完全随机分为两组或分层随机化的方法来安排。

    2.5 拉丁方设计方差分析

    拉丁方设计(latin square design文库)是从横行和直列两个方向进行双重局部控制,使得横行和直列两向皆成单位组,是比随机单位组设计多一个单位组的设计。

    2.6 协方差分析

    协方差分析是将那些很难控制的因素作为协变量,在排除协变量影响的条件下,分析控制变量对观察变量的影响,从而更加准确地对控制因素进行评价。协方差分析要求协变量应是连续数值型,多个协变量间互相独立,且与控制变量之间也没有交互影响。单因素方差分析和多因素方差分析中的控制变量都是一些定性变量。而协方差分析中则包含了定性变量(控制变量),又包含了定量变量(协变量)。

    2.7 嵌套设计方差分析

    嵌套设计被称为巢式设计(nested design)有些教科书上称这类资料为组内又分亚组的分类资料。根据因素数的不同,套设计可分为二因素(二级)、三因素(三级)等设计。 将全部k个因素按主次排列,依次称为1级,2级 … k级因素,再将总离差平方和及自由度进行分解,其基本思想与一般方差分析相同。所不同的是分解法有明显的区别,它侧重于主要因素,并且,第i级因素的显著与否,是分别用第i级与第i+1级因素的均方为分子和分母来构造F统计量,并以F测验为其理论根据的。

    2.8 重复测量方差分析

    重复测量资料是由在不同时间点上对同一对象的同一观察指标进行多次测量所得,重复测量设计是在科研工作中常见的设计方法,常用来分析在不同时间点上该指标的差异。重复测量设计最主要的优点就是提高了处理组间的精确度,因为它可以通过对同一个体数据的分析估计出实验误差的大小。

    三、案例分析(后附源文件)

    3.1 析因设计方差分析

    举个例子,

    需求:分析A、B两种药物联合应用对红细胞增加数的影响,数据见表。

    根据数据表和需求,采用析因设计方差分析研究各因素之间是否有交互作用并找到最佳组合。

    a6994302-9511-eb11-8da9-e4434bdf6706.png

    操作步骤:

    aa994302-9511-eb11-8da9-e4434bdf6706.png

    ac994302-9511-eb11-8da9-e4434bdf6706.png

    b0994302-9511-eb11-8da9-e4434bdf6706.png

    b3994302-9511-eb11-8da9-e4434bdf6706.png

    !!!报告分析:

    b6994302-9511-eb11-8da9-e4434bdf6706.png
    此步骤形仅仅用于操作演示

    b9994302-9511-eb11-8da9-e4434bdf6706.png

    bb994302-9511-eb11-8da9-e4434bdf6706.png

    3.2 嵌套设计方差分析

    举个例子,

    需求:选取某种植物3个品种(Plant),在每一株内选取两片叶子(Leaf)(嵌套在植株因素下的第二个因素),用取样器从每一片叶子上选取同样面积的两个样本(两次重复),称取湿重,结果见表。对以上结果进行方差分析

    根据所选的数据符合嵌套设计方差分析方法(分为一级、二级...)

    be994302-9511-eb11-8da9-e4434bdf6706.png

    操作步骤:

    bf994302-9511-eb11-8da9-e4434bdf6706.png

    c5994302-9511-eb11-8da9-e4434bdf6706.png

    这一步骤非常重要!!!

    报告分析

    正确操作结果:

    c8994302-9511-eb11-8da9-e4434bdf6706.png

    错误操作结果:(没有进行相应的语法添加)

    ce994302-9511-eb11-8da9-e4434bdf6706.png

    3.3 重复测量方差分析

    举个例子,

    需求:某研究者欲了解一套新的锻炼方法的减肥效果,该研究者在某小学随机抽取了12名肥胖学生,随机分成两组!第一组每天下午按新的锻炼方法锻炼!第二组不参与新的锻炼,方法锻炼并于实验开始的第1、2、3个月分别测量学生体重减重情况,测量值如表

    根据数据特征(不同时间点对同一指标重复测量)采用重复测量方差分析

    cf994302-9511-eb11-8da9-e4434bdf6706.png

    操作步骤:

    d0994302-9511-eb11-8da9-e4434bdf6706.png

    d2994302-9511-eb11-8da9-e4434bdf6706.png

    d3994302-9511-eb11-8da9-e4434bdf6706.png

    !!!报告分析

    d4994302-9511-eb11-8da9-e4434bdf6706.png

    d6994302-9511-eb11-8da9-e4434bdf6706.png

    d8994302-9511-eb11-8da9-e4434bdf6706.png

    d9994302-9511-eb11-8da9-e4434bdf6706.png

    拓展:当测量时间不是等间距时:

    db994302-9511-eb11-8da9-e4434bdf6706.png

    点击获取

    案例数据​pan.baidu.com

    待更新...

    展开全文
  • SPSS-单因素方差分析ANOVA案例解析.doc
  • 试验为: - 对照组:清水 - 实验组: 某肥料四个浓度梯度,分别是A,B,C,D,施肥一段时间之后测量树高(要控制其他变量保持一致,比如施肥之前的树高要基本保持一致,生长势基本保持一致等等)做方差分析的时候数据...

    试验设计

    探究施肥是否会对促进植株生成(植株生长以树高作为指标来衡量)。试验为: - 对照组:清水 - 实验组: 某肥料四个浓度梯度,分别是A,B,C,D,施肥一段时间之后测量树高(要控制其他变量保持一致,比如施肥之前的树高要基本保持一致,生长势基本保持一致等等)

    做方差分析的时候数据需要满足正态分布;方差齐性等。正常拿到数据后需要对数据是否符合正态分布和组间方差是否一致做检验。如何来做以上两个检验今天先忽略掉,在默认拿到的数据符合条件后直接在做单因素方差分析。

    模拟生成数据

    使用numpy模块模拟生成5组,每组100个正态分布数据 正态分布函数参数依次是均值,标准差、数据的个数

    import numpy as np

    df = {'ctl':list(np.random.normal(10,5,100)),

    'treat1':list(np.random.normal(15,5,100)),\

    'treat2':list(np.random.normal(20,5,100)),\

    'treat3':list(np.random.normal(30,5,100)),\

    'treat4':list(np.random.normal(31,5,100))}

    #组合成数据框

    import pandas as pd

    df = pd.DataFrame(df)

    df.head()

    ctl treat1 treat2 treat3 treat4

    0 9.614605 15.719777 17.068697 23.842793 32.206690

    1 7.617131 20.481499 14.880172 29.685766 29.372065

    2 5.078861 13.683188 20.780142 25.123814 29.500179

    3 4.749667 13.209488 15.390307 37.757911 27.912748

    4 5.167490 20.374576 18.669367 33.772163 34.394511

    箱线图展示一下数据

    df.boxplot(grid = False)

    import matplotlib.pyplot as plt

    plt.show()

    转化数据格式

    数据格式整理为一列为处理,一列为数值的形式

    df_melt = df.melt()

    df_melt.head()

    variable value

    0 ctl 9.614605

    1 ctl 7.617131

    2 ctl 5.078861

    3 ctl 4.749667

    4 ctl 5.167490

    df_melt.columns = ['Treat','Value']

    df_melt.head()

    Treat Value

    0 ctl 9.614605

    1 ctl 7.617131

    2 ctl 5.078861

    3 ctl 4.749667

    4 ctl 5.167490

    使用seaborn模块绘制箱线图

    import seaborn as sns

    sns.boxplot(x='Treat',y='Value',data = df_melt)

    方差分析

    from statsmodels.formula.api import ols

    from statsmodels.stats.anova import anova_lm

    model = ols('Value~C(Treat)',data=df_melt).fit()

    anova_table = anova_lm(model, typ = 2)

    print(anova_table)

    sum_sq df F PR(>F)

    C(Treat) 34622.433013 4.0 351.230458 4.926641e-143

    Residual 12198.617718 495.0 NaN NaN

    方差分析的结果我们需要看P值,本例中P值等于4.926641e-143小于0.05,说明处理间存在显著差异,具体哪个处理间存在差异还需要通过多重检验来看。

    多重检验

    比较常用的检验方法是邓肯多重检验(Tukey HSD test)

    from statsmodels.stats.multicomp import MultiComparison

    mc = MultiComparison(df_melt['Value'],df_melt['Treat'])

    tukey_result = mc.tukeyhsd(alpha = 0.5)

    print(tukey_result)

    Multiple Comparison of Means - Tukey HSD,FWER=0.50

    =============================================

    group1 group2 meandiff lower upper reject

    ---------------------------------------------

    ctl treat1 4.4997 3.379 5.6204 True

    ctl treat2 9.498 8.3773 10.6186 True

    ctl treat3 19.831 18.7103 20.9517 True

    ctl treat4 21.1355 20.0148 22.2562 True

    treat1 treat2 4.9983 3.8776 6.1189 True

    treat1 treat3 15.3313 14.2106 16.452 True

    treat1 treat4 16.6358 15.5151 17.7565 True

    treat2 treat3 10.333 9.2124 11.4537 True

    treat2 treat4 11.6375 10.5168 12.7582 True

    treat3 treat4 1.3045 0.1838 2.4252 True

    ---------------------------------------------

    多重检验结果表明各个组间均存在显著差异(reject这一列为True的话则说明两个处理间存在差异)

    参考文献

    展开全文
  • 案例:一家超市连锁店进行一项研究,以确定超市所在的位置和竞争者的数量对其销售额是否有显著影响。取显著性水平, 检验: (1)竞争者的数量对销售额是否有显著影响。(2)超市的位置对销售额是否显著影响。(3)...

    案例:

    一家超市连锁店进行一项研究,以确定超市所在的位置和竞争者的数量对其销售额是否有显著影响。

    取显著性水平

    25ae410c951c4b7b809e5541987a01c0.gif, 检验:

    (1)竞争者的数量对销售额是否有显著影响。

    (2)超市的位置对销售额是否显著影响。

    (3)竞争者的数量和超市的位置对销售额是否有交互影响。

    # 导入相关包

    import pandas as pd

    import numpy as np

    import math

    import scipy

    from scipy import stats

    import matplotlib.pyplot as plt

    from statsmodels.formula.api import ols

    from statsmodels.stats.anova import anova_lm

    # 自定义函数

    def level_n(data, row_name, col_name):

    r_level = list(data[row_name].unique())

    c_level = list(data[col_name].unique())

    tuple_ = [(i,j) for i in r_level for j in c_level]

    row_n = []

    for i, j in tuple_:

    p = data.query("{}=='{}'".format(row_name, i)).query("{}=='{}'".format(col_name, j)).shape[0]

    row_n.append(p)

    m = max(row_n)

    return m

    def SST(Y):

    sst = sum(np.power(Y - np.mean(Y), 2))

    return sst

    def SSA(data, row_name, col_name, y_name):

    n = len(data[col_name].unique())

    m = level_n(data, row_name, col_name)

    total_avg = np.mean(data[y_name])

    df = data.groupby([row_name]).agg(['mean', 'count'])

    df = df[y_name]

    ssa = n * m * sum((np.power(df["mean"] - total_avg, 2)))

    return ssa

    def SSRC(data, row_name, col_name, y_name):

    m = level_n(data, row_name, col_name)

    df_row = data.groupby([row_name]).agg(['mean'])

    row_dict = dict(df_row[y_name]["mean"])

    df_col = data.groupby([col_name]).agg(['mean'])

    col_dict = dict(df_col[y_name]["mean"])

    df_rc = data.groupby([row_name, col_name]).agg(['mean'])

    rc_dict = dict(df_rc[y_name]["mean"])

    total_avg = np.mean(data[y_name])

    sum = 0

    for i in rc_dict:

    rc_avg= rc_dict[i]

    r_avg = row_dict[i[0]]

    c_avg = col_dict[i[1]]

    sum += np.power(rc_avg - r_avg - c_avg + total_avg, 2)

    ssrc = m * sum

    return ssrc

    def two_way_anova(data, row_name, col_name, y_name, alpha=0.05):

    """可重复双因素方差分析"""

    n = len(data) # 总观测值数

    k = len(data[row_name].unique()) # 行变量的水平个数

    r = len(data[col_name].unique()) # 列变量的水平个数

    m = level_n(data, row_name, col_name) # 行变量中每个水平的行数

    sst = SST(data[y_name]) # 总平方和

    ssr = SSA(data, row_name, col_name, y_name) # 行变量平方和

    ssc = SSA(data, col_name, row_name, y_name) # 列变量平方和

    ssrc = SSRC(data, row_name, col_name, y_name) # 交互作用平方和

    sse = sst - ssr - ssc - ssrc # 误差平方和

    msr = ssr / (k-1)

    msc = ssc / (r-1)

    msrc = ssrc / ((k-1)*(r-1))

    mse = sse / (k*r*(m-1))

    Fr = msr / mse

    Fc = msc / mse

    Frc = msrc / mse

    pfr = scipy.stats.f.sf(Fr, k-1, k*r*(m-1))

    pfc = scipy.stats.f.sf(Fc, r-1, k*r*(m-1))

    pfrc = scipy.stats.f.sf(Frc, (k-1)*(r-1), k*r*(m-1))

    Far = scipy.stats.f.isf(alpha, dfn=k-1, dfd=k*r*(m-1)) # 行 F临界值

    Fac = scipy.stats.f.isf(alpha, dfn=r-1, dfd=k*r*(m-1)) # 列 F临界值

    Farc = scipy.stats.f.isf(alpha, dfn=(k-1)*(r-1), dfd=k*r*(m-1)) # 交互 F临界值

    r_square = (ssr+ssc+ssrc) / sst

    table = pd.DataFrame({'差异源':[row_name, col_name, '交互作用', '内部(误差)', '总计'],

    '平方和SS':[ssr, ssc, ssrc, sse, sst],

    '自由度df':[k-1, r-1, (k-1)*(r-1), k*r*(m-1), n-1],

    '均方MS':[msr, msc, msrc, mse, '_'],

    'F值':[Fr, Fc, Frc, '_', '_'],

    'P值':[pfr, pfc, pfrc, '_', '_'],

    'F临界值':[Far, Fac, Farc, '_', '_'],

    'R^2':[r_square, '_', '_', '_', '_']})

    return table

    # 导入数据

    df = pd.read_excel("E:xx业务数据.xlsx", sheet_name='source_05')

    # 输出方差分析结果

    two_way_anova(df, '超市位置', '竞争者数量', '销售额', alpha=0.01)

    2027a3dff75d40098bd2b6b110a9b3dd.jpg

    根据以上方差分析结果解释如下:

    (1)竞争者数量:P-value=1.57485e-05  (或 F值>F临界值=4.71805),拒绝原假设。表明竞争者的数量对销售额有显著影响。

    (2)超市位置:P-value=9.17534e-08     (或 F值>F临界值=5.61359),拒绝原假设。表明超市的位置对销售额有显著影响。

    (3)交互作用:P-value=0.0160501       >

    25ae410c951c4b7b809e5541987a01c0.gif (或 F值>F临界值=3.66672),不拒绝原假设。没有证据表明竞争者的数量和超市的位置对销售额有交互影响。

    展开全文
  • 根据观测变量(即因变量)的数目,可以把多因素方差分析分为:单变量多因素方差分析(也叫一元多因素方差分析)与变量多因素方差分析(即多元多因素方差分析)。本文将重点讲述一元多因素方差分析,下篇文章将详细讲述...
  • SPSS(二)SPSS实现多因素方差分析模型 单因素方差分析上一篇博客https://blog.csdn.net/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑...
  • 下面记录一个关于多因素方差分析的栗子: 广告页X的点击可能和广告页背景色与投放的区域有关系 ,我们设广告页背景色为因素A,投放区域为因素B。同时对因素A,B进行分析。下面lets go… 数据准备:广告投放数据(脱敏...
  • spss多因素方差分析

    万次阅读 多人点赞 2014-01-13 21:14:54
    多因素方差分析 多因素方差分析是对一个独立变量是否受一个或个因素或变量影响而进行的方差分析。SPSS调用“Univariate”过程,检验不同水平组合之间因变量均数,由于受不同因素影响是否有差异的问题。在这个过程...
  • 现在老板想考察不同机型以及不同操作工人对产品的影响,为此他简单设计了一个小实验,让甲、乙、丙、丁四个工人操作机器Ⅰ、Ⅱ、Ⅲ各三天,其产品产量如下表所示,试分析工人和机器对产品产量是否有显著影响?...
  • 方差分析(1) ——单因素方差分析及Excel示例

    万次阅读 多人点赞 2019-06-27 14:23:12
    文章目录什么是方差分析建立假设[^mcp]检验统计量偏差平方和均方F检验统计量使用Excel进行方差分析结果说明 什么是方差分析 Wikipedia: Analysis of variance (ANOVA) is a collection of statistical models used ...
  • 将同性别、体重相近的同一配伍组的5只大鼠,分别用5种方法染尘,共有6个配伍组30只大鼠,测得的各鼠全肺湿重,见下表。问5种处理间的全肺湿重有无差别?
  • 前面我们说了方差分析中的单因素方差分析,但是在实际工作中,影响因素往往不止一个,需要考虑两个或以上因素对实验结果的影响。比如某公司销售汽车,在销售时,除了要关注汽车的外形、价格、耗油量等因素以外,还要...
  • 因素方差分析

    千次阅读 多人点赞 2019-08-12 14:28:53
    统计学简介之十七——双因素方差分析 一、双因素方差分析定义 二、分析过程 2.1 数据结构 2.2 分析步骤
  • 今天将我最近学习SPSS单因素方差分析(ANOVA)分析,今天希望跟大家交流和分享一下: 继续以上一期的样本为例,雌性老鼠和雄性老鼠,在注射毒素后,经过一段时间,观察老鼠死亡和存活情况。 研究的问题是:老鼠在...
  • 如果我们想要了解这些因素中哪些因素对产量有显著性影响,或各个因素之间的交互作用,以及对结果有显著影响的因素的最佳水平等,就必须先进行实验,再进行分析,最后做出判断。 PART 01 Excel中的方差分析 ...
  • Python 统计分析--单因素方差分析

    万次阅读 2018-07-13 16:53:03
    Python 统计分析–单因素方差分析 方差分析的主要工作就是将观测数据的总变异(波动)按照变异的原因的不同分解为因子效应与试验误差,并对其作出数量分析,比较各种原因在总变异中所占的重要程度,以此作为进一步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,420
精华内容 4,168
关键字:

多因素方差分析案例