Prostate22 Avril 2021Installer 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.
#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).
dim(Prostate)## [1] 97 9
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 ...
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.
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\).
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
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.
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
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))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
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