Exo 3
library(survival)
head(kidney)
## id time status age sex disease frail
## 1 1 8 1 28 1 Other 2.3
## 2 1 16 1 28 1 Other 2.3
## 3 2 23 1 48 2 GN 1.9
## 4 2 13 0 48 2 GN 1.9
## 5 3 22 1 32 1 Other 1.2
## 6 3 28 1 32 1 Other 1.2
dim(kidney)
## [1] 76 7
? kidney
attach(kidney)
#(1) Nombre et prop. de données censurées sur l'échantillon total
sum(1-status)
## [1] 18
sum(1-status)/76
## [1] 0.2368421
#0.2368421
#Nombre et prop. de données censurées par groupe
sum((1-status)[sex==1])
## [1] 2
sum((1-status)[sex==1])/(sum(sex==1))
## [1] 0.1
#0.1
sum((1-status)[sex==2])
## [1] 16
sum((1-status)[sex==2])/(sum(sex==2))
## [1] 0.2857143
#0.2857143
#(1bis) Stat univariées
table(sex)
## sex
## 1 2
## 20 56
boxplot(age)

summary(age)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.0 34.0 45.5 43.7 54.0 69.0
table(disease)
## disease
## Other GN AN PKD
## 26 18 24 8
#(2) Comparaison de l'âge par sexe
boxplot(age~sex,data=kidney)
title(main="Boite a moustache de l'age en fonction du sexe")

#ageH : age des hommes
#ageF : age des femmes
ageH=kidney$age[sex==1]
ageF=kidney$age[sex==2]
#(3) Age/variance moyen des hommes et femmes
mean(ageH)
## [1] 43.5
#43.5
mean(ageF)
## [1] 43.76786
#43.76786
var(ageH)
## [1] 237.8421
sd(ageH)
## [1] 15.42213
#15.42213
var(ageF)
## [1] 214.1088
sd(ageF)
## [1] 14.63246
#14.63246
summary(ageH)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.0 32.0 49.0 43.5 53.0 60.0
summary(ageF)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.00 34.75 44.00 43.77 54.25 69.00
#(4) Comparaison moyenne âge H/F
length(ageH)
## [1] 20
#20
length(ageF)
## [1] 56
#56
shapiro.test(ageH)
##
## Shapiro-Wilk normality test
##
## data: ageH
## W = 0.86996, p-value = 0.01173
#p-value = 0.01173
shapiro.test(ageF)
##
## Shapiro-Wilk normality test
##
## data: ageF
## W = 0.94174, p-value = 0.009228
#p-value = 0.009228
#normalité des âges n'est pas vérifié. Le t-test effectué est alors asymptotique. Attention car seulement 20 individus pour les hommes!!
#Attention test de Fisher (var.test(ageH,ageF)) non valide car variables non gaussiennes...!
bartlett.test(age~sex)#test des variances moins sensible à la gaussianité des variables.
##
## Bartlett test of homogeneity of variances
##
## data: age by sex
## Bartlett's K-squared = 0.077859, df = 1, p-value = 0.7802
#p-value = 0.7802. Variances semblent égales
t.test(ageH,ageF,paired=FALSE)
##
## Welch Two Sample t-test
##
## data: ageH and ageF
## t = -0.067568, df = 32.037, p-value = 0.9465
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -8.342454 7.806740
## sample estimates:
## mean of x mean of y
## 43.50000 43.76786
#p-value = 0.9465
#Espérances semblent égales.
###Tests non-paramétriques (plus approprié ici)###
ks.test(ageH,ageF)
## Warning in ks.test(ageH, ageF): cannot compute exact p-value with ties
##
## Two-sample Kolmogorov-Smirnov test
##
## data: ageH and ageF
## D = 0.13571, p-value = 0.9489
## alternative hypothesis: two-sided
#p-value = 0.949 pb d'ex-aequo, la p-valeur n'est pas "exacte"
wilcox.test(ageH,ageF)
##
## Wilcoxon rank sum test with continuity correction
##
## data: ageH and ageF
## W = 563.5, p-value = 0.9717
## alternative hypothesis: true location shift is not equal to 0
#p-value = 0.9717
#Dans tous les cas on ne rejette pas (H0), égalité des âges H/F !
#(5) Représentation graphique de disease/sexe
par(mfrow=c(2,1))
barplot(prop.table(table(disease[sex==1])),main="Proportions des types de maladies parmi les hommes")
barplot(prop.table(table(disease[sex==2])),main="Proportions des types de maladies parmi les femmes")

#On veut faire un test du chi-deux pour comparer disease/sexe
#Tableau effectif
table(disease,sex)
## sex
## disease 1 2
## Other 6 20
## GN 6 12
## AN 4 20
## PKD 4 4
#Vérification eff. théoriques suffisament grands
(4+4)*(6+6+4+4)/sum(table(disease,sex))
## [1] 2.105263
#=2.105263<<5 !!! Les effectifs PKD sont trop petits !
(6+12)*(6+6+4+4)/sum(table(disease,sex))
## [1] 4.736842
#=4.736842<5 ! Les effectifs GN sont trop petits !
#On regroupe les PKD et GN d'eff. trop petits avec Other
tab=matrix(c(16,4,36,20),ncol=2)
rownames(tab)=c("Other","AN")
colnames(tab)=c("H","F")
chisq.test(tab)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab
## X-squared = 1.0355, df = 1, p-value = 0.3089
#p-value = 0.3089 à priori on ne rejette pas l'hypothèse d'indépendance mais il faut être prudent quand même, le test est moyennement puissant car effectif total=76
#Représentation graphique de disease/sexe avec nouvelles classes
par(mfrow=c(1,1))
barplot(t(prop.table(tab,margin=2)),beside=TRUE)

