方差分析(Analysis of Variance,简称ANOVA)是一种统计方法,用于比较两个或更多组之间的平均值是否存在显著差异。它可以帮助确定不同组之间的变异程度是否超过了在组内观察到的变异程度。方差分析通常用于实验设计和研究中,以确定不同处理或条件对变量的影响是否显著。
方差分析的基本思想是将总体变异分解为两部分:组间变异和组内变异。组间变异是指不同组之间的差异,而组内变异是指同一组内观察值之间的差异。通过比较组间和组内的变异程度,可以得出关于组别平均值是否相等的结论。
方差分析有三种主要类型:
单因素方差分析(One-Way ANOVA):用于比较一个因素(独立变量)对一个因变量的影响,通常用于比较三个或更多水平的情况。
两因素方差分析(Two-Way ANOVA):用于比较两个因素对因变量的影响,可以同时考虑这两个因素的主效应和交互效应。
多因素方差分析(Multifactorial ANOVA):用于比较两个以上因素对因变量的影响,可以同时考虑多个因素之间的交互效应。
方差分析的假设包括对数据的正态性、方差齐性和独立性的假设。如果这些假设不成立,可能需要采用非参数方法或对数据进行转换。
在进行方差分析时,通常需要计算F统计量,然后通过比较F统计量与临界值来进行假设检验,判断差异是否显著。
import numpy as np
from scipy.stats import f_oneway
# 创建样本数据,假设有三组数据
group1 = np.array([20, 22, 25, 28, 30])
group2 = np.array([18, 21, 24, 27, 29])
group3 = np.array([15, 18, 22, 25, 28])
# 使用f_oneway进行单因素方差分析
f_statistic, p_value = f_oneway(group1, group2, group3)
# 打印结果
print("F-statistic:", f_statistic)
print("P-value:", p_value)
# 根据P-value判断是否拒绝原假设
alpha = 0.05
if p_value < alpha:
print("拒绝原假设,表示组之间存在显著差异")
else:
print("接受原假设,表示组之间不存在显著差异")
输出结果:
F-statistic: 0.6968750000000001
P-value: 0.5172188519597685
接受原假设,表示组之间不存在显著差异
import statsmodels.api as sm
from statsmodels.formula.api import ols
import pandas as pd
# 示例数据
data = {
'FactorA': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'FactorB': ['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z'],
'Variable': [10, 12, 8, 14, 16, 11, 9, 13, 7]
}
df = pd.DataFrame(data)
# 使用ols函数定义模型
model = ols('Variable ~ FactorA + FactorB + FactorA:FactorB', data=df).fit()
# 使用anova_lm进行方差分析
anova_table = sm.stats.anova_lm(model, typ=2)
# 打印方差分析结果
print(anova_table)
# 提取 p-value
p_value_a = anova_table['PR(>F)']['FactorA']
p_value_b = anova_table['PR(>F)']['FactorB']
p_value_interaction = anova_table['PR(>F)']['FactorA:FactorB']
# 判断是否拒绝原假设
alpha = 0.05
if p_value_a < alpha:
print("因素A对因变量有显著影响。")
else:
print("因素A对因变量没有显著影响。")
if p_value_b < alpha:
print("因素B对因变量有显著影响。")
else:
print("因素B对因变量没有显著影响。")
if p_value_interaction < alpha:
print("因素A和因素B之间存在显著交互作用。")
else:
print("因素A和因素B之间没有显著交互作用。")
输出结果:
sum_sq df F PR(>F)
FactorB 37.555556 2.0 1.888268 0.294558
FactorA 0.166667 1.0 0.016760 0.905186
FactorA:FactorB 1.333333 2.0 0.067039 0.936520
Residual 29.833333 3.0 NaN NaN
因素A对因变量没有显著影响。
因素B对因变量没有显著影响。
因素A和因素B之间没有显著交互作用。