🎉 75% of content is free forever — Unlock Premium from $10/mo →
CW
Search courses…
💼 Servicesℹ️ About✉️ ContactView Pricing Plansfrom $10

Sample Size Determination — How Many Observations Do You Need?

Foundations of StatisticsSampling Theory🟢 Free Lesson

Advertisement

Sample Size Determination — How Many Observations Do You Need?

Foundations of Statistics

Planning for Statistical Success

Sample size determination ensures studies have adequate power to detect meaningful effects while avoiding unnecessary data collection. It balances statistical requirements against practical constraints like time, cost, and ethics.

  • Clinical Trials — Ensuring sufficient power to detect clinically meaningful treatment effects
  • Market Research — Optimizing survey costs while maintaining estimate precision
  • Quality Assurance — Determining inspection sample sizes for reliable defect detection

The right sample size is the foundation of trustworthy statistical conclusions.


What Is Sample Size Determination?


Core Formulas


Derivation: Inverting the Margin of Error

Proof sketch: The margin of error is the half-width of the CI. Setting to the desired precision and solving for gives the minimum sample size that achieves that precision. Rounding up ensures the actual margin is at most .


Sample Size for Hypothesis Testing (Power Analysis)


Worked Example: Clinical Trial Design

A pharmaceutical company wants to detect a 3 mmHg reduction in blood pressure with 80% power at . Prior studies suggest mmHg.

Step 1: Identify parameters: , , (), power (, ).

Step 2: Compute:

Step 3: Round up: per group, total .


The Effect Size Pyramid


Python Implementation

import numpy as np
from scipy import stats

def sample_size_mean(sigma, E, alpha=0.05):
    """Sample size for estimating a mean with margin of error E."""
    z = stats.norm.ppf(1 - alpha / 2)
    return int(np.ceil((z * sigma / E) ** 2))

def sample_size_proportion(p, E, alpha=0.05):
    """Sample size for estimating a proportion with margin of error E."""
    z = stats.norm.ppf(1 - alpha / 2)
    return int(np.ceil(z**2 * p * (1 - p) / E**2))

def sample_size_two_sample(delta, sigma, alpha=0.05, power=0.80):
    """Sample size per group for two-sample t-test."""
    z_alpha = stats.norm.ppf(1 - alpha / 2)
    z_beta = stats.norm.ppf(power)
    return int(np.ceil(2 * sigma**2 * (z_alpha + z_beta)**2 / delta**2))

# Example 1: Mean estimation
print(f"n for σ=10, E=2, 95% CI: {sample_size_mean(10, 2, 0.05)}")
print(f"n for σ=10, E=1, 95% CI: {sample_size_mean(10, 1, 0.05)}")

# Example 2: Proportion estimation
print(f"n for p=0.5, E=0.03, 95% CI: {sample_size_proportion(0.5, 0.03)}")
print(f"n for p=0.2, E=0.03, 95% CI: {sample_size_proportion(0.2, 0.03)}")

# Example 3: Two-sample test
print(f"n per group for δ=3, σ=8, 80% power: {sample_size_two_sample(3, 8, 0.05, 0.80)}")
print(f"n per group for δ=2, σ=8, 80% power: {sample_size_two_sample(2, 8, 0.05, 0.80)}")

Key Takeaways

Need Expert Statistics Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement