1 Données

Installer d’abord le package R lasso2. Charger la library lasso2 en effectuant library(lasso2) Puis utilisez la commande data(Prostate) pour importer les données dans votre environnement.

2 Affichez les 5 premiers individus de la base de données

#Bonnes pratique : effacer mon environnement avant de commencer

rm(list=ls())

# Tester si le package est installé et l'installer sinon

if (!("lasso2" %in% installed.packages())) {
  install.packages("lasso2")
}

#Charger la librairy
suppressPackageStartupMessages(library(lasso2))


#Charger les données
data(Prostate)

head(Prostate, 5)
##       lcavol  lweight age      lbph svi       lcp gleason pgg45       lpsa
## 1 -0.5798185 2.769459  50 -1.386294   0 -1.386294       6     0 -0.4307829
## 2 -0.9942523 3.319626  58 -1.386294   0 -1.386294       6     0 -0.1625189
## 3 -0.5108256 2.691243  74 -1.386294   0 -1.386294       7    20 -0.1625189
## 4 -1.2039728 3.282789  58 -1.386294   0 -1.386294       6     0 -0.1625189
## 5  0.7514161 3.432373  62 -1.386294   0 -1.386294       6     0  0.3715636

On peut changer l’apparence du tableau

library(knitr)
## Warning: package 'knitr' was built under R version 4.0.2
knitr::kable(head(Prostate, 5))
lcavol lweight age lbph svi lcp gleason pgg45 lpsa
-0.5798185 2.769459 50 -1.386294 0 -1.386294 6 0 -0.4307829
-0.9942523 3.319626 58 -1.386294 0 -1.386294 6 0 -0.1625189
-0.5108256 2.691243 74 -1.386294 0 -1.386294 7 20 -0.1625189
-1.2039728 3.282789 58 -1.386294 0 -1.386294 6 0 -0.1625189
0.7514161 3.432373 62 -1.386294 0 -1.386294 6 0 0.3715636

Pour avoir une description des données vous pouvez exécuter la commande ?Prostate ou help(Prostate).

3 Quelle est la dimension de nos données

dim(Prostate)
## [1] 97  9

4 Quelle est la structure des données

str(Prostate)
## 'data.frame':    97 obs. of  9 variables:
##  $ lcavol : num  -0.58 -0.994 -0.511 -1.204 0.751 ...
##  $ lweight: num  2.77 3.32 2.69 3.28 3.43 ...
##  $ age    : num  50 58 74 58 62 50 64 58 47 63 ...
##  $ lbph   : num  -1.39 -1.39 -1.39 -1.39 -1.39 ...
##  $ svi    : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ lcp    : num  -1.39 -1.39 -1.39 -1.39 -1.39 ...
##  $ gleason: num  6 6 7 6 6 6 6 6 6 6 ...
##  $ pgg45  : num  0 0 20 0 0 0 0 0 0 0 ...
##  $ lpsa   : num  -0.431 -0.163 -0.163 -0.163 0.372 ...

5 Faites une analyse descriptive des données

6 Testez le lien entre la variable lpsa et la variable age

6.1 Quel(s) test(s) peut on utiliser pour vérifier s’il y a un lien entre les variables lpsa et age ?

Comme les deux variables sont quantitatives nous pouvons appliquer un test paramétrique de correlation de Pearson ou un test non parametrique de Spearman en fonction de leurs conditions d’application.

6.2 Quel(s) sont vos hypothèses ?

H0 : Il n’y a pas de lien entre ces deux variables, i.e \(\rho = 0\).

H1 : Il n’y a pas de lien entre ces deux variables, i.e \(\rho \ne 0\).

6.3 Quelle(s) est(sont) la (les) condition(s) d’application du test à utiliser à priori

Le test à utiliser en première intention est le test de Pearson.

  • La relation entre ces deux variables doit être linéaire

  • La distribution conditionnelle de ces deux variables doit être normale

  • L’égalité des variances

  • L’indépendance des individus

6.4 Vérification des conditions d’application

6.4.1 Relation linéaire

Graphiquement on analysera le nuage de points entre ces deux variables.

