如何在Python中执行双向 ANOVA
双向方差分析:统计中的双向方差分析代表方差分析,用于检查被分为两个因素的三个或更多的平均值之间是否存在统计学上的显着差异。简而言之,ANOVA 是统计学中进行的一项检验,用于解释至少三组平均值之间的差异。双向 ANOVA 的主要目标是找出两个因素如何影响响应变量,并找出响应变量上的两个因素之间是否存在关系。
在系统中安装 pandas 和 NumPy 库的语法:
pip3 install numpy pandas
在Python中执行双向方差分析:
让我们考虑一个例子,科学家需要知道植物生长是否受到肥料和浇水频率的影响。他们正好种植了 30 株植物,让它们在不同的施肥条件和浇水频率下生长六个月。整整六个月后,他们记录了每株植物厘米的高度。在Python中执行双向 ANOVA 是一个循序渐进的过程,这些将在下面讨论:
第 1 步:导入库。
第一步是导入上面安装的库。
Python3
# Importing libraries
import numpy as np
import pandas as pd
Python3
# Importing libraries
import numpy as np
import pandas as pd
# Create a dataframe
dataframe = pd.DataFrame({'Fertilizer': np.repeat(['daily', 'weekly'], 15),
'Watering': np.repeat(['daily', 'weekly'], 15),
'height': [14, 16, 15, 15, 16, 13, 12, 11, 14,
15, 16, 16, 17, 18, 14, 13, 14, 14,
14, 15, 16, 16, 17, 18, 14, 13, 14,
14, 14, 15]})
Python3
# Importing libraries
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Performing two-way ANOVA
model = ols(
'height ~ C(Fertilizer) + C(Watering) +\
C(Fertilizer):C(Watering)', data=df).fit()
sm.stats.anova_lm(model, typ=2)
Python3
# Importing libraries
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Create a dataframe
dataframe = pd.DataFrame({'Fertilizer': np.repeat(['daily', 'weekly'], 15),
'Watering': np.repeat(['daily', 'weekly'], 15),
'height': [14, 16, 15, 15, 16, 13, 12, 11,
14, 15, 16, 16, 17, 18, 14, 13,
14, 14, 14, 15, 16, 16, 17, 18,
14, 13, 14, 14, 14, 15]})
# Performing two-way ANOVA
model = ols('height ~ C(Fertilizer) + C(Watering) +\
C(Fertilizer):C(Watering)',
data=dataframe).fit()
result = sm.stats.anova_lm(model, type=2)
# Print the result
print(result)
第二步:输入数据。
让我们创建一个包含以下三个变量的 pandas DataFrame:
- 肥料:每株植物每天或每周施肥的频率。
- 浇水:每天或每周给每株植物浇水的频率。
- 高度:六个月后每株植物的高度(英寸)。
例子:
Python3
# Importing libraries
import numpy as np
import pandas as pd
# Create a dataframe
dataframe = pd.DataFrame({'Fertilizer': np.repeat(['daily', 'weekly'], 15),
'Watering': np.repeat(['daily', 'weekly'], 15),
'height': [14, 16, 15, 15, 16, 13, 12, 11, 14,
15, 16, 16, 17, 18, 14, 13, 14, 14,
14, 15, 16, 16, 17, 18, 14, 13, 14,
14, 14, 15]})
第 3 步:进行双向 ANOVA:
为了执行双向方差分析,Statsmodels 库为我们提供了 anova_lm()函数。该函数的语法如下所示,
Syntax:
sm.stats.anova_lm(model, type=2)
Parameters:
- model: It represents model statistics
- type: It represents the type of Anova test to perform that is { I or II or III or 1 or 2 or 3 }
Python3
# Importing libraries
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Performing two-way ANOVA
model = ols(
'height ~ C(Fertilizer) + C(Watering) +\
C(Fertilizer):C(Watering)', data=df).fit()
sm.stats.anova_lm(model, typ=2)
第4步:结合所有步骤。
例子:
Python3
# Importing libraries
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Create a dataframe
dataframe = pd.DataFrame({'Fertilizer': np.repeat(['daily', 'weekly'], 15),
'Watering': np.repeat(['daily', 'weekly'], 15),
'height': [14, 16, 15, 15, 16, 13, 12, 11,
14, 15, 16, 16, 17, 18, 14, 13,
14, 14, 14, 15, 16, 16, 17, 18,
14, 13, 14, 14, 14, 15]})
# Performing two-way ANOVA
model = ols('height ~ C(Fertilizer) + C(Watering) +\
C(Fertilizer):C(Watering)',
data=dataframe).fit()
result = sm.stats.anova_lm(model, type=2)
# Print the result
print(result)
输出:
解释结果:
以下是输出中每个因子的 p 值:
- 肥料 p 值等于 0.913305
- 浇水 p 值等于 0.990865
- 肥料 * 浇水:p 值等于 0.904053
水和太阳的 p 值小于 0.05,这意味着这两个因素的均值对植物高度具有统计上的显着影响。交互作用的 p 值 (0.904053) 大于 0.05,这表明施肥频率和浇水频率之间没有显着的交互作用。