#Chez les hommes, 80% d'other, 20%d'AN, chez les femmes 64.3% d'Other, 35.7% d'AN
#Test Fisher exact (pour éviter de regrouper des classes entres elles)
fisher.test(table(disease,sex))
##
## Fisher's Exact Test for Count Data
##
## data: table(disease, sex)
## p-value = 0.2628
## alternative hypothesis: two.sided
#p-value=0.262 on ne rejette toujours l'hypothèse d'indépendance !
#(6) Représentation graphique de age/disease
boxplot(age~disease)

bartlett.test(age~disease)
##
## Bartlett test of homogeneity of variances
##
## data: age by disease
## Bartlett's K-squared = 7.962, df = 3, p-value = 0.0468
#p-value = 0.0468 variances inégales à priori mais attention effectifs très petits...
Anov=aov(age~disease)
#disease Residuals
#Sum of Squares 6151.874 10144.166
#Deg. of Freedom 3 72
summary(Anov)
## Df Sum Sq Mean Sq F value Pr(>F)
## disease 3 6152 2050.6 14.55 1.67e-07 ***
## Residuals 72 10144 140.9
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Df Sum Sq Mean Sq F value Pr(>F)
#disease 3 6151.9 2050.62 14.555 1.666e-07 ***
#Residuals 72 10144.2 140.89
#p-valeur très très petite, au moins un groupe très différent des autres
#Test comparaison deux à deux
? pairwise.t.test
pairwise.t.test(age,disease,p.adjust.method="bonferroni")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: age and disease
##
## Other GN AN
## GN 0.00052 - -
## AN 8.7e-07 1.00000 -
## PKD 8.9e-05 0.96273 1.00000
##
## P value adjustment method: bonferroni
#Avec correction de Bonferroni car multi-test ici
# Other GN AN
# GN 0.00052 - -
# AN 8.7e-07 1.00000 -
# PKD 8.9e-05 0.96273 1.00000
#Avec correction de Holm, même conclusion
pairwise.t.test(age,disease)
##
## Pairwise comparisons using t tests with pooled SD
##
## data: age and disease
##
## Other GN AN
## GN 0.00035 - -
## AN 8.7e-07 0.48137 -
## PKD 7.4e-05 0.48137 0.57796
##
## P value adjustment method: holm
# Other GN AN
# GN 0.00035 - -
# AN 8.7e-07 0.48137 -
# PKD 7.4e-05 0.48137 0.57796
#P value adjustment method: holm
#Si on regroupe PKD et GN dans Other
ageOther=c(age[disease=="Other"],age[disease=="PKD"],age[disease=="GN"])
ageAN=age[disease=="AN"]
boxplot(ageOther,ageAN)

#Tests comparaison age/disease
shapiro.test(ageAN)
##
## Shapiro-Wilk normality test
##
## data: ageAN
## W = 0.94645, p-value = 0.2266
shapiro.test(ageOther)
##
## Shapiro-Wilk normality test
##
## data: ageOther
## W = 0.90574, p-value = 0.0005787
#normalité des âges n'est pas vérifié. Le t-test effectué est alors asymptotique. Attention car seulement 24 individus pour les AN!!
sd(ageAN)
## [1] 9.906812
sd(ageOther)
## [1] 15.39146
#On teste l'égalité des variances
bartlett.test(c(ageAN,ageOther)~c(rep(1,length(ageAN)),rep(0,length(ageOther))))
##
## Bartlett test of homogeneity of variances
##
## data: c(ageAN, ageOther) by c(rep(1, length(ageAN)), rep(0, length(ageOther)))
## Bartlett's K-squared = 5.3094, df = 1, p-value = 0.02121
#p-value = 0.02121 on rejette l'hypothèse d'ég. des variances avec un risque de 2.12% de chances de se tromper.
mean(ageAN)
## [1] 51.16667
mean(ageOther)
## [1] 40.25
t.test(ageAN,ageOther)
##
## Welch Two Sample t-test
##
## data: ageAN and ageOther
## t = 3.7128, df = 65.904, p-value = 0.0004238
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 5.046103 16.787230
## sample estimates:
## mean of x mean of y
## 51.16667 40.25000
#p-value = 0.0004238 Test très significatif, on rejette (H0) : l'âge moyen des patients AN est différent de celui de l'âge moyen des autres patients.
#Test non-paramétrique
ks.test(ageAN,ageOther)
## Warning in ks.test(ageAN, ageOther): cannot compute exact p-value with ties
##
## Two-sample Kolmogorov-Smirnov test
##
## data: ageAN and ageOther
## D = 0.38462, p-value = 0.01553
## alternative hypothesis: two-sided
#p-value = 0.01553 Test également significatif, on rejette l'hypothèse d'galité des lois entre ageAN et ageOther avec un risque de 1.553% de chances de se tromper
wilcox.test(ageAN,ageOther)
##
## Wilcoxon rank sum test with continuity correction
##
## data: ageAN and ageOther
## W = 853, p-value = 0.01057
## alternative hypothesis: true location shift is not equal to 0
#p-value = 0.01057 Idem !