The Big Question

Every Pokémon fan “knows” Legendary Pokémon are stronger, and that Dragon and Fighting types hit hardest.

But is that real, or just a few famous examples?

Hypothesis testing lets us answer with data instead of anecdotes:

  1. Do Legendary/Mythical Pokémon have a higher average base stat total than regular Pokémon? (two-sample t-test)
  2. Does a Pokémon’s primary type affect its average Attack? (one-way ANOVA)
  3. Do types differ in how they attack (physical vs. special) or in how much? (paired t-tests, effect sizes)

The Data

  • 1025 Pokémon, every species from Generation I through IX
  • Six base stats for each: HP, Attack, Defense, Sp. Atk, Sp. Def, Speed
  • Base stat total (BST) = the sum of all six, a common measure of overall strength
  • 94 are Legendary or Mythical; 931 are regular
Name Type HP Atk Def Spe BST Status
Charizard Fire 78 84 78 100 534 Regular
Pikachu Electric 35 55 40 90 320 Regular
Mewtwo Psychic 106 110 90 130 680 Legendary/Mythical
Rayquaza Dragon 105 150 90 95 680 Legendary/Mythical

Exploring in 3D: Attack, Defense and Speed

Drag to rotate, scroll to zoom, hover for names.

Base Stat Totals: Legendary vs. Regular

The Legendary box sits far to the right, but a few Legendaries (like Cosmog, BST 200) are weaker than most regular Pokémon.

Setting Up the t-Test

Let \(\mu_L\) be the mean BST of Legendary/Mythical Pokémon and \(\mu_R\) that of regular Pokémon.

\[H_0: \mu_L = \mu_R \qquad \text{vs.} \qquad H_a: \mu_L \neq \mu_R\]

The groups have different sizes and spreads, so we use Welch’s t-test, which does not assume equal variances:

\[t = \frac{\bar{x}_L - \bar{x}_R}{\sqrt{\dfrac{s_L^2}{n_L} + \dfrac{s_R^2}{n_R}}} \qquad \nu \approx \frac{\left(\dfrac{s_L^2}{n_L} + \dfrac{s_R^2}{n_R}\right)^2} {\dfrac{(s_L^2/n_L)^2}{n_L - 1} + \dfrac{(s_R^2/n_R)^2}{n_R - 1}}\]

We reject \(H_0\) if the p-value \(= P(|T_\nu| \geq |t|)\) is below \(\alpha = 0.05\).

t-Test Results

## 
##  Welch Two Sample t-test
## 
## data:  base_stat_total by status
## t = -20.992, df = 128.5, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group Regular and group Legendary/Mythical is not equal to 0
## 95 percent confidence interval:
##  -197.9032 -163.8098
## sample estimates:
##            mean in group Regular mean in group Legendary/Mythical 
##                         411.1010                         591.9574
  • Mean BST: 592 (Legendary) vs. 411.1 (regular)

  • \(t = 20.99\) with \(\nu \approx 128.5\) degrees of freedom; p-value \(< 0.0001\)

  • 95% CI for \(\mu_L - \mu_R\): 163.8 to 197.9 points

  • Conclusion: reject \(H_0\). Legendaries are stronger on average, by roughly 180 stat points.

Does Type Affect Attack?

One-Way ANOVA

With \(k = 18\) types, testing every pair with t-tests would inflate false positives. ANOVA tests all the means at once:

\[H_0: \mu_1 = \mu_2 = \cdots = \mu_{18} \qquad \text{vs.} \qquad H_a: \text{at least one } \mu_j \text{ differs}\]

\[F = \frac{\text{MS}_{\text{between}}}{\text{MS}_{\text{within}}} = \frac{\sum_{j=1}^{k} n_j(\bar{y}_j - \bar{y})^2 \,/\, (k-1)} {\sum_{j=1}^{k}\sum_{i=1}^{n_j} (y_{ij} - \bar{y}_j)^2 \,/\, (N-k)}\]

