Magnus Carlsen vs Hikaru Nakamura

Who performed better in 2023 titled tuesday awards

Author
Affiliation

Torsten Blass

https://www.youtube.com/c/TheDataDigest

Published

July 29, 2024

Keywords

Quarto, Chess.com, Magnus Carlsen, Hikaru Nakamura, Titled Tuesday

1 Setup & Loading data

Show the code
# load helper functions
source("../R/2_helper_functions.R")
[1] 1 2 2 3
Show the code
# load the tidyverse
library(tidyverse)
library(patchwork)     # combine charts together
library(DT)            # interactive tables
library(knitr)         # static table with the kable() function
library(plotly)        # interactive graphs
library(glue)
library(scales)
Show the code
# Read the clean dataset
TT <- readRDS(file = "../input/TitledTuesday_2023_df.RDS")
player_df <- readRDS(file = "../input/player_2023_df.RDS")
matches_df <- readRDS(file = "../input/matches_2023_df.RDS")
results_df <- readRDS(file = "../input/results_2023_df.RDS")
tournament_streak <- readRDS(file = "../input/tournament_streak_2023_df.RDS")
winning_streak <- readRDS(file = "../input/winning_streak_2023_df.RDS")
week_streak <- readRDS(file = "../input/week_streak_2023_df.RDS")
winning_streak_df <- readRDS(file = "../input/winning_streak_df_2023_df.RDS")

2 Introduction

In this article we are looking into the two dots of the top right corner of this scatter plot that shows players (in grey), international masters and grandmasters that participated in at least ten Titled Tuesday Tournaments with their average rating and average score (x out of 11). The top right corner is reserved for Hikaru Nakamura and Magnus Carlsen.

Fig.1 - Scatterplot

For reference I included an interactive table with all players that participated in at least two tournaments in 2023. Sorted by decreasing average score. Filter for participations can be set in the table header via the slider function. Currently I include all columns but can easily remove some and rename them. Maybe it is best to have separated tables with only a few columns that are important for the relevant sections (like winning chances and prize money later)

We can look at the total prize money earned throughout 2023 to find Hikaru ($29,000) winning almost twice as much as Magnus ($15,850). Hikaru also won the tournament twice as often as Magnus (18 vs 9 wins), but this is mostly due to the fact that he participated almost twice as often (74 vs 39). See chart below for the top 10 players from Titled Tuesday 2023 tournaments with regards to their prize money won based on the places 1-5.

Fig.2 - Winning the tournament, placing top 5, total prize money

3 Winning Chance and money per participation

To find out if one of the players was actually out performing the other we have to check their “per tournament statistics”.

Hikaru won 18 out of 74 tournaments (24.3%) and is slightly ahead of Magnus, who won 9 out of 39 tournaments (23.1%).

Honorable mention of Liem Le who one 3 out of 10 tournaments (30%) and the 4th place Maxime Vachier-Lagrave, who won 5 out of 25 tournaments (20%).

With regards to the average prize money per participation Magnus ($406) holds a slight edge over Hikaru ($401).

4 Winning with white or black pieces

When we look at players that participated in ten or more Titled Tuesday tournaments (to have a somewhat solid foundation for winning percentages). We see that Magnus has the highest winning percentage of all players (80% with white pieces and 72.7% with black pieces). Hikaru is ranked 5th for winning with the white pieces (77.4% of the time) and ranked 3rd with the black pieces (70.1%).

Fig.3 - Winning with white and black pieces

However Hikaru is really hard to beat. With the black pieces he is slightly ahead of Magnus (only losing 13.4% of the games with black, compared to Magnus 13.9%). Magnus only lost 6.3% of the games with white. A statistic that is far ahead of the competition.

Fig.4 - Losing with white and black pieces

5 Winning streaks

The table below shows all players with a winning streak of 11 and higher.

Table 5: Player with a winning streak of 11 or higher
name title fed winning_streak
Magnus Carlsen GM NOR 17
Hikaru Nakamura GM USA 15
Igor Miladinovic GM SRB 12
Benjamin Bok GM NLD 12
Hans Niemann GM USA 12
Jan-Krzysztof Duda GM POL 12
Raunak Sadhwani GM IND 12
Pavel Eljanov GM UKR 12
Andrey Esipenko GM RUS 11
Daniil Dubov GM RUS 11
Fabiano Caruana GM USA 11
Jose Eduardo Martinez Alcantara GM MEX 11
Parham Maghsoodloo GM IRN 11
David Paravyan GM RUS 11
Nihal Sarin GM IND 11
Pranav V GM IND 11
Tuan Minh Le GM VNM 11

