How to Perform a One-Way Analysis of Variance (ANOVA) in Python

Spread the love


Analysis of Variance (ANOVA) is a statistical method used to test differences between two or more means. ANOVA compares the variance (or dispersion) between data samples to the variance within each particular sample itself. If the between-group variance is high and the within-group variance is low, it indicates that the means of different groups differ significantly.

One-way ANOVA is a type of ANOVA that studies the impact of a single factor on a response variable. If you have more than one independent variable, you would use a two-way ANOVA or N-way ANOVA.

In this tutorial, we’ll guide you through the process of performing a one-way ANOVA using Python. We’ll use the powerful statistical libraries SciPy and Statsmodels, both widely used for data analysis and manipulation.

Step 1: Import Required Libraries

We’ll need to import the necessary Python libraries.

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

Step 2: Loading Your Dataset

To perform a one-way ANOVA test, we will use an example dataset. The dataset is based on plant growth, where we have one independent variable (type of fertilizer) and one dependent variable (plant growth).

We’ll create this dataset using pandas:

data = {'Fertilizer1': [6.2, 6.5, 6.8, 7.0, 7.2, 7.5], 
        'Fertilizer2': [8.2, 8.4, 8.5, 8.7, 8.8, 8.9], 
        'Fertilizer3': [7.2, 7.3, 7.5, 7.7, 7.8, 8.0]}
df = pd.DataFrame(data)

Step 3: Exploratory Data Analysis

Before performing ANOVA, it’s always good to perform some exploratory data analysis (EDA) on the dataset. Let’s find the means for each group:


Visualize the data using box plots to understand the distribution of growth rates across different fertilizers:


Step 4: Check Assumptions of ANOVA

Before you can use ANOVA, there are several assumptions that the data must meet:

  1. Normality: Each group of data should follow a normal distribution.
  2. Homogeneity of variances: All groups must have the same variance.
  3. Independence: Observations are independent of each other.

We won’t cover these assumptions in detail here, but it’s important to verify that your data meets them before proceeding with ANOVA.

Step 5: Calculate the One-Way ANOVA

We will now calculate the one-way ANOVA using two different methods.

Method 1: Using the scipy.stats Library

First, we’ll use the f_oneway function from the scipy.stats library:

F, p = stats.f_oneway(df['Fertilizer1'], df['Fertilizer2'], df['Fertilizer3'])
print("F-value:", F)
print("p-value:", p)

The f_oneway function returns two values: F-value and p-value. The F-value is a measure of how much the means of each group vary. The p-value is a measure of the probability that the differences in the means occurred by chance. If the p-value is less than 0.05, we can reject the null hypothesis that all groups have the same population mean.

Method 2: Using the statsmodels Library

The statsmodels library provides a more detailed output for one-way ANOVA. First, we need to reshape the data:

df_melt = pd.melt(df.reset_index(), id_vars=['index'], value_vars=['Fertilizer1', 'Fertilizer2', 'Fertilizer3'])
df_melt.columns = ['index', 'treatments', 'value']

Next, we calculate the one-way ANOVA:

model = ols('value ~ C(treatments)', data=df_melt).fit()
anova_table = sm.stats.anova_lm(model, typ=2)

The ols function (Ordinary Least Squares) is used to fit the model, and the anova_lm function is used to calculate the ANOVA table.


Python provides powerful libraries that allow you to perform complex statistical tests, like one-way ANOVA, with just a few lines of code. It’s important to remember that while these tools are powerful, they’re not foolproof. Always ensure that your data meets the assumptions of the statistical test you’re using, and be cautious in your interpretation of the results.

Understanding and performing ANOVA is crucial in data analysis and decision making. It’s a versatile tool that helps us compare means of different groups and discover whether the differences are statistically significant.

Leave a Reply