La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Chapitre 6 Probabilités et Statistiques

Présentations similaires


Présentation au sujet: "Chapitre 6 Probabilités et Statistiques"— Transcription de la présentation:

1 Chapitre 6 Probabilités et Statistiques
Programmation en Python

2 Probabilités

3 Introduction # R possède de très nombreuses fonctionnalités dans le domaine des probabilités et statistiques. # Nous allons en présenter quelques unes.

4 Probabilités # R possède un nom pour chaque loi de probabilité. # Par exemple, le nom pour la loi normale est norm. # # On a les lois de probabilités discrètes suivantes: # Lois discrètes Noms en R # Binomiale binom # Géometrique geom # Hypergéometrique hyper # Négative binomiale nbinom # Poisson pois

5 Probabilités # On a les lois de probabilités continues suivantes: # # Lois continues Noms en R # Béta beta # Cauchy cauchy # Chi-carrée chisq # Exponentielle exp # F f

6 Probabilités # Gamma gamma # Log-normale lnorm # Logistique logis # Normale norm # Student t # Uniforme unif # Weibull weibull # Wilcoxon wilcox

7 Probabilités # Pour chacune de ces lois, taper ?nom_loi pour plus d'infos sur les paramètres requis. # Pour chacune de ces lois, on a quatre fonctions qui commencent par d, p, q et r suivies du nom de la loi. # Par exemple, pour la loi normale: # dnorm, pnorm, qnorm, rnorm # # dnom_loi: fonction de densité (ou fct de masse) P(X = x) # pnom_loi: fonction de distribution P(X <= x) # qnom_loi: fonction des quantiles # rnom_loi: génération de nombres aléatoires # suivant la loi en question

8 Fonctions de densités # Fonction de densité (ou fct de masse ou de probabilité): # On utilise la fonction dnom_loi. # Elle représente P(X = x).

9 Fonctions de densités # Cas discret... # loi binomiale par exemple # prob d'obtenir 7 succès sur 10 tirages avec prob de succès 0.4 dbinom(7, size=10, prob=0.4) [1] plot(0:10, dbinom(0:10, size=10, prob=0.4), type = "p", main = "Binomial Density Function")

10 Fonctions de densités

11 Fonctions de densités # Cas continu... # loi normale par exemple plot(dnorm, -4, 4, main = "Normal Density Function") # avec d'autres paramètres plot(dnorm(mean=70, sd=3), 40, 100) Error in dnorm(mean = 70, sd = 3) : argument "x" is missing, with no default # il faut redéfinir une fonction... ma_densite <- function(x){dnorm(x, mean=70, sd=3)} # puis l'imprimer plot(ma_densite, 55, 85)

12 Fonctions de densités

13 Fonctions de densités

14 Fonctions de distributions
# Fonction de distribution: # On utilise la fonction pnom_loi. # C'est l'intégrale de la fonction de densité. # Elle représente P(X <= x).

15 Fonctions de distributions
# Cas discret... # loi binomiale par exemple # prob d'obtenir au moins 7 succès sur 10 tirages avec prob de succès 0.4 pbinom(7, size=10, prob=0.4) [1] plot(0:10, pbinom(0:10, size=10, prob=0.4), type = "p", main = "Cumulative Binomial Distribution")

16 Fonctions de distributions

17 Fonctions de distributions
# Cas continu... # loi normale par exemple # P(N <= 66) où N v.a. de loi normale, moyenne 70, sd 3 pnorm(66, mean=70, sd=3) [1] plot(pnorm, -4, 4, main = "Cumulative Normal Distribution") # avec d'autres paramètres plot(pnorm(mean=70, sd=3), 40, 100) Error in pnorm(mean = 70, sd = 3) : argument "q" is missing, with no default # il faut redéfinir une fonction... ma_distribution <- function(x){pnorm(x, mean=70, sd=3)} # puis l'imprimer plot(ma_distribution, 40, 100)