Magnus won round 10 and 11 in the late tournament on June 27. Then he won all games in the late TT on July 4 and the first 4 games in the late TT on July 11 (2+11+4=17)

Hikaru won round 11 in the early tournament on August 22. Then he won all games in the late TT the same day and the first 3 rounds in the early TT on September 5 (1+11+3=15)

5.1 Winning streak distribution

The table above shows the longest winning streaks that were achieved by different players in 2023. How different is this maximum away from the average winning streaks Magnus and Hikaru manage to accomplish during their participations.

Show the code
hikaru_wins <- matches_df %>% filter(username == "Hikaru") %>% pull(result) == "win"
magnus_wins <- matches_df %>% filter(username == "MagnusCarlsen") %>% pull(result) == "win"

hikaru_streak_results <- winning_streak_distribution(hikaru_wins)
magnus_streak_results <- winning_streak_distribution(magnus_wins)

streak_results_df <- data.frame(name = c(rep(x = "Hikaru Nakamura", times = length(hikaru_streak_results)),
                                         rep(x = "Magnus Carlsen", times = length(magnus_streak_results))),
                                streak = c(hikaru_streak_results, magnus_streak_results))

streak_results_df %>% count(name, streak) %>% 
  ggplot(aes(x = streak, y = n, fill = name)) +
  geom_col(show.legend = FALSE) +
  scale_x_continuous(breaks = 1:17, limits = c(0, 18)) +
  facet_wrap(~name, ncol = 2) +
  theme_light()

The histograms that show the distribution of winning streaks is a bit misleading because it shows the highest relative frequency for the 1 value. The 1 is not a winning streak but the result of winning a game and then not winning the next game. For Hikaru this “pseudo-streak” represents 25% (38/152) of his streak results. Which means that 75% of the time his wins led to an actual streak of 2-15 games. The “1-streak” result happened 18 times for Magnus which is 23.7% (18/76) of his results. Only the 15 games streak for Hikaru and the 17 streak for Magnus include their perfect days where they won 11 out of 11 games in a single tournament.

Show the code
hikaru_wins <- winning_streak_df %>% filter(username == "Hikaru") %>% pull(win) 
magnus_wins <- winning_streak_df %>% filter(username == "MagnusCarlsen") %>% pull(win)

hikaru_streak_results <- winning_streak_distribution(hikaru_wins)
magnus_streak_results <- winning_streak_distribution(magnus_wins)

streak_results_df <- data.frame(name = c(rep(x = "Hikaru Nakamura", times = length(hikaru_streak_results)),
                                         rep(x = "Magnus Carlsen", times = length(magnus_streak_results))),
                                streak = c(hikaru_streak_results, magnus_streak_results))

streak_results_df %>% count(name, streak) %>% 
  ggplot(aes(x = streak, y = n, fill = name)) +
  geom_col(show.legend = FALSE) +
  scale_x_continuous(breaks = 1:17, limits = c(0, 18)) +
  facet_wrap(~name, ncol = 2) +
  theme_light()

The charts above are based on all games (including skipped games). Skippin a game would break a winning streak.

Below you see the streak distribution of all other GMs: How are 18, 22 and 28 streaks possible? Who did it… It was based on the matches_df (not winning_streak_df), which excludes U– “missing games”, which meant that one player that often skipped the first rounds managed to achieve 86% win percentage including these long streaks because his opposition was on average 600 rating points lower

Show the code
matches_df$res <- matches_df$result == "win"

temp_df <- matches_df %>% filter(title == "GM",
                                 username != "Hikaru",
                                 username != "MagnusCarlsen") %>% 
  select(username, hero_name, date_time, res) %>% 
  arrange(username)

usernames <- unique(temp_df$username)

results <- list()
#names(results) <- usernames
for(i in 1:length(usernames)) {
  results[[i]] <- temp_df %>% filter(username == usernames[i]) %>% pull(res) %>% 
    winning_streak_distribution()
}

as.data.frame(table(unlist(results)))
   Var1 Freq
1     1 7198
2     2 4873
3     3 3014
4     4 1759
5     5  883
6     6  416
7     7  210
8     8   94
9     9   42
10   10   21
11   11   12
12   12    7
13   13    2
14   14    1
15   18    1
16   22    1
17   28    1

When missed games don’t break a winning streak then the average winning streak by GMs is: 2.32

Show the code
streak_results_df1 <- data.frame(name = "Other GMs", streak = unlist(results))
xx <- bind_rows(streak_results_df, 
                streak_results_df1[sample(x = 1:nrow(streak_results_df1), size = 250, replace = FALSE), ])

xx %>% 
  ggplot(aes(x = streak, color = name, fill = name)) +
  geom_density(alpha = 0.05) +
  theme_light()

