Test T de Student par permutations pour R

Posté par Timothée le 9 May 2008 dans , , Pas de commentaires

Mes tribulations mathématiques m’ont récemment poussé dans le monde assez fabuleux des tests par permutation, et je viens de consacrer une grosse demi heure à écrire pour R le test T de Student par permutations, pour m’affranchir de l’homogénéité des variances et de la normalité des données.

Vu que c’est du code qui peut servir, je le donne ici… Et éventuellement, ça permettra aux R-Guru qui traînent (j’espère) de vérifier que je ne me sois pas planté…

TTperm <- function(sample1,sample2,fac1='a',fac2='b',nperm=999){
require(car)
stu<-t.test(sample1,sample2)
stu.p<-stu$p.value
stu.t<-stu$statistic
stu.df<-stu$parameter
count <- 1
result.stu <- matrix(rep(0,3),1)
colnames(result.stu)=c("T statistic (Df)","Parametric p-value", "Permutations p-value")
for(i in 1:nperm){
NAMES<-c(rep(fac1,length(sample1)),rep(fac2,length(sample2)))
SAMPLE<-c(sample1,sample2)
PERMNAMES<-sample(NAMES)
MATR<-c(SAMPLE,PERMNAMES)
MATR<-matrix(MATR,nrow=2,byrow=T)
RS1<-RS2<-''
rownames(MATR)<-c('Value','Sample')
for(rnk in 1:length(PERMNAMES)){
if(MATR['Sample',rnk]==fac1){
RS1<-c(RS1,as.real(MATR['Value',rnk]))
}
if(MATR['Sample',rnk]==fac2){
RS2<-c(RS2,as.real(MATR['Value',rnk]))
}
}
RS1<-RS1[2:length(RS1)]
RS2<-RS2[2:length(RS2)]
stu.perm<-t.test(as.real(RS1),as.real(RS2))
stu.perm.p<-stu.perm$p.value
stu.perm.t<-stu.perm$statistic
if(abs(stu.perm.t) >= abs(stu.t)) {count <- count+1}
}
result.stu[1,1]=paste(round(stu.t,4),'(',round(stu.df,4),')',collapse='')
result.stu[1,2]=round(stu.p,6)
result.stu[1,3]=count/(nperm+1)
return(result.stu)
}

Timothée is
| All posts by Timothée

Commenter


Sitemap