Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install brycewang-stanford-awesome-agent-skills-for-empirical-research-skills-43-wentorai-research-plugins-skills-analysis-statistics-pgit clone https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research.gitcp Awesome-Agent-Skills-for-Empirical-Research/SKILL.MD ~/.claude/skills/brycewang-stanford-awesome-agent-skills-for-empirical-research-skills-43-wentorai-research-plugins-skills-analysis-statistics-p/SKILL.md---
name: power-analysis-guide
description: "Sample size calculation and statistical power analysis guide"
metadata:
openclaw:
emoji: "🎯"
category: "analysis"
subcategory: "statistics"
keywords: ["sample size calculation", "power analysis", "effect size", "significance testing"]
source: "wentor-research-plugins"
---
# Power Analysis Guide
Calculate appropriate sample sizes for your study using power analysis, understand effect sizes, and avoid underpowered or wastefully overpowered designs.
## Core Concepts
### The Four Parameters of Power Analysis
Every power analysis involves four interrelated quantities. Fix any three to solve for the fourth:
| Parameter | Symbol | Definition | Typical Value |
|-----------|--------|-----------|---------------|
| **Effect size** | d, r, f, etc. | Magnitude of the phenomenon you expect to detect | Varies by field |
| **Significance level** (alpha) | alpha | Probability of Type I error (false positive) | 0.05 |
| **Statistical power** (1 - beta) | 1 - beta | Probability of detecting a true effect | 0.80 or 0.90 |
| **Sample size** | N | Number of observations needed | Solve for this |
### Error Types
| | H0 is true (no effect) | H0 is false (effect exists) |
|---|---|---|
| **Reject H0** | Type I error (alpha) | Correct (power = 1 - beta) |
| **Fail to reject H0** | Correct (1 - alpha) | Type II error (beta) |
## Effect Size Conventions
### Cohen's d (Two-Group Comparison)
```
d = (M1 - M2) / SD_pooled
```
| Size | Cohen's d | Interpretation |
|------|-----------|---------------|
| Small | 0.2 | Subtle, may need large N to detect |
| Medium | 0.5 | Noticeable, typical in social sciences |
| Large | 0.8 | Obvious, often visible without statistics |
### Correlation (r)
| Size | r | r-squared |
|------|---|-----------|
| Small | 0.1 | 1% variance explained |
| Medium | 0.3 | 9% variance explained |
| Large | 0.5 | 25% variance explained |
### Cohen's f (ANOVA)
| Size | f | Equivalent eta-squared |
|------|---|----------------------|
| Small | 0.10 | 0.01 |
| Medium | 0.25 | 0.06 |
| Large | 0.40 | 0.14 |
### Odds Ratio (Logistic Regression)
| Size | OR |
|------|-----|
| Small | 1.5 |
| Medium | 2.5 |
| Large | 4.0 |
## Power Analysis in Python (statsmodels)
### Two-Sample t-Test
```python
from statsmodels.stats.power import TTestIndPower
analysis = TTestIndPower()
# Solve for sample size
n = analysis.solve_power(
effect_size=0.5, # Cohen's d = medium
alpha=0.05, # Significance level
power=0.80, # 80% power
ratio=1.0, # Equal group sizes
alternative='two-sided'
)
print(f"Required N per group: {int(n) + 1}") # Output: 64
# Solve for power (given N)
power = analysis.solve_power(
effect_size=0.5,
alpha=0.05,
nobs1=50,
ratio=1.0,
alternative='two-sided'
)
print(f"Power with N=50 per group: {power:.3f}") # Output: 0.697
```
### Paired t-Test
```python
from statsmodels.stats.power import TTestPower
analysis = TTestPower()
n = analysis.solve_power(
effect_size=0.3, # Small-medium effect
alpha=0.05,
power=0.80,
alternative='two-sided'
)
print(f"Required N (paired): {int(n) + 1}") # Output: 90
```
### One-Way ANOVA
```python
from statsmodels.stats.power import FTestAnovaPower
analysis = FTestAnovaPower()
n = analysis.solve_power(
effect_size=0.25, # Cohen's f = medium
alpha=0.05,
power=0.80,
k_groups=4 # Number of groups
)
print(f"Required N per group: {int(n) + 1}") # Output: 45
```
### Chi-Square Test
```python
from statsmodels.stats.power import GofChisquarePower
analysis = GofChisquarePower()
n = analysis.solve_power(
effect_size=0.3, # Cohen's w = medium
alpha=0.05,
power=0.80,
n_bins=4 # Degrees of freedom + 1
)
print(f"Required total N: {int(n) + 1}")
```
### Multiple Regression
```python
from statsmodels.stats.power import FTestPower
analysis = FTestPower()
# For R-squared: convert to f2 = R2 / (1 - R2)
r_squared = 0.10 # Expected R-squared for the model
f2 = r_squared / (1 - r_squared) # f2 = 0.111
n = analysis.solve_power(
effect_size=f2,
alpha=0.05,
power=0.80,
df_num=5 # Number of predictors
)
# n returned is df_denom; total N = n + df_num + 1
total_n = int(n) + 5 + 1
print(f"Required total N: {total_n}")
```
## Power Analysis in R (pwr Package)
```r
library(pwr)
# Two-sample t-test
result <- pwr.t.test(d = 0.5, sig.level = 0.05, power = 0.80,
type = "two.sample", alternative = "two.sided")
cat("N per group:", ceiling(result$n), "\n")
# Correlation test
result <- pwr.r.test(r = 0.3, sig.level = 0.05, power = 0.80,
alternative = "two.sided")
cat("Total N:", ceiling(result$n), "\n")
# One-way ANOVA (4 groups)
result <- pwr.anova.test(k = 4, f = 0.25, sig.level = 0.05, power = 0.80)
cat("N per group:", ceiling(result$n), "\n")
# Chi-square test
result <- pwr.chisq.test(w = 0.3, df = 3, sig.level = 0.05, power = 0.80)
cat("Total N:", ceiling(result$N), "\n")
# Plot power curve
result <- pwr.t.test(d = 0.5, sig.level = 0.05, power = NULL,
n = seq(10, 200, by = 5))
plot(result)
```
## Using G*Power (Desktop Application)
G*Power (gpower.hhu.de) is a free, widely-used GUI application for power analysis:
1. **Select test family**: t-tests, F-tests, chi-square, z-tests, exact tests
2. **Select statistical test**: e.g., "Means: Difference between two independent means (two groups)"
3. **Select type of analysis**: A priori (compute N), Post hoc (compute power), Sensitivity (compute detectable effect)
4. **Input parameters**: Effect size, alpha, power, allocation ratio
5. **Calculate**: Click "Calculate" to get the result
6. **Plot**: Use "X-Y plot for a range of values" to visualize power curves
## Practical Recommendations
### Choosing Effect Sizes
Do NOT blindly use Cohen's conventions. Instead:
1. **Literature review**: Find effect sizes reported in similar studies
2. **Pilot data**: Run a small pilot study to estimate the effect
3. **Smallest effect of interest (SESOI)**: What is the smallest effect that would be practically meaningful?
4. **Meta-analyses**: Use pooled effect sizes from meta-analyses in your area
### Common Mistakes
| Mistake | Problem | Solution |
|---------|---------|----------|
| Post hoc power analysis | Circular and uninformative after data collection | Only do a priori power analysis |
| Using Cohen's "medium" by default | May be unrealistic for your field | Base on literature or SESOI |
| Ignoring attrition | Actual N may be lower than planned | Inflate N by 10-20% for expected dropout |
| Forgetting multiple comparisons | Bonferroni corrections reduce power | Adjust alpha for the number of tests |
| Not reporting power analysis | Reviewers cannot evaluate adequacy | Always report in Methods section |
### Reporting Template
```
A priori power analysis was conducted using [G*Power 3.1 / statsmodels / R pwr].
For a [test name] with an expected effect size of [d/r/f = X] (based on
[source: previous study / meta-analysis / pilot data]), alpha = .05, and
power = .80, the required sample size was [N per group / total N]. To account
for an estimated [X]% attrition rate, we recruited [final N] participants.
```