Repeat based on winning_streak_df that contains the skipped/missed matches, which would lead to a break of the winning streak.

Show the code
temp_df2 <- winning_streak_df %>% filter(title == "GM",
                                 username != "Hikaru",
                                 username != "MagnusCarlsen") %>% 
  select(username, name, result, win, file_name, round) %>% 
  arrange(username)

usernames <- unique(temp_df2$username)

results2 <- list()
#names(results) <- usernames
for(i in 1:length(usernames)) {
  results2[[i]] <- temp_df2 %>% filter(username == usernames[i]) %>% pull(win) %>% 
    winning_streak_distribution()
}

GM_streaks_result2 <- as.data.frame(table(unlist(results2)))
GM_streaks_result2
   Var1 Freq
1     1 7432
2     2 4972
3     3 3041
4     4 1753
5     5  870
6     6  409
7     7  200
8     8   88
9     9   33
10   10   18
11   11    9
12   12    6

To compare the two distributions we can turn them into density plots where you can see that they are quite similar to one another. Hikaru has a mean streak of (3.79) vs. Magnus having a mean streak of (3.77). The average mean streak of other GMs is: 2.32

If I randomly sample 250 winning streaks from other GMs and add them to the chart with the streak distribution of Hikaru and Magnus we see how much better they are in this area.

Show the code
streak_results_df2 <- data.frame(name = "Other GMs", streak = unlist(results2))
xx <- bind_rows(streak_results_df, 
                streak_results_df2[sample(x = 1:nrow(streak_results_df2), size = 250, replace = FALSE), ])

xx %>% 
  ggplot(aes(x = streak, color = name, fill = name)) +
  geom_density(alpha = 0.05) +
  theme_light()

6 Winning both tournaments (“Sweeping the day”)

In 2023 there were 6 players who accomplished to win both events on that day. Attempts refers to the times a player participated in the early and late tournament on the same day.

Table 6: Player who won both tournaments on the same day
date username name attempts
2023-02-07 GMWSO Wesley So 3
2023-02-14 Hikaru Hikaru Nakamura 34
2023-07-25 LyonBeast Maxime Vachier-Lagrave 6
2023-08-29 Firouzja2003 Alireza Firouzja 23
2023-10-17 Jospem Jose Eduardo Martinez Alcantara 38
2023-11-07 MagnusCarlsen Magnus Carlsen 9

Hikaru came close to a second sweep on 3 occasions.

  • July 11: winning the early tournament but placing “only” second on the late event behind Magnus Carlsen
  • October 3: again winning the early tournament but placing second behind Oleksandr Bortnyk on the late event.
  • December 19: winning the late event but placing second on the early one behind Magnus Carlsen.

Magnus came close on 2 more occasions.

  • August 1: winning the early event but placing second behind Alexander Grischuk.
  • November 21: winning the early event but placing second behind Liem Le on the late event.

7 Direct comparisons

In 2023 Hikaru Nakamura faced Magnus Carlsen 10 times: + twice with the black pieces (drawing both games) + and 8 times playing with white (2 draws, 3 wins, 3 losses)

Therefore this point is a draw with a slight advantage for Magnus, because he played black 8 out of 10 times.

In the 2nd segment of the chess speed championship, (3-minute games) Magnus won 5:4 games.

You can see the tournament commentary by chess.com on their YouTube channel.

7.1 Top match-ups for Hikaru

Fig.5 - Hikarus results against most common encounters

As you can see Hikarus best result is against Jose Alcantara (10 wins in 12 games). He also did not lose against Maksim Chigaev, Jeffery Xiong, Vugar Rasulov and Bogdan Daniel Deac. All players that he faced 7 or more times. But Hikaru could not beat Fabiano Caruana in any of the 9 encounters in 2023 Titled Tuesday Tournaments.

Other opponents that he faced 3 or more times and could not gain a point advantage on are:

Table 7: Opponents that had a positive score against Hikaru
opponent_name win draw lose
Anton Korobov 1 2
Dmitrij Kollars 1 4
Fabiano Caruana 4 5
Maxim Matlakov 2 3
Nihal Sarin 1 2 2
Shant Sargsyan 2 3

7.2 Top match-ups for Magnus

Fig.6 - Magnus’ results against most common encounters

The table below shows opponents that played against Magnus 3 or more times in 2023 and came out ahead.

Table 8: Opponents that had a positive score against Magnus Carlsen
opponent_name win draw lose
Fabiano Caruana 2 1 3
Maksim Chigaev 1 1 2
Maxime Vachier-Lagrave 1 2
Pranav V 1 2