Effect size: the share of variation in Attack explained by type,

\[\eta^2 = \frac{SS_{\text{between}}}{SS_{\text{total}}}\]

ANOVA Results

##               Df Sum Sq Mean Sq F value Pr(>F)    
## type_1        17 102239    6014   7.513 <2e-16 ***
## Residuals   1007 806048     800                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • \(F(17, 1007) = 7.51\), p-value \(< 0.0001\), so we reject \(H_0\): type does matter.
  • But \(\eta^2 = 0.113\): type explains only about 11% of the variation in Attack.
  • Fighting and Dragon do lead, but the spread within each type is much larger than the gaps between types.

Two Kinds of Offense: Attack vs. Sp. Atk

Every Pokémon: Attack vs. Sp. Atk

Interactive: hover for names, drag to zoom, double-click to reset. Click a type in the legend to hide it, or double-click to show only that type.

Paired t-Test: Does a Type Lean One Way?

Each Pokémon has both stats, so the two values are paired. For Pokémon \(i\) of a given type, let

\[D_i = \text{Atk}_i - \text{SpA}_i, \qquad H_0: \mu_D = 0 \quad \text{vs.} \quad H_a: \mu_D \neq 0\]

\[t = \frac{\bar{D}}{s_D / \sqrt{n}}, \qquad \text{df} = n - 1\]

We run this test once for each of the 18 types. To keep the overall false-positive rate at 5%, we use the Bonferroni correction:

\[\alpha^{*} = \frac{0.05}{18} \approx 0.0028 \qquad \Longleftrightarrow \qquad p_{\text{adj}} = \min(18p,\ 1) < 0.05\]

Which Types Lean?

Type n Mean Atk Mean SpA Mean D Adj. p-value Lean
Fighting 40 102.7 53.2 49.5 < 0.0001 Physical
Ground 40 93.4 52.5 40.9 < 0.0001 Physical
Rock 58 86.5 60.5 25.9 0.0003 Physical
Dragon 37 99.0 78.5 20.5 0.0147 Physical
Normal 118 74.4 56.9 17.4 < 0.0001 Physical
Psychic 60 63.0 90.7 -27.7 < 0.0001 Special
  • Diverge: Dragon, Fighting, Ground, Normal, Rock hit physically; only Psychic is reliably special.
  • Converge: 12 types (including Fire, Water, Grass and Ice) show no significant lean.

Mixing the Stats: Converge or Diverge?

Adding the stats together, type explains only 7% of total offense: the types converge. Taking the gap between them, type explains 23%: the types diverge. Types differ in how they attack far more than in how much. (Atk and Sp. Atk correlate only weakly, \(r = 0.28\).)

The R Code Behind the Boxplot

ggplot(poke, aes(x = status, y = base_stat_total, fill = status)) +
  geom_boxplot(width = 0.5, outlier.alpha = 0.6) +
  stat_summary(fun = mean, geom = "point", shape = 23,
               size = 3, fill = "white") +
  scale_fill_manual(values = status_cols) +
  labs(x = NULL, y = "Base stat total",
       caption = "White diamond = group mean") +
  coord_flip() +
  theme_minimal(base_size = 15) +
  theme(legend.position = "none")
t.test(base_stat_total ~ status, data = poke)   # Welch is the default
summary(aov(attack ~ type_1, data = poke))

Takeaways

  • Legendaries really are stronger. The difference is huge and statistically clear (about 180 BST points).
  • Type matters for Attack, but only a little. The effect is real but small (\(\eta^2 \approx 0.11\)).
  • Types differ in style, not power. Fighting and Ground are physical and Psychic is special, but total offense is nearly the same across types.
  • Statistical significance ≠ practical significance. With 1,000+ observations, even small effects get tiny p-values. Always check the effect size.
  • Caveats:
    • Base stats are designer choices, not random samples, so “population” here means the full roster.
    • Group variances differ, which is why we used Welch’s test. We ran 18 paired tests, so we used a Bonferroni correction.

Data Source