Vous êtes sur la page 1sur 7

Bellotto Anthony

Latour Nathanaël
Le Mercier Aurore

Projet de statistique
Introduction :
Nous avons réalisé une étude statistique pour répondre à cette problématique : Peut-on
déterminer l’efficacité d’un joueur seulement à partir de ses statistiques ?
Pour ce faire nous avons étudier certaines variables sur un échantillon de 100 joueurs de NBA.
Ces variables sont la moyenne de point par match, de rebond par match ou encore de passe
décisive par match. Nous avons réalisé l’étude sur trois saisons différentes : 2018-2019, 2019-
2020 et 2020-2021 afin de nous assurer de la fiabilité de notre étude. Vous trouverez en
dessous le code R attribué a notre étude de l’année 18-19. Il s’agit du même code pour les
autres années.
Code R:
# Installation des librairies

install.packages("car")

# Importation de la base de donnee (Format exel)

library(readxl)

#Donnees_20_21 <- read_excel("chemin")

#------------------------------------------------ Partie 1 : PPM/RPM/PDPM ------------------------------------------------

#Nous cherchons a voir s'il y a des liens entre les differentes variables : Points par match (PPM), Rebonds par
Match (RPM) et Passe decisives par Match (PDPM)

#--------------------------------------------------- Test d'independance ----------------------------------------------------

# Le principe est de voir la dependance entre nos variables

# H0 : Les variable sont independantes

# H1 : Les variable sont dependantes

# Test d'independance: (Si pv < 5% il y a dependence)

#----------------------------------------- Test d'independance entre PPM et RPM---------------------------------------

X <- Stat_2018_et_2019$PPM

X2 <- Stat_2018_et_2019$RPM

ks.test(X, X2)

# On obtient pv < 2.2e-16 < alpha 5%

# On rejette alors H0 au risque alpha 5%

# Donc les variables sont dependantes

# Pour visualiser la dependance


Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

plot(ecdf(X), xlim = range(c(X, X2)), col = "blue")

plot(ecdf(X2), add = TRUE, lty = "dashed", col = "red")

#---------------------------------------------Test d'independance entre PPM et PDPM-------------------------------

X <- Stat_2018_et_2019$PPM

X2 <- Stat_2018_et_2019$PDPM

ks.test(X, X2)

# On obtient pv < 2.2e-16 < alpha 5%

# On rejette alors H0 au risque alpha 5%

# Donc les variables sont dependantes

# Pour visualiser la dependance

plot(ecdf(X), xlim = range(c(X, X2)), col = "blue")

plot(ecdf(X2), add = TRUE, lty = "dashed", col = "red")

#-------------------------------------------- Test d'independance entre RPM et PDPM----------------------------------

X <- Stat_2018_et_2019$RPM

X2 <- Stat_2018_et_2019$PDPM

ks.test(X, X2)

# On obtient pv =1.972e-10 < alpha 5%

# On rejette alors H0 au risque alpha 5%

# Donc les variables sont dependantes

# Pour visualiser la dependance

plot(ecdf(X), xlim = range(c(X, X2)), col = "blue")

plot(ecdf(X2), add = TRUE, lty = "dashed", col = "red")

#------------------------------------------------------- Regression lineaire ----------------------------------------------------

# Chargement de la librairie

library(car)

#Le but est de determiner si entre nos variables nous avons une distrbution lineaire et si c'est le cas quels sont les
coefficients.

#-------------------------------------------Regression lineaire entre PPM~RPM-------------------------------------------

Regression1 <- lm(PPM~RPM, data=Stat_2018_et_2019)

scatterplot(PPM~RPM, data=Stat_2018_et_2019, main="Regression entre PPM~RPM")

summary(Regression1)

#On peut voir que r-squared est tres faible, egal e 0.074 ce qui signifie que la regression lineaire n'est pas le bon
choix pour notre modele.
Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

#Le r-squared est tres faible, cela signifie que l'equation de la droite de regression determine 7.4% de la
distribution des points.

#Cela signifie que le modele mathematique utilise n'explique pas la distribution des points.

#-------------------------------------------Regression lineaire entre PPM~PDPM-----------------------------------------

Regression2 <- lm(PPM~PDPM, data=Stat_2018_et_2019)

scatterplot(PPM~PDPM, data=Stat_2018_et_2019, main="Regression entre PPM~PDPM")

summary(Regression2)

#On peut voir que r-squared est de 0.33 ce qui signifie que la regression lineaire n'est pas le bon choix pour notre
modele.

#Cela signifie que l'equation de la droite de regression determine 33.06% de la distribution des points.

#Donc le modele mathematique utilise n'explique pas la distribution des points.

#-----------------------------------------------Regression lineaire entre RPM~PDPM-------------------------------------

Regression3 <- lm(RPM~PDPM, data=Stat_2018_et_2019)