18 Fonctions de distributions

19 Fonctions de distributions

20 Fonctions de quantiles
# Fonction de quantiles: # On utilise la fonction qnom_loi. # Cette fonction convertit une probabilité en son quantile correspondant # Par exemple, pour une variable normale de moyenne 25, le quantile correspondant à une probabilité de 0.5 sera précisément 25. qnorm(0.5, mean=25, sd=3) [1] 25

21 Fonctions de quantiles
# Cas discret... # loi binomiale par exemple # Intervalle de confiance de de 95% (alpha = 0.05) d'une variable binomiale de 100 tirages avec prob de succès 0.4. # Les bornes de l'intervalles sont alpha/2 et 1-(alpha/2) qbinom(c(0.05/2, 1-(0.05/2)), size=100, prob=0.4) [1] 31 50

22 Fonctions de quantiles
# Cas continu... # loi normale par exemple # Intervalle de confiance de de 95% (alpha = 0.05) d'une variable normale de moyenne 25 et sd 3. # Les bornes de l'intervalles sont alpha/2 et 1-(alpha/2) qnorm(c(0.05/2, 1-(0.05/2)), mean=25, sd=3) [1]

23 Génération de nombres aléatoires
# Génération de nombres aléatoires: # On utilise la fonction rnom_loi. # Cette fonction génère des nombres aléatoires tirés selon la loi de probabilité en question

24 Génération de nombres aléatoires
# Cas discrets... rbinom(3, size=10, prob=0.5) # 3 tirages [1] rpois(3, lambda=10) # 3 tirages [1]

25 Génération de nombres aléatoires
# Cas continus... runif(3, min=-3, max=3) # 3 tirages [1] rexp(3, rate=0.1) # 3 tirages [1] rgamma(3, shape=2, rate=0.1) # 3 tirages [1] # loi normale: 10'0000 tirages echantillon <- rnorm(100000, mean=88, sd=13) mean(echantillon) # moyenne [1] sd(echantillon) # déviation standard [1]

26 La fonction sample # La fonction sample génère des tirages aléatoires d'un vecteur donné. annees <- 1900:2000 # les années 1900 à 2000 sample(annees, 3) # on tire 3 années aléatoirement [1]

27 La fonction sample # Pile ou face... pile_face <- c("Pile", "Face") # on génère 10'000 tirages avec remplacement tirages <- sample(pile_face, , replace = TRUE) sum(tirages == "Pile") # nombre de "Pile" [1] sum(tirages == "Face") # nombre de "Face" [1] # On biaise la pièce (ajout d'un vecteur de proba) tirages2 <- sample(pile_face, , replace = TRUE, prob = c(0.3, 0.7)) sum(tirages2 == "Pile") [1] sum(tirages2 == "Face") [1] 69922

28 Statistiques

29 Mesures statistiques de base
# Mesures statistiques de base. # La fonction summary calcule les mesures statistiques de base: min, max, médiane, moyenne et 1er et 3ème quartiles. # Elle s'applique sur des vecteurs, facteurs, matrices et data frames.

30 Mesures statistiques de base
# Cas des vecteurs: v <- rnorm(1000, mean=3, sd = 0.8) summary(v) Min. 1st Qu. Median Mean 3rd Qu. Max

31 Mesures statistiques de base
# Cas des matrices: # La fonction s'applique colonne par colonne m <- matrix(v, nrow = 250, ncol = 4, byrow = TRUE, dimnames = list(c(), c("data set 1","data set 2","data set 3","data set 4"))) summary(m) data set 1 data set 2 data set 3 Min. : Min. :1.271 Min. : st Qu.: st Qu.: st Qu.:2.552 Median : Median :2.954 Median :2.972 Mean : Mean :2.986 Mean : rd Qu.: rd Qu.: rd Qu.:3.559 Max. : Max. :5.218 Max. :5.239 data set 4 ...

