liveBook · Manning

Z-score

As explained in Statistics Slam Dunk

The z-score method standardizes a numeric observation by subtracting its population mean and dividing by the population standard deviation.

A z-score, also called a standard score, places a raw numeric value on a common scale by showing how many standard deviations it sits above or below its distribution mean. Compute it by subtracting the mean from the raw value and dividing by the standard deviation: z = (value − mean) / standard deviation. Positive scores are above the mean, negative scores are below it, and zero is at the mean. section 11.3 section 19.4.1

Standardizing with z-scores makes unlike measures comparable and adds context that raw values lack. It is especially useful when values span years whose schedules, rules, or styles of play differ, or when variables use different scales. For NBA payrolls and wins, standardization lets both measures share an axis; for historical scoring, it compares players with their own season’s league context rather than treating every era alike. section 11.4.2 section 14.2.6 section 19.0

Use z-scores in a practical workflow:

  • Choose a numeric variable and the population to compare, such as all teams in one season or all players in a given year. section 14.2.6 section 19.4.1
  • Calculate the group mean and standard deviation, then create a new standardized variable with the z-score formula. section 11.3 section 19.4.1
  • Interpret the sign and distance: a score of −0.8 is 0.8 standard deviations below that group’s mean, while 5.6 is far above it. section 19.4.1
  • Check the result: a z-score vector should have a mean near 0 and variance near 1; grouping and rounding can prevent exact values. section 19.4.1

Standardize scoring within each year

To compare points per game across changing NBA seasons, calculate each player’s score relative to the mean and standard deviation for that same year. In R, group by Year and create z_ppg with mutate(). A 1950 average of 3.8 PPG becomes −0.8, whereas 23.4 PPG becomes 5.6, revealing each player’s standing within that season rather than comparing raw totals across eras. section 19.4.1

dat2 %>%
 group_by(Year) %>%
 mutate(z_ppg = round((PPG - mean(PPG)) / sd(PPG), digits = 1)) -> dat4a

head(dat4a, n = 3)
## # A tibble: 3 × 5
## # Groups:   Year [1]
##   Year  Player         PPG Year_Player       z_ppg
##   <fct> <chr>        <dbl> <chr>             <dbl>
## 1 1950  Al Guokas      3.8 1950 Al Guokas     -0.8
## 2 1950  Alex Groza    23.4 1950 Alex Groza     5.6
## 3 1950  Alex Hannum*   7.5 1950 Alex Hannum*   0.4

tail(dat4a, n = 3)
## # A tibble: 3 × 5
## # Groups:   Year [1]
##   Year  Player           PPG Year_Player         z_ppg
##   <fct> <chr>          <dbl> <chr>               <dbl>
## 1 1999  Walt Williams    9.3 1999 Walt Williams    0.5
## 2 1999  Walter McCarty   5.7 1999 Walter McCarty  -0.2
## 3 1999  Will Perdue      2.4 1999 Will Perdue     -0.9

This R listing groups records by year and creates a rounded z-score for points per game, so each season supplies its own comparison baseline. section 19.4.1

Z-scores also prepare variables for multivariate analysis. Standardized payroll and win totals can be compared in a Cleveland dot plot, where the gap between their z-scores shows whether wins exceed or trail spending relative to league averages. They are also used before examining payroll-and-win patterns with K-means clustering. section 11.4.2 section 11.5.2

A z-score is a relative measure, not a raw performance total. A historically lower scoring average can rank as more exceptional after adjustment for its era’s mean and variability; for example, the cited comparisons give George Mikan’s 1950 average a higher standardized score than Wilt Chamberlain’s 1962 average. section 20.8

How Statistics Slam Dunk covers it

How deep it goes
Defines the formula, walks through R calculations and validation, and interprets grouped scoring results.
Examples
Uses NBA team payrolls and wins, plus yearly player points-per-game leaders from 1950 through 1999.
What it assumes
Introduces standard deviation and z-scores from basic numeric vectors before applying grouped R transformations.
What you can do after
Apply it via R group_by() and mutate() to create and validate standardized numeric variables.
How it connects
Connects standard deviation, variance, data standardization, Cleveland dot plots, and K-means clustering.

Also explained in

Compare how 8 books explain z-score →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Statistics Slam Dunk. The section links point to the parts of the book it draws on.