scatterplot(RPM~PDPM, data=Stat_2018_et_2019, main="Regression entre RPM~PDPM")

summary(Regression3)

#On peut voir que r-squared est tres faible, egal e 0.045 ce qui signifie que la regression lineaire n'est pas le bon
choix pour notre modele.

#Le r-squared est tres faible, cela signifie que l'equation de la droite de regression determine 4.5% de la
distribution des points.

#Cela signifie que le modele mathematique utilise n'explique absolument pas la distribution des points.

#------------------------------------------------------ Regression logistique -------------------------------------------------

#Les conditions pour appliquer la regression logistique :

# Avoir dix fois plus d'evenements que de parametres dans le monde : On a deux Parametres => Il nous faut au
minimum

#20 evenemenents en sachant qu'on en a 100. Cette condition est respectee.

#On a une surdispersion puisque le ration de la deviance residuelle sur le nombre de degres de libertes est
superieur a 1

#On a 215.69/98 = 2.20. Puisque nous avons des sudispersions, nous allons utiliser la loi quasipoisson.

#Neanmoins l'utilisation de la structure d'erreur "Quasi Poisson a pour concequence d'augmenter l'erreur
standard des parametres"

#-------------------------------------------- Regression logistique entre PPM~RPM -------------------------------------

Regressionlogistique <- glm(PPM~RPM, family = quasipoisson(link = "log"), Stat_2018_et_2019)

scatterplot(PPM~RPM, data=Stat_2018_et_2019, main="Regression entre PPM~RPM")

summary(Regressionlogistique)
Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

#Le coefficients 0.045 associe e RPM signifie qu'une augmentation d'une unite de RPM de chaque joueur, est
associee avec une augmentation de 0.045 du PPM.

#Ainsi on peut predire le nombre de points en fonction du nombre de rebonds. Neanmoins, il y a une marge
d'erreur a prendre en compte.

#Visualisation d'une prediction suivant notre regression logistique :

xmin <- min(Stat_2018_et_2019$RPM)

xmax <- max(Stat_2018_et_2019$RPM)

predicted <- data.frame(RPM=seq(xmin, xmax, length.out=10000))

predicted$PPM <-predict.glm(Regressionlogistique,newdata= predicted, type="response")

head(predicted)

library(ggplot2)

ggplot(Stat_2018_et_2019, aes(x=PPM, y=RPM)) + geom_point()+

geom_line(data=predicted, size=1) # permet d'ajouter le modele

#Ainsi on voit qu'avec le nombre de rebond, on peut prevoir le nombre de point mis par le joueur grace a la courbe.

#----------------------------------------- Regression logistique entre PPM~PDPM --------------------------------------

Regressionlogique2 <- glm(PPM~PDPM, family = quasipoisson(link = "log"), data=Stat_2018_et_2019)

scatterplot(PPM~PDPM, data=Stat_2018_et_2019, main="Regression entre PPM~PDPM")

summary(Regressionlogique2)

#Le coefficients 0.1 associe e PDPM signifie qu'une augmentation d'une unite de PDPM de chaque joueur, est
associee avec une augmentation de 0.1 du PPM.

#Ainsi on peut predire le nombre de points en fonction du nombre de rebonds. Neanmoins, il y a une marge
d'erreur a prendre en compte.

#Visualisation d'une prediction suivant notre regression logistique :

xmin <- min(Stat_2018_et_2019$PDPM)

xmax <- max(Stat_2018_et_2019$PDPM)

predicted <- data.frame(PDPM=seq(xmin, xmax, length.out=10000))

predicted$PPM <-predict.glm(Regressionlogique2,newdata= predicted, type="response")

head(predicted)

library(ggplot2)

ggplot(Stat_2018_et_2019, aes(x=PPM, y=PDPM)) + geom_point()+

geom_line(data=predicted, size=1) # permet d'ajouter le modele

#Ainsi on voit qu'avec le nombre de passe decisive, on peut prevoir le nombre de point mis par le joueur grace a
la courbe.

#---------------------------------------- Regression logistique entre RPM~PDPM ---------------------------------------


Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

Regressionlogique3 <- glm(RPM~PDPM, family = quasipoisson(link = "log"), data=Stat_2018_et_2019)

scatterplot(RPM~PDPM, data=Stat_2018_et_2019, main="Regression entre PPM~PDPM")

summary(Regressionlogique2)

#Le coefficients 0.1 associe e RPM signifie qu'une augmentation d'une unite de RPM de chaque joueur, est
associee avec une augmentation de 0.1 du PDPM.

#Ainsi on peut predire le nombre de points en fonction du nombre de rebonds. Neanmoins, il y a une marge
d'erreur a prendre en compte.

#Visualisation d'une prediction suivant notre regression logistique :

xmin <- min(Stat_2018_et_2019$PDPM)