with(Prostate,
     plot(age, lpsa,
          col = "blue",
          main = "Nuage de points entre log de la PSA et l'age"))

On assumera que la relation est linéaire.

6.4.2 Vérifions si la distribution conditionnelle de ces deux variables est normale

6.4.2.1 Application numérique

On peut utiliser le test de Kolmogorov-Smirnov ou le test de Shapiro-Wilk.

shapiro.test(Prostate$age)
## 
##  Shapiro-Wilk normality test
## 
## data:  Prostate$age
## W = 0.94679, p-value = 0.0006376
shapiro.test(Prostate$lpsa)
## 
##  Shapiro-Wilk normality test
## 
## data:  Prostate$lpsa
## W = 0.98443, p-value = 0.3087
# alternative
ks.test(Prostate$age, "pnorm", mean(Prostate$age), sd(Prostate$age), alternative = "gr")
## Warning in ks.test(Prostate$age, "pnorm", mean(Prostate$age),
## sd(Prostate$age), : ties should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  Prostate$age
## D^+ = 0.070978, p-value = 0.3763
## alternative hypothesis: the CDF of x lies above the null hypothesis
ks.test(Prostate$lpsa, "pnorm", mean(Prostate$lpsa), sd(Prostate$lpsa), alternative = "gr")
## Warning in ks.test(Prostate$lpsa, "pnorm", mean(Prostate$lpsa),
## sd(Prostate$lpsa), : ties should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  Prostate$lpsa
## D^+ = 0.065516, p-value = 0.4349
## alternative hypothesis: the CDF of x lies above the null hypothesis

6.4.2.2 Application graphique : Q-Q plot avec droite de Henri

par(mfrow = c(1, 2))
qqnorm(Prostate$age, 
       main = "Normal Q-Q Plot \nAge")
qqline(Prostate$age, col = "red")

grid()
#lpsa
qqnorm(Prostate$lpsa,
       main = "Normal Q-Q Plot \nlog(psa)")
qqline(Prostate$lpsa, col = "red")
grid()

par (mfrow = c(1, 1))

6.4.3 Vérifions l’hypothèse d’égalité des variances

On peut utiliser la fonction var.test pour tester l’hypothèse d’égalité des variances pour deux distributions qui suivent une loi normale à l’aide d’un F test.

Une alternative est d’utiliser le test de Bartlett qui est moins restrictif.

with(Prostate,
     var.test(age,lpsa))
## 
##  F test to compare two variances
## 
## data:  age and lpsa
## F = 41.599, num df = 96, denom df = 96, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  27.81615 62.21149
## sample estimates:
## ratio of variances 
##           41.59909
  • \(P<0.05\)
  • Le test est significatif
  • Rejet de H0 au risque \(\alpha\)
  • On rejette l’hypothèse d’égalité des variance

6.5 Quelle est votre conclusion quant à la correlation entre ces deux variables

On appliquera donc un test non paramétrique de correlation de Spearman unilatérale supérieure.

On sait d’après la litterature scientifique que lorsque l’âge augmente, les valeurs de PSA augmentent :

    * H0 : $\rho=0$, il n'y a pas de lien entre le $log(psa)$ et l'âge.

    * H1 : $\rho>0$ il n'y a pas de lien entre le $log(psa)$ et l'âge; lorsque l'âge augmente, les valeurs de psa augmentent.
with(Prostate,
      cor.test(age,lpsa, method = "spearman", 
               alternative = "greater"))
## Warning in cor.test.default(age, lpsa, method = "spearman", alternative =
## "greater"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  age and lpsa
## S = 119372, p-value = 0.01715
## alternative hypothesis: true rho is greater than 0
## sample estimates:
##       rho 
## 0.2151562

Conclusion

  • \(p<0.05\)

  • Le test est significatif

  • Nous rejettons l’hypothèse H0 au risque \(\alpha\).

  • Lorsque l’âge augmente d’une unité, le log des valeurs de PSA (prostatic specific antigen) augmentent linéairement de 0,21 pour les patients de notre étude.

 

A work by Juste Goungounga

goungoungajuste@gmail.fr