Aujourd’hui, on va commencer la partie du cours sur les tests, avec une introduction par les tests non-paramétriques. On parlera (dans la continuité de ce qu’on a fait jusqu’à présent) de tests d’ajustement de lois, mais aussi de tests plus divers, comme des tests d’indépendance (entre observations successives).
Le test le plus classique est le test des signes. L’idée est de regarder puis de compter le nombre de fois où (différence positive) et le nombre de fois où (différence négative).
> (X=rnorm(20)) [1] 0.81352495 0.78076709 -0.58654359 0.52805014 -0.31101282 -0.65022034 -0.93619729 -0.16483729 -1.97396753 -0.22506985 1.14959851 -0.38895448 -0.09298421 > (S=c("N","P")[1+1*(diff(X)>0)]) [1] "N" "N" "P" "N" "N" "N" "P" "N" "P" "P" "N" "P" "P" "N" "P" "N" "P" "P" "N"
On verra ce test en cours. On peut par exemple compter le nombre de fois où la différence était positive,
> sim=function(a=0){ + n=100 + epsilon=X=rnorm(n) + for(t in 2:n) X[t]=a*X[t-1]+epsilon[t] + S=c("N","P")[1+1*(diff(X)>0)] + return(sum(S=="P"))}
(je fais ici une fonction un peu plus compliqué pour voir ce qui se passe si les données ne sont pas indépendantes, justement). Si on génère plein d’échantillons, on peut voir que le nombre de variations positives suit une loi normale, si les observations sont effectivement indépendantes,
> library(ggplot2) > set.seed(1) > vectS=unlist(lapply(rep(0,1000),sim)) > ggplot(data=data.frame(vectS = vectS), + aes(x = vectS)) + + geom_histogram(aes(y = ..density..), + binwidth = 1, fill = "light blue", + col = "black") + + stat_function(fun=function(x) dnorm(x, + (n-1)/2+.5,sqrt((n+1)/12)), + col = "red", size = 1) + ylab("Densite") + + ggtitle("Histogramme")
Ce qui est assez différent de ce qu’on observe avec une marche aléatoire,
> set.seed(1) > vectS=unlist(lapply(rep(1,1000),sim)) > ggplot(data=data.frame(vectS = vectS), + aes(x = vectS)) + + geom_histogram(aes(y = ..density..), + binwidth = 1, fill = "light blue", + col = "black") + + stat_function(fun=function(x) dnorm(x, + (n-1)/2+.5,sqrt((n+1)/12)), + col = "red", size = 1) + ylab("Densite") + + ggtitle("Histogramme")
Mais il existe des dizaines d’autres tests, toujours pour tester la même hypothèse (d’échantillon indépendant). Par exemple, ce test avait été utilisé dans les matchs de basketball, How common are “runs” in the NBA?.
L’idée est simple: on va regarder la longueur des séquences d’accroissements positifs, ou négatifs.
que l’on peut visualiser
> ggplot(data=data.frame(run = run), aes(x =run)) + + geom_histogram(aes(y = ..density..), + binwidth = 1, fill = "light blue")+ + ylab("Densite") + + ggtitle("Histogramme")
alors que dans le cas d’une marche aléatoire,
> a=1 > n=10000 > epsilon=X=rnorm(n) > for(t in 2:n) X[t]=a*X[t-1]+epsilon[t] > S=c(-1,+1)[1+1*(diff(X)>0)] > id=which(diff(S)!=0) > run=abs(diff(c(0,cumsum(S)[id]))) > table(run) run 1 2 3 4 5 6 7 8 9 10 11 12 13 2429 1240 638 330 149 83 29 20 13 5 4 2 1
On peut aussi
> sim=function(a=0){ + n=100 + epsilon=X=rnorm(n) + for(t in 2:n) X[t]=a*X[t-1]+epsilon[t] + S=c(-1,+1)[1+1*(diff(X)>0)] + id=which(diff(S)!=0) + run=diff(c(0,cumsum(S)[id])) + return(sum(run>0))} > set.seed(1) > vectR=unlist(lapply(rep(1,500),sim)) > ggplot(data=data.frame(vectR = vectR), aes(x = vectR)) + + geom_histogram(aes(y = ..density..), + binwidth = 1, fill = "light blue", + col = "black") + + geom_line(stat="density", col = "red", size = 1) + ylab("Densite") + + ggtitle("Histogramme")
On reviendra sur cette idée de tests non-paramétriques; et je parlerais aussi du devoir, qui visera à comprendre et expliquer un test particulier.
OpenEdition suggests that you cite this post as follows:
Arthur Charpentier (October 8, 2014). Introduction aux tests nonparamétriques. Freakonometrics. Retrieved January 24, 2025 from https://doi.org/10.58079/oux6