xmax <- max(Stat_2018_et_2019$PDPM)

predicted <- data.frame(PDPM=seq(xmin, xmax, length.out=10000))

predicted$RPM <-predict.glm(Regressionlogique3,newdata= predicted, type="response")

head(predicted)

library(ggplot2)

ggplot(Stat_2018_et_2019, aes(x=RPM, y=PDPM)) + geom_point()+

geom_line(data=predicted, size=1) # permet d'ajouter le modele

#Ainsi on voit qu'avec le nombre de passe decisive, on peut prevoir le nombre de rebond mis par le joueur grace
a la courbe.

#----------------------------------------------------- Partie 2 : Efficacite ------------------------------------------------------

#----------------------------------------- Test d'independance entre EFF et MPM ---------------------------------------

#Nous comparons l'efficacite et les minutes par match jouees. On cherche a savoir s'ils sont independant.

# H0 : Les variable sont independantes

# H1 : Les variable sont dependantes

# Test d'independance: (Si pv < 5% il y a dependence)

X <- Stat_2018_et_2019$EFF

X2 <- Stat_2018_et_2019$MPM

ks.test(X, X2)

# On obtient pv < 2.2e-16 < alpha 5%

# On rejette alors H0 au risque alpha 5%

# Donc les variables sont dependantes

# Pour visualiser la dependance

plot(ecdf(X), xlim = range(c(X, X2)), col = "blue")

plot(ecdf(X2), add = TRUE, lty = "dashed", col = "red")


Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

#----------------------------------------------- Regression lineaire entre MPM~EFF--------------------------------------

Regression4 <- lm(EFF~MPM, data=Stat_2018_et_2019)

scatterplot(EFF~MPM, data=Stat_2018_et_2019, main="Regression entre MPM~EFF")

summary(Regression4)

#On peut voir que r-squared est de 0.38 ce qui signifie que la regression lineaire n'est pas le bon choix pour notre
modele.

##Cela signifie que l'equation de la droite de regression determine 38% de la distribution des points.

#Donc le modele mathematique utilise n'explique pas vraiment la distribution des points.

#---------------------------- Calcul de l'efficacite theorique sans les coefficients trouves avant ------------------

#On essaye de calculer une efficacite en partant de l'hypothèse que tous les parametres se valent pour calculer
l'efficacite

EFFth2= Stat_2018_et_2019$PPM + Stat_2018_et_2019$RPM + Stat_2018_et_2019$PDPM

scatterplot(EFF ~ EFFth2, data=Stat_2018_et_2019, main="Regression entre EFF~EFFth2")

#---------------------------------- Regression lineaire entre EFF ~ PPM + RPM + PDPM ------------------------------

#On vient alors verifier notre hypothese de distrubution en effectuant une regression lineaire a variables multiples.

model <- lm(EFF ~ PPM + RPM + PDPM, data=Stat_2018_et_2019)

model

summary(model)

summary(model)$coefficient

confint(model)

#On peut voir que r-squared est de 0.87 ce qui signifie que la regression lineaire est le bon choix pour notre
modele.

##Cela signifie que l'equation de la droite de regression determine 87.97% de la distribution des points.

#Donc le modele mathematique utilise explique la distribution des points.

#Par consequent on deduit cette equation : EFFth= 0.15442 + 0.48981*PPM + 1.07985*RPM + 0.78953*PDPM

#--------------------------Calcul de l'efficacite theorique avec les coefficients trouves avant --------------------

EFFth= 0.15442 + 0.48981*Stat_2018_et_2019$PPM + 1.07985*Stat_2018_et_2019$RPM +


0.78953*Stat_2018_et_2019$PDPM

scatterplot(EFF ~ EFFth, data=Stat_2018_et_2019, main="Regression entre EFF ~ EFFth")

#On remarque donc que les rebonds represente la statistique qui compte le plus suivie par le nombre de point et
enfin les passes decisives.
Bellotto Anthony
Latour Nathanaël
Le Mercier Aurore

#---------------------------------------------------------------------- Prediction du MVP --------------------------------------------------

#On prends une nouvelle base de donnees avec les MVP des 67 annees precedentes. Dans cette base de donnees,
on retrouve les PPM, PDPM et les RPM.

#On calcule leur efficacite grace a l'equation qu'on a trouve juste avant.

#On essaie de predire le MVP de l'annee prochaine.

shapiro.test(MVP$EFF)

library(Hmisc)

Annee2=seq(1956,2022,1)

resultat=approxExtrap(MVP$Annee, MVP$EFF, xout = Annee2, method="const", ties="ordered")$y

basePQFinale=data.frame(Annee2,resultat)

basePQFinale

#Par cette extrapolation, on prédit que pour la saison 20-21, le MVP aurait 31.11 d'efficacite.

Vous aimerez peut-être aussi