In summary we can state that eventhough Hikaru and Magnus were the best Titled Tuesday players in 2023, Fabiano Caruana won half his games against Magnus and 5 out of 9 against Hikaru.

8 Distribution of players rating they faced (total and minus their own rating)

Hikaru played a total of 791 games in his 74 Titled Tuesday tournaments in 2023. He faced 394 different opponents. The figure below shows the rating of his opponents:

Fig.7 - Histogram of Hikarus’ opponents ratings

We can make a similar chart for Magnus who participated in 39 tournaments, played 399 games against 239 different opponents.

Fig.8 - Histogram of Magnus’ opponents ratings

We see a similar pattern for both players. There are a few opponents with a rating below 2500, which come from the early stages of the tournament were players are matched randomly.

As the score increases, which is usually the case for these super GMs, the players they face in later rounds also have high scores and high ratings.

We can compare the distribution of opponent ratings for both players with a density chart. It makes both players comparable regardless of the fact that Hikaru played twice as many tournaments. The area under the red and blue line adds up to 100% respectively. We can see that on average Magnus had to play higher rated players a bit more often. Because the blue line is shifted to the rigth. Hikarus average rating throughout 2023 was 3289 compared to Magnus’ 3268. * The average rating of Hikarus opponents were (mean: 2853 and median: 2890) * The average rating of Magnus’ opponents were (mean: 2871 and median: 2910)

A statistical test (t-test) does not find this difference to be significant

Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

Fig.9 - Density chart of rating differences

9 Linear model

Let’s see if a linear model can decide which player was better throughout 2023. We can try to predict the score (1-win, 0.5-draw, 0-loss) of each game based on the rating of the opponent, and the pieces (black/white).

The line of best fit is above 0.5 for both players even on the right side of the chart where opponents have really high ratings. We knew this because both players have ~75% winning chance overall. But the line for Magnus is above the line from Hikaru which means that a linear model adds some points for the former player.

Joining with `by = join_by(result, score)`
`geom_smooth()` using formula = 'y ~ x'

Fig.10 - Hikaru vs Magnus overall

If we look into the details based on the starting pieces we see that both players have higher lines with white pieces and that Magnus is still ahead of Hikaru, especially when playing with white.

`geom_smooth()` using formula = 'y ~ x'

Fig.11 - Hikaru vs Magnus with pieces color

In the chart below the overall effect of pieces is clearer. Against higher rated players, having white is a bigger advantage. (blue line for white is above red). But as the opponents get weaker, this advantage is less important. Now even having black generally leads to a win.

In statistics this is called an interaction. The advantage of having white is different depending on the opponents rating.

`geom_smooth()` using formula = 'y ~ x'

Fig.12 - Hikaru vs Magnus with pieces color

10 Lowest rated player to lose against

Table 9: Lowest rated players Hikaru lost against
Date/Time Opponent Username Opponent Name Opponent Rating Pieces Result
2023-08-15_early Nbk90 Bakhtiyar Nugumanov 2105 white lose
2023-08-15_early JulbeNn Julio Benedetti 2474 black lose
2023-06-06_late HajiyevKanan Hajiyev Kanan 2589 white lose
2023-02-14_late NateSolon Nate Solon 2643 white lose
2023-01-03_late Maikrosoft63 Felix Kuznetsov 2709 black lose
2023-01-03_early Mikhail_Bryakin Mikhail Bryakin 2735 black lose
2023-03-28_early farzadbfd Farzad Bolourchifard 2755 black lose
2023-12-19_late cassoulet Jonathan Dourérassou 2770 white lose
2023-03-07_late A-Fier Alex Fier 2771 white lose
2023-07-04_early Rodalquilar Leonardo Tristan 2779 black lose
Table 10: Lowest rated players Magnus lost against
Date/Time Opponent Username Opponent Name Opponent Rating Pieces Result
2023-03-21_early Liljon_chess Ulugbek Tillyaev 2653 white lose
2023-01-31_late Margency Mert Erdoğdu 2790 black lose
2023-03-21_early FormerProdigy David Navara 2861 black lose
2023-01-03_late DanielDardha2005 Daniel Dardha 2869 black lose
2023-06-27_late vugarrasulov Vugar Rasulov 2890 white lose
2023-01-03_late GM_dmitrij Dmitrij Kollars 2907 black lose
2023-03-21_late Sanan_Sjugirov Sanan Sjugirov 2939 black lose
2023-02-07_late jcibarra José Carlos Ibarra Jerez 2944 white lose
2023-01-03_early Fandorine Maksim Chigaev 2947 white lose
2023-02-07_late Fandorine Maksim Chigaev 2947 black lose

11 Summary table