Regression Analysis with SciPy (original) (raw)

Last Updated : 23 Jul, 2025

Regression analysis is a statistical technique used to examine the relationship between one or more independent variables and a dependent variable. It helps in modelling and analyzing data where the focus is on the relationship between variables. In Python SciPy is a popular library for statistical analysis which offers simple and efficient tools for performing regression using its stats module.

Regression-Line-copy

Regression Analysis

Regression Analysis

Regression analysis is a statistical technique used to test the relationship between a dependent variable and one or more independent variables. It helps in understanding how the dependent variable changes when any one of the independent variables is varied while the others are held fixed. Regression analysis is commonly used for prediction, forecasting and determining causal relationships between variables.

1. Using SciPy for Linear Regression

Linear Regression models a straight line relationship between one independent and one dependent variable:

y = mx+c

import numpy as np from scipy import stats import matplotlib.pyplot as plt

Sample data

x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 5])

Perform linear regression

slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)

print(f"Slope: {slope}") print(f"Intercept: {intercept}") print(f"R-squared: {r_value**2}")

plt.scatter(x, y, color='blue', label='Data') plt.plot(x, slope * x + intercept, color='red', label='Regression Line') plt.legend() plt.xlabel("X") plt.ylabel("Y") plt.title("Linear Regression with SciPy") plt.show()

`

**Output:

Screenshot-2025-06-23-095651

Output for Linear Regression

2. Using SciPy for Exponential Regression

Exponential Regression is used when data shows exponential growth or decay modelled as:

y = a \cdot e^{bx}

import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt

#Sample data x = np.array([0, 1, 2, 3, 4]) y = np.array([1, 2.7, 7.4, 20.1, 54.6])

Define the exponential function

def exp_func(x, a, b): return a * np.exp(b * x)

Fit curve

params, _ = curve_fit(exp_func, x, y) a, b = params print(f"a = {a}, b = {b}")

Plot

x_line = np.linspace(min(x), max(x), 100) plt.scatter(x, y) plt.plot(x_line, exp_func(x_line, *params), color='green') plt.show()

`

**Output:

Screenshot-2025-06-23-095544

Output for Exponential Regression

3. Using SciPy for Logarithmic Regression

Logarithmic Regression models relationships where the dependent variable changes proportionally to the logarithm of the independent variable:

y = a + b \ln(x)

import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5]) y = np.array([2.3, 3.1, 3.8, 4.4, 5.0])

def log_func(x, a, b): return a + b * np.log(x)

params, _ = curve_fit(log_func, x, y) print(f"a = {params[0]}, b = {params[1]}")

Plot

x_line = np.linspace(min(x), max(x), 100) plt.scatter(x, y) plt.plot(x_line, log_func(x_line, *params), color='purple') plt.show()

`

**Output:

Screenshot-2025-06-23-095722

Output for Logarithmic Regression

4. Using SciPy for Logistic Regression

Logistic Regression models S shaped curves often used for classification or growth processes:

y = \frac{L}{1 + e^{-k(x - x_0)}}

import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100) y = 1 / (1 + np.exp(-1.5*(x - 5))) + 0.05 * np.random.normal(size=len(x))

def logistic(x, L, k, x0): return L / (1 + np.exp(-k*(x - x0)))

params, _ = curve_fit(logistic, x, y, p0=[1, 1, 1]) print(f"L = {params[0]}, k = {params[1]}, x0 = {params[2]}")

plt.scatter(x, y, s=10) plt.plot(x, logistic(x, *params), color='red') plt.title("Logistic Regression") plt.show()

`

**Output:

Screenshot-2025-06-23-095850

Output for Logistic Regression