32 Mesures statistiques de base
# Cas des data frames: # La fonction s'applique colonne par colonne également library(nutshell) # on appelle la librairie nutshell data(births2006.smpl) # on charge births2006.smpl # Ce data set concerne les naissances aux USA en 2006 summary(births2006.smpl) # remarquer que le summary de la variable SEX, qui est un facteur et non un vecteur, consiste en un simple comptage des observations... DOB_MM DOB_WK MAGER Min. : Min. :1.000 Min. : st Qu.: st Qu.: st Qu.:23.00 Median : Median :4.000 Median :27.00 Mean : Mean :4.065 Mean : rd Qu.: rd Qu.: rd Qu.:32.00 Max. : Max. :7.000 Max. :

33 Fréquences relatives # Fréquences relatives de certaines observations. # Appliquer une expression logique qui sélectionne les observations désirées. # Ainsi, les observations désirées prennent la valeur TRUE et les autres la valeur FALSE. # Mais TRUE et FALSE signifient également 1 et 0, respectivement. # Ainsi, en faisant la moyenne du vecteur booléen, on obtient la fréquence relative des observations désirées.

34 Fréquences relatives # Exemple: variable qualitative. # Dans le data set births2006.smpl: # la variable SEX représente le sexe du bébé. # Fraction des bébés qui sont des garçons (males) mean(births2006.smpl$SEX == "M") [1] # Fraction des bébés qui sont des filles (females) mean(births2006.smpl$SEX == "F") [1]

35 Fréquences relatives # Exemple: variable quantitative. # Dans le data set births2006.smpl: # la variable MAGER représente l'âge de la mère. # Fraction des bébés dont la mère a plus de 40 ans mean(births2006.smpl$MAGER >= 40) [1]

36 Tables de contingences
# Créer des tables de contingences. # La fonction table compte les nombre d’observations relatives à un échantillon de type "factor". table(births2006.smpl$SEX) F M # Variable DPLURAL représente la pluralité des naissances. table(births2006.smpl$DPLURAL) 1 Single 2 Twin Triplet 4 Quadruplet Quintuplet or higher 5

37 Tables de contingences
# Le grand intérêt de la fonction table est de pouvoir combiner deux facteurs pour créer une table de contingence. table(births2006.smpl$DPLURAL,births2006.smpl$SEX) F M 1 Single Twin Triplet Quadruplet Quintuplet or higher 3 2

38 Test chi-carré # Tester l'indépendance de deux variables quantitatives en utilisant un test chi- carré. # On utilise les fonction summary et table. # Généralement, une p-value > 0.05 signifie que les variables sont indépendantes, i.e., non corrélées. summary(table(births2006.smpl$DPLURAL,births2006.smpl$SEX)) Number of cases in table: Number of factors: 2 Test for independence of all factors: Chisq = , df = 4, p-value = Chi-squared approximation may be incorrect # Variables indépendantes dans ce cas...

39 Les quantiles # Calculer les quantiles d'un échantillon. # On utilise la fonction quantile(vec, p). # La variable DBWT représente le poids de l'enfant. quantile(births2006.smpl$DBWT, 0.05, na.rm = TRUE) 5% 2268 quantile(births2006.smpl$DBWT, c(0.05, 0.95), na.rm = TRUE) 5% 95%

40 Normalisation # Normalisation de l'échantillon: # On utilise la fonction scale(). DBWT_scaled <- scale(births2006.smpl$DBWT) summary(DBWT_scaled) # remarquer que mean = 0 V1 Min. : st Qu.: Median : Mean : rd Qu.: Max. : NA's :434

41 Test de Student (T-test)
# Test de Student ou T-test: tester la moyenne d'une population. # Etant donné un échantillon issu d'une population, tester si la moyenne de la population entière pourrait raisonnablement valoir une certaine valeur. # On utilise la fonction t.test(sample, mu=m). # Le résultat est une p-value... # Généralement, une p-value < 0.05 signifie que la moyenne de la population entière ne pourrait raisonnablement pas valoir m.

