Le nombre X de pianos vendus chaque semaine par le grand magasin de musique “Sainte Cécile” observé durant les 200 dernières semaines se répartit de la façon suivante :

data <- data.frame( x = c(0, 1, 2, 3, 4, 5, 6), n = c(12, 42, 44, 50, 28, 16, 8))
print(data)
##   x  n
## 1 0 12
## 2 1 42
## 3 2 44
## 4 3 50
## 5 4 28
## 6 5 16
## 7 6  8



En lisant cet énoncé, nous pouvons déjà récupérer les informations et les données utiles à notre inférence statistique.


Informations

Population : Les 200 dernières semaines

Variables :



1 - Peut-on considérer au seuil 0.10 que le nombre de pianos vendus durant une semaine est régi par une loi de Poisson ?



Données

print(data)
##   x  n
## 1 0 12
## 2 1 42
## 3 2 44
## 4 3 50
## 5 4 28
## 6 5 16
## 7 6  8
a <- 0.10

Nous rajoutons le seuil alpha 0.10 à notre environnement de données, en assignant 0.10 à l’objet a.


Hypothèses

H0 <- "on peut considérer que le nombre de pianos vendus durant une semaine soit régi par une loi de Poisson."
H1 <- "on ne peut pas considérer que le nombre de pianos vendus durant une semaine soit régi par une loi de Poisson."

Pour tout tests d’adéquations entre une variable et une loi (Khi-deux d’adéquation), l’adéquation à la loi sera notifiée en H0. Cette règle vaut également pour les tests d’indépendances (ou d’absence de relation) entre deux variables (Khi-deux d’indépendance, corrélation monotone ou linéaire).


Test du khi-deux d’adéquation


Nous choisissons le test du khi-deux d’adéquation, car nous cherchons à vérifier si les valeurs d’une variable suivent une loi ou distribution statistique donnée.

Un test du khi-deux d’adéquation consiste à comparer un effectif observé et un effectif théorique. Dans notre exemple, il nous faut faire une estimation ponctuelle de lambda avant de pouvoir déterminer chaque probabilité d’apparition de nos effectifs théoriques, qui ces derniers devront être régis par la loi de poisson.


L’utilisation de la distribution de Poison nécessite une estimation ponctuelle de lambda.

x <- with(data, rep(x, n))
lambda <- mean(x)
print(lambda)
## [1] 2.6


Maintenant que nous avons lambda, nous pouvons déterminer la probabilité à laquelle chaque effectif théorique devrait apparaître.

p <- dpois(x, lambda = lambda)
p <- unique(p)

data <- cbind(data, p)


Bien entendu, le dernier x de notre data frame, devra avoir une probabilité qui prend en compte tout le quantile restant de la distribution de poisson.

last.x <- max(data[ , 'x' ])
last.p <- data[data['x'] == last.x, 'p']

remain.p <- ppois(q = last.x - 1, lambda = lambda, lower.tail = FALSE)

data[data['x'] == last.x, 'p'] <- remain.p

data <- data[ , c('n', 'p')]
print(data)
##    n          p
## 1 12 0.07427358
## 2 42 0.19311130
## 3 44 0.25104469
## 4 50 0.21757207
## 5 28 0.14142184
## 6 16 0.07353936
## 7  8 0.04903715


Avant de lancer notre test, nous devons nous assurer que tous nos Npi soit supérieurs à 5.

invalid_Np <- with(data, sum(n) * p)
print(invalid_Np)
## [1] 14.85472 38.62226 50.20894 43.51441 28.28437 14.70787  9.80743
invalid_Np <- invalid_Np > 5
invalid_Np <- sum(invalid_Np = FALSE)


Le test d’adéquation stochastique est possible grâce à la fonction chisq.test(), cette fonction prend comme arguments : La colonne des effectifs observés et la colonne contenant la probabilité d’apparition de chaque effectif théorique (p = p).

Étant donné que nous avons estimé un paramètre pour trouver la probabilité de nos effectifs théoriques, nous devrons recalculer la p.value trouvée par la fonction chisq.test(). Effectivement, chisq.test() calcule une p.value, qui cette dernière ne prend pas en compte le nombre de paramètres estimés.

if(invalid_Np == 0){
        
        result <- with(data, chisq.test(n, p = p)) # Avant correction
        
        x2obs <- result[['statistic']] # Après correction
        df <- result[['parameter']] - 1 # -1 degré de liberté car il y a eu 1 paramètre estimé.
        p.value <- pchisq(x2obs, df = 5, lower.tail = FALSE)
        
} else {
        cat("Au moins 1 Np n'est pas supérieur à 5")
}


Resultats


Avant correction de la p.value.

print(result)
## 
##  Chi-squared test for given probabilities
## 
## data:  n
## X-squared = 3.0279, df = 6, p-value = 0.8053


Après correction de la p.value.

print(p.value)
## X-squared 
## 0.6956794


if(p.value < a){
        answer <- paste('Il y a rejet de H0, car', p.value, 'est inférieur à', a, '. Donc,', H1)
} else {
        answer <- paste('Il y a non rejet de H0, car', p.value, 'est supérieur à', a, '. Donc,', H0)
}

Étant donné que la p.value est supérieure à notre seuil alpha, nous décidons de conserver H0.


Réponse : Il y a non rejet de H0, car 0.695679357249428 est supérieur à 0.1 . Donc, on peut considérer que le nombre de pianos vendus durant une semaine soit régi par une loi de Poisson.