方差分析结果描述,方差分析法确定主要因素

首页 > 教育 > 作者:YD1662024-05-19 15:37:02

一般来说,如果与F相关联的p值小于0.05,则将拒绝原假设并支持替代假设。如果原假设被拒绝,我们可以得出结论,所有组的均值不相等。

注:如果被测组之间不存在真正的差异,也就是所谓的零假设,那么方差分析的F比统计结果将接近1。

ANOVA检验的假设

在进行方差分析之前,我们需要做一些假设:

  1. 从因子水平定义的总体中独立且随机地获得观察结果
  2. 每个因子水平的数据均呈正态分布
  3. 案例独立性:样本案例应相互独立
  4. 方差的同质性:同质性是指各组之间的方差应近似相等

方差同质性的假设可以用Levene检验或Brown-Forsythe检验来检验。分数分布的正态性可以用直方图、偏度和峰度值来检验,也可以用Shapiro-Wilk或Kolmogorov-Smirnov或Q-Q图来检验。独立性的假设可以根据研究设计来确定。

值得注意的是,方差分析对于假设独立性的违规行为并不强大。这就是说,即使你违反了同质性或正态性的假设,你也可以进行测试并基本相信结果。

但是,如果违反了独立性假设,方差分析的结果是无效的。一般来说,在违反同质性的情况下,如果具有相同大小的组,则分析被认为是可靠的。对于违反正态性的情况,如果样本量较大,继续进行方差分析通常是可以的。

方差分析检验类型
  1. 单向方差分析:单向方差分析只有一个自变量例如,可以按国家/地区评估日冕案例的差异,并且一个国家可以将2个,20个或更多不同的类别进行比较
  2. 双向方差分析:双向方差分析(也称为因子方差分析)是指使用两个独立变量的方差分析扩展上面的示例,双向方差分析可以按年龄组(独立变量1)和性别(独立变量2)检查日冕病例(因变量)的差异。双向方差分析可用于检查两个独立变量之间的相互作用。相互作用表明,自变量的所有类别之间的差异不是统一的例如,老年组总体上可能比青年组具有更高的日冕病例,但是与欧洲国家相比,亚洲国家的差异可能更大(或更小)
  3. N向方差分析:一个研究者也可以使用两个以上的自变量,这是一个N向方差分析(N是你拥有的自变量的数量),也就是MANOVA检验。例如,可以同时按国家、性别、年龄组、种族等检查日冕病例的潜在差异方差分析会给你一个单变量的f值,而方差分析会给你一个多变量的f值
有复制与无复制

你可能经常听到关于方差分析的复制和不复制。让我们了解这些是什么:

  1. 具有复制功能的双向ANOVA:两个小组和这些小组的成员所做的不只是一件事情例如,假设尚未开发出针对COVID-19的疫苗,医生正在尝试两种不同的治疗方法来治愈两组感染COVID-19的患者
  2. 双向ANOVA(无复制):只有一个组并且对同一组进行双重测试时使用例如,假设已为COVID-19开发了一种疫苗,研究人员正在对一组志愿者进行疫苗接种之前和之后的测试,以查看其是否有效
事后检验

当我们进行方差分析时,我们试图确定各组之间是否存在统计学上的显著差异。如果我们发现存在差异,则需要检查组差异的位置。

基本上,事后检验告诉研究者哪些组彼此不同。

此时,你可以运行事后检验,这是t检验,用于检验组之间的均值差异。可以进行多个比较测试来控制I型错误率,包括Bonferroni、Scheffe、Dunnet和Tukey测试。

现在,让我们用一些真实的数据来理解每种类型的方差分析测试,并使用Python。

Python中的单向方差分析测试

我从一个正在进行的Kaggle竞赛中下载了这些数据:https://www.kaggle.com/sudalairajkumar/covid19-in-india

在此测试中,我们将尝试分析区域或状态的密度与日冕例数之间的关系。因此,我们将根据每个州的人口密度来映射每个州。

首先导入所有必需的库和数据:

import pandas as pd import numpy as np import scipy.stats as stats import os import random import statsmodels.api as sm import statsmodels.stats.multicomp from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm import matplotlib.pyplot as plt from scipy import stats import seaborn as sns

从目录加载数据:

StatewiseTestingDetails=pd.read_csv('./StatewiseTestingDetails.csv') population_india_census2011=pd.read_csv('./population_india_census2011.csv')

StatewiseTestingDetails包含有关每个州一天中阳性和阴性病例总数的信息。而human_india_census2011包含有关每个州的密度的信息以及有关人口的其他相关信息。

population_india_census2011.head() StatewiseTestingDetails.head() #了解数据 StatewiseTestingDetails['Positive'].sort_values().head() #排序

从上面的代码片段中,我们可以看到有几个州在一天内有0个日冕案例或没有日冕案例。所以让我们看看这样的州:

StatewiseTestingDetails['State'][StatewiseTestingDetails['Positive']==1].unique()

我们看到,Nagaland和Sikkim在一天内也没有日冕病例。另一方面,Arunachal和Mizoram一天只有一个日冕病例。

估算缺失值:我们注意到“Positive”列中有许多缺失值。因此,让我们用每个州的Positive中值来估算这些缺失的值:

stateMedianData=StatewiseTestingDetails.groupby('State')[['Positive']].median().reset_index().rename(columns={'Positive':'Median'}) stateMedianData.head() for index,row in StatewiseTestingDetails.iterrows(): if pd.isnull(row['Positive']): StatewiseTestingDetails['Positive'][index]=int(stateMedianData['Median'][stateMedianData['State']==row['State']]) #合并StatewiseTestingDetails & population_india_census2011 data=pd.merge(StatewiseTestingDetails,population_india_census2011,on='State')

现在我们可以编写一个函数,根据每个州的密度创建一个密度组bucket,其中Dense1<Dense2<Dense3<Dense4:

def densityCheck(data): data['density_Group']=0 for index,row in data.iterrows(): status=None i=row['Density'].split('/')[0] try: if (',' in i): i=int(i.split(',')[0] i.split(',')[1]) elif ('.' in i): i=round(float(i)) else: i=int(i) except ValueError as err: pass try: if (0<i<=300): status='Dense1' elif (300<i<=600): status='Dense2' elif (600<i<=900): status='Dense3' else: status='Dense4' except ValueError as err: pass data['density_Group'].iloc[index]=status return data

现在,用密度组映射每个州。我们可以导出这些数据,以便以后在双向方差分析测试中使用:

data=densityCheck(data) #导出 stateDensity=data[['State','density_Group']].drop_duplicates().sort_values(by='State')

方差分析结果描述,方差分析法确定主要因素(5)

方差分析结果描述,方差分析法确定主要因素(6)

让我们对可以用于方差分析测试的数据集进行重新排列:

df=pd.DataFrame({'Dense1':data[data['density_Group']=='Dense1']['Positive'], 'Dense2':data[data['density_Group']=='Dense2']['Positive'], 'Dense3':data[data['density_Group']=='Dense3']['Positive'], 'Dense4':data[data['density_Group']=='Dense4']['Positive']})

方差分析结果描述,方差分析法确定主要因素(7)

我们的ANOVA检验假设之一是应随机选择样本,并且样本应接近高斯分布。因此,让我们从每个因子或水平中选择10个随机样本:

np.random.seed(1234) dataNew=pd.DataFrame({'Dense1':random.sample(list(data['Positive'][data['density_Group']=='Dense1']), 10), 'Dense2':random.sample(list(data['Positive'][data['density_Group']=='Dense1']), 10), 'Dense3':random.sample(list(data['Positive'][data['density_Group']=='Dense1']), 10), 'Dense4':random.sample(list(data['Positive'][data['density_Group']=='Dense1']), 10)})

让我们绘制日冕案例数量的密度分布图,以检查它们在不同密度组中的分布:

方差分析结果描述,方差分析法确定主要因素(8)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.