42 Test de Student (T-test)
# L'idée de ce genre de test d'hypothèse est la suivante: # Une machine est censée fabriquer des pièces de diamètre 2 cm. # On prend les 100 dernières pièces qui ont été produites et on mesure leur diamètre. # Il se trouve que la moyenne de cet échantillon est de 2.08 cm. # Est-il plausible que cet échantillon provienne d'une population de moyenne 2 cm? On effectue un T-test pour le savoir: t.test(sample, mu=2cm). # Si le test est positif, on peut raisonnablement supposer que la machine est encore fonctionnelle. # Si le test est négatif, on supposera au contraire que la machine est déréglée.

43 Test de Student (T-test)
# On génère un échantillon d'une loi normale de moyenne 100. # On demande si la moyenne de la population dont provient l'échantillon pourrait être 95. x <- rnorm(50, mean = 100, sd = 15) t.test(x, mu=95) # Cf. slide suivant

44 Test de Student (T-test)
One Sample t-test data: x t = , df = 49, p-value = alternative hypothesis: true mean is not equal to percent confidence interval: sample estimates: mean of x # La petite p value signifie que la moyenne de la population entière ne pourrait pas être 95.

45 Test de Student (T-test)
# Autre t.test t.test(x, mu = 100) One Sample t-test data: x t = , df = 49, p-value = alternative hypothesis: true mean is not equal to percent confidence interval: sample estimates: mean of x # La grande p value signifie que la moyenne de la population entière pourrait être 100 (ce qui est consistant).

46 Test de Student (T-test)
# T-test: intervalle de confiance autour de la moyenne. # On possède un échantillon issu d'une population et on aimerait déterminer un intervalle de confiance autour de la moyenne de la population (à partir de l'échantillon). # On utilise la fonction t.test(sample, conf.level=c) sans le paramètre mu. # Le résultat est un intervalle de confiance...

47 Test de Student (T-test)
x <- rnorm(50, mean=100, sd=15) t.test(x, conf.level=0.99) One Sample t-test data: x t = 51.92, df = 49, p-value < 2.2e-16 alternative hypothesis: true mean is not equal to 0 99 percent confidence interval: sample estimates: mean of x # Ici, l'intervalle de confiance est < mu < Cela signifie que la moyenne de la population, qui est issue d’une loi normale de moyenne 100, a 99% de chance de se trouver entre et

48 Test de Student (T-test)
# Si on ne précise pas le paramètre conf.level, c'est un intervalle de confiance de 95% qui est considéré par défaut. t.test(x) One Sample t-test data: x t = 51.92, df = 49, p-value < 2.2e-16 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: sample estimates: mean of x # La moyenne de la population a 95% de chance de se trouver entre et

49 Test de Wilcoxon # Wilcoxon signed rank test: intervalle de confiance autour de la médiane. # On possède un échantillon issu d'une population et on aimerait déterminer un intervalle de confiance autour de la médiane de la population (à partir de l'échantillon). # On utilise la fonction wilcox.test(x, conf.int=TRUE). # Le résultat est un intervalle de confiance...

50 Test de Wilcoxon x <- rnorm(50, mean=100, sd=15) wilcox.test(x, conf.int=TRUE) Wilcoxon signed rank test with continuity correction data: x V = 1275, p-value = 7.79e-10 alternative hypothesis: true location is not equal to 0 95 percent confidence interval: sample estimates: (pseudo)median # Ici, l'intervalle de confiance est < m < Cela signifie que la médiane de la population, qui est issue d‘une loi normale de moyenne 100, a 95% de chance de se trouver entre et # La médiane de l'échantillon vaut

