2026-10-20

Goal

I want to see if a player’s shooting can predict their overall rating in EA FC 25.

  • Data is from the EA FC 25 player database on Kaggle
  • I removed goalkeepers
  • I used simple linear regression

1 Load the data

library(dplyr)
library(ggplot2)
library(plotly)

players <- read.csv("male_players.csv")
dim(players)
## [1] 16161    58

2 Clean the data

fc <- players %>%
  filter(Position != "GK") %>%
  select(Name, OVR, PAC, SHO, PAS) %>%
  na.omit()

nrow(fc)
## [1] 14345

3 Overall ratings

Most players are rated in the 60s and 70s.

4 The model

\[Y = \beta_0 + \beta_1 X + \varepsilon\]

  • Y is the overall rating
  • X is shooting
  • \(\beta_1\) is how much the rating goes up for each point of shooting

5 How the line is found

\[\hat\beta_1 = \frac{\sum (X_i - \bar X)(Y_i - \bar Y)}{\sum (X_i - \bar X)^2}\]

\[\hat\beta_0 = \bar Y - \hat\beta_1 \bar X\]

6 Fit the model

fit <- lm(OVR ~ SHO, data = fc)
coef(fit)
## (Intercept)         SHO 
##  54.3162874   0.2271451
summary(fit)$r.squared
## [1] 0.2267019

7 Code for the plot

ggplot(fc, aes(x = SHO, y = OVR)) +
  geom_point(alpha = 0.2) +
  geom_smooth(method = "lm", color = "red") +
  labs(x = "Shooting", y = "Overall rating")

8 Shooting vs overall rating

9 3D plot

10 Results

  • Each extra point of shooting adds about 0.23 to the overall rating
  • Shooting explains about 22.7% of the overall rating
  • Other stats matter too, like defending for defenders