51 Test de proportion de succès
# Tester la proportion de succès d'un échantillon. # Un échantillon de taille n contient x succès. On aimerait savoir si on peut raisonnablement supposer que la vraie probabilité de succès, i.e., celle de la loi de probabilité dont provient cet échantillon, est p. # Plus l'échantillon est petit, plus la vraie probabilité de succès est difficile à estimer. # On utilise la fonction prop.test(x, n, p). # Le résultat est une p-value....

52 Test de proportion de succès
prop.test(11, 20, 0.5, alternative="greater") 1-sample proportions test with continuity correction data: 11 out of 20, null probability 0.5 X-squared = 0.05, df = 1, p-value = alternative hypothesis: true p is greater than percent confidence interval: sample estimates: p 0.55 # La vraie proportion p est très probablement supérieure à 0.5.

53 Test de proportion de succès
# Intervalle de confiance autour de la proportion de succès d'un échantillon. # Un échantillon de taille n contient x succès. On aimerait connaître l'intervalle de confiance de 95% autour de la vraie probabilité de succès, i.e., celle de la loi de probabilité dont provient cet échantillon. # On utilise la fonction prop.test(x, n). # Le résultat est un intervalle de confiance pour p....

54 Test de proportion de succès
prop.test(6, 9) 1-sample proportions test with continuity correction data: 6 out of 9, null probability 0.5 X-squared = , df = 1, p-value = alternative hypothesis: true p is not equal to percent confidence interval: sample estimates: p # La vraie probabilité de succès se trouve entre et (95% de chances).

55 Test de normalité # Test de Shapiro-Wilk: test de normalité. # Tester si un échantillon provient d'une loi normale. # On utilise la fonction shapiro.test(x). # Le résultat est une p-value... # Si p > 0.05, on peut raisonnablement supposer que la population provient d'une loi normale. Si p < 0.05, ce n'est pas le cas.

56 Test de normalité x <- rnorm(1000, mean=15, sd=3) # loi normale shapiro.test(x) Shapiro-Wilk normality test data: x W = , p-value = # Test concluant, p-value > 0.05 y <- rexp(1000, rate=1.7) # loi exponentielle shapiro.test(y) data: y W = , p-value < 2.2e-16 # Test non concluant, p-value < 0.05

57 Test de « randomness » # Test de "randomness". # On a une séquence de réalisations binaires (oui/non, 0/1,...). # On aimerait savoir si cette séquence est aléatoire ou pas. # On utilise la fonction runs.test(as.factor(sample)) de la librairie tseries. # Le résultat est une p-value... # p > 0.05 signifie aléatoire, p < 0.05 signifie non aléatoire.

58 Test de « randomness » library(tseries) s <- sample(c(0,1), 100, replace=T) runs.test(as.factor(s)) Runs Test data: as.factor(s) Standard Normal = , p-value = alternative hypothesis: two.sided # Test réussi, p > 0.05.

59 Test de « randomness » s <- c(0,0,0,0,1,1,1,1,0,0,0,0) runs.test(as.factor(s)) Runs Test data: as.factor(s) Standard Normal = , p-value = alternative hypothesis: two.sided # Test échoué, p < 0.05.

60 Comparaison de moyennes
# Comparaison de la moyenne de deux populations. # On a deux échantillon provenant de deux populations différentes. On aimerait savoir si les moyennes de ces deux populations pourraient être égales. # On utilise la fonction t.test(s1, s2). # Le résultat est une p-value... # Si p > 0.05, test réussi, sinon, test échoué.

61 Comparaison de moyennes
# échantillon d'une loi de Poisson de moyenne 2 x <- rpois(5000, lambda=2) # échantillon d'une loi normale de moyenne 2 y <- rnorm(5000, mean=2, sd=0.8) t.test(x,y) Welch Two Sample t-test data: x and y t = , df = , p-value = alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: sample estimates: mean of x mean of y # Test réussi, p-value > 0.05

62 Comparaison de moyennes
x <- rnorm(5000, mean=2, sd=0.8) y <- rnorm(5000, mean=3, sd=0.8) t.test(x,y) Welch Two Sample t-test data: x and y t = , df = , p-value < 2.2e-16 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: sample estimates: mean of x mean of y # Test échoué, p-value < 0.05

63 Test de corrélation # Test de significativité de corrélation. # On aimerait savoir si la corrélation entre deux variables est statistiquement significative. # Si les échantillons proviennent de lois normales, on utilise la fonction cor.test(x, y). # Sinon, on utilise la fonction cor.test(x, y, method="spearman"). # Le résultat est une p-value... # Si p < 0.05, la corrélation est statistiquement significative. Sinon, elle ne l'est pas.

64 Test de corrélation x <- rpois(1000, lambda = 6) y <- rnorm(1000, mean=2, sd=0.7) + x # x et y sont donc corrélés par construction cor(x,y) [1] # Les échatillons semblent fortement corrélés. cor.test(x, y, method="spearman") Spearman's rank correlation rho data: x and y S = , p-value < 2.2e-16 alternative hypothesis: true rho is not equal to 0 sample estimates: rho # La p-value < 0.05 confirme la significativité de cette corrélation.

65 Test de proportions # Test d'égalité de proportion. # On a plusieurs échantillons binaires (succès/échec, 0/1, TRUE/FALSE, etc.). # On aimerait savoir si leurs vraies proportions de succès pourrait être égales. # On utilise la fonction prop.test(c(nb_succes1, nb_succes2,...), c(taille1, taille2,...)). # Le résultat est une p-value... # Si p < 0.05, le test est réussi. Sinon, il est échoué.

66 Test de proportions x <- sample(c(0,1), 1000, replace=TRUE, prob=c(0.49, 0.51)) n_x = sum(x == 1) # compte les succès de x y <- sample(c(0,1), 1000, replace=TRUE, prob=c(0.51, 0.49)) n_y = sum(y == 1) # compte les succès de y prop.test(c(n_x,n_y), c(1000,1000)) # Cf. slide suivant…

67 Test de proportions 2-sample test for equality of proportions with continuity correction data: c(n_x, n_y) out of c(1000, 1000) X-squared = , df = 1, p-value = alternative hypothesis: two.sided 95 percent confidence interval: sample estimates: prop 1 prop # La p-value > 0.05, le test est échoué.

68 Test de comparaison de moyennes
# Test de comparaisons des moyennes. # On compare deux à deux les moyennes de plusieurs échantillons, ceux-ci étant groupé par facteurs. # On utilise la fonction pairwise.t.test(echantillon, groups). # On obtient une matrice de p-values... # Si p < 0.05, les moyennes sont différentes. Sinon, elles peuvent raisonnablement être supposées égales.

69 Test de comparaison de moyennes
# On importe la base de données airquality attach(airquality) # On convertit les mois en facteurs Month <- factor(Month, labels = month.abb[5:9]) pairwise.t.test(Ozone, Month) Pairwise comparisons using t tests with pooled SD data: Ozone and Month May Jun Jul Aug Jun Jul Aug Sep P value adjustment method: holm

70 Test de distributions # Test de distributions. # On a deux échantillons et on aimerait tester le fait que ces deux échantillons puissent provenir d'une même distribution. # On utilise la fonction ks.test(x,y). # On obtient une p-value... # Si p < 0.05, les distributions sont très probablement différentes. Sinon, elle sont très probablement égales.

71 Test de distributions x <- rpois(1000, lambda = 3) y <- rpois(1000, lambda = 2) ks.test(x, y) Two-sample Kolmogorov-Smirnov test data: x and y D = 0.279, p-value < 2.2e-16 alternative hypothesis: two-sided # p < 0.05 indique que les distributions sont différentes.


Télécharger ppt "Chapitre 6 Probabilités et Statistiques"

Présentations similaires


Annonces Google