Analyse de données
Transcription
Analyse de données
Analyse de données Simon Porcher [email protected] Introduction à R • Il s’agit d’un logiciel accessible gratuitement: – http://www.r-project.org/ • Normalement, installé sur les ordinateurs de la faculté. • Choisir un téléchargement depuis une université française. Possible de télécharger plusieurs modules via le CRAN. Simon Porcher 2 Introduction à R > data() montre toutes les séries de données ?EuStockMarkets permet une description de la base > plot(EuStockMarkets ) fait un graphique temporel de la base Simon Porcher 3 Introduction à R Simon Porcher 4 Introduction à R > read.table("C:/Users/Simon/Desktop/cours2014/baseR.txt", header = TRUE) permet d’ouvrir une base de données. Les bases de données sous R sont au format .txt header = TRUE permet de garder le nom des variables Simon Porcher 5 Introduction à R > market = read.table("C:/Users/Simon/Desktop/cours2014/baseR.txt", header = TRUE) permet de nommer la base > colnames(market) donne le nom des colonnes [1] "individu" "sexe" "revenuannuel" "csp" "achat." > market$sexe résume l’information des données > market$revenuannueldollar = market$revenuannuel * 1.30 permet de créer une nouvelle variable à partir d’une autre > market$revenuannueldollar Simon Porcher 6 Introduction à R > market[10:15,] filtre les données de la 10ème à la 15ème observation > market[market$revenuannuel > 20000,] filtre les données pour les individus ayant un revenu > 20000 > attach(market) permet d’éviter de retaper à chaque fois « market$xxx » > summary(market) résume toutes les données de la base Simon Porcher 7 Introduction à R > frequency(age) donne la fréquence des âges > plot(revenuannuel) fait un nuage de points > pie(table(csp)) donne un secteur des csp > plot(density(revenuannuel)) donne la distribution > summary(market) résume toutes les données de la base Simon Porcher 8 Introduction à R > mean(market$revenuannuel) permet d’obtenir la moyenne > median(market$revenuannuel) permet d’obtenir la médiane > var(market$revenuannuel) permet d’obtenir la variance > sd(market$revenuannuel) permet d’obtenir l’écart-type Simon Porcher 9 Introduction à R > hist(market$revenuannuel, x) permet d’obtenir un histogramme, x est le nombre de segments. Simon Porcher 10 Introduction à R > boxplot(revenuannuel) permet d’obtenir une boxplot résumant la distribution Simon Porcher 11 Introduction à R > freqsex=table(sexe) donne la fréquence > relfreqsex=table(sexe)/101 donne le pourcentage > cbind(freqsex,relfreqsex) donne freqsex relfreqsex Femme 28 0.2772277 Homme 73 0.7227723 > freqachat=table(achat) > relfreqachat=table(achat)/101 > cbind(freqachat,relfreqachat) freqachat relfreqachat non 49 0.4851485 oui 52 0.5148515 Simon Porcher 12 Les intervalles de confiance et les tests 101 personnes et 52 personnes achètent le bien > n=101 > phat=52/n proportion d’opinion positive > alpha = 0.05 intervalle de confiance de 95% > SE = sqrt(phat*(1-phat)/n) > zstar = - qnorm(alpha/2) trouve la distribution > c(phat - zstar * SE, phat + zstar * SE) permet de construire l’intervalle de confiance à 95% Simon Porcher 13 Les intervalles de confiance et les tests 101 observations, moyenne = 25752,48 et ET = 11156,53 > sample101 = rnorm(101,25752.48,11156.53) > sample101 simule un échantillon fictif normalement distribué > xbar = mean(sample101) moyenne et > xbar > s = sd(sample101) écart-type et > s > SEM = s/sqrt(101) erreur standard de la moyenne et > SEM > xbar – qnorm(0.975)*SEM et > xbar + qnorm(0.975)*SEM permettent de construire l’intervalle de confiance à 95% Simon Porcher 14 Les intervalles de confiance et les tests 101 observations, moyenne = 25752,48 et ET = 11156,53 > sample101 = rnorm(101,25752.48,11156.53) > sample101 simule un échantillon fictif normalement distribué > xbar = mean(sample101) moyenne et > xbar > s = sd(sample101) écart-type et > s > SEM = s/sqrt(101) erreur standard de la moyenne et > SEM > xbar – qnorm(0.975)*SEM et > xbar + qnorm(0.975)*SEM permettent de construire l’intervalle de confiance à 95% Simon Porcher 15 Les intervalles de confiance et les tests Comparer les moyennes d’achat des femmes (11/28) et des hommes (41/73) > n1=28 > n2=73 > phat1=11/28 > phat2=41/73 > x1=round(n1*phat1, 0) et > x2=round(n2*phat2, 0) donnent le nombre de succès > prop.test(c(x1,x2), c(n1,n2), alternative= "two.sided", correct=F) Simon Porcher 16 Les intervalles de confiance et les tests 2-sample test for equality of proportions without continuity correction data: c(x1, x2) out of c(n1, n2) X-squared = 2.3082, df = 1, p-value = 0.1287 alternative hypothesis: two.sided 95 percent confidence interval: -0.38251436 0.04494097 sample estimates: prop 1 prop 2 0.3928571 0.5616438 Simon Porcher Moyenne! 17 Les intervalles de confiance et les tests 2-sample test for equality of proportions without continuity correction data: c(x1, x2) out of c(n1, n2) X-squared = 2.3082, df = 1, p-value = 0.1287 alternative hypothesis: two.sided 95 percent confidence interval: -0.38251436 0.04494097 sample estimates: prop 1 prop 2 0.3928571 0.5616438 Simon Porcher Intervalle de confiance de phat1 – phat2 18 Les intervalles de confiance et les tests 2-sample test for equality of proportions without continuity correction p-value>0.05 donc data: c(x1, x2) out of c(n1, n2) X-squared = 2.3082, df = 1, p-value = 0.1287 alternative hypothesis: two.sided 95 percent confidence interval: -0.38251436 0.04494097 sample estimates: prop 1 prop 2 0.3928571 0.5616438 Simon Porcher on accepte l’hypothèse alternative 19 Les intervalles de confiance et les tests Nous allons calculer la « test-statistic » > t.test(market$revenuannuel,mu=20000) teste que la moyenne du revenu est égale à 20000 euros > tapply(revenuannuel,sexe,mean) donne la moyenne des revenus par sexe t.test(revenuannuel~sexe,data=market) donne la t-stat de comparaison des deux groupes Simon Porcher 20 Les intervalles de confiance et les tests Welch Two Sample t-test data: revenuannuel by sexe t = 1.8235, df = 32.66, p-value = 0.07739 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -671.2264 12226.9994 sample estimates: mean in group Femme mean in group Homme 29928.57 24150.68 Difference de moyenne est significative Simon Porcher 21 Les régressions > cor(revenuannuel, age) donne la corrélation entre le revenu annuel et l’âge. > plot(age, revenuannuel, xlab="Age", ylab="Revenu annuel (en euros)", main="Relation entre l'âge et le revenu annuel") Simon Porcher 22 Les régressions Simon Porcher 23 Les régressions Y = a + bX Simon Porcher 24 Les régressions > identify(revenuannuel, age, label=sexe) permet d’identifier les points aberrants et de les pointer sur le graphique. Simon Porcher 25 Les régressions > plot(age, revenuannuel, xlab="Age", ylab="Revenu annuel (en euros)", main="Relation entre l'âge et le revenu annuel") > lm(revenuannuel~age) > Linreg = lm(revenuannuel~age) > plot(age, revenuannuel, xlab="Age", ylab="Revenu annuel (en euros)", main="Relation entre l'âge et le revenu annuel") > abline(Linreg, col = "red") Simon Porcher 26 Les régressions > Linreg$residuals > summary(linreg) Simon Porcher 27 Les régressions Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 12190.9 4699.7 2.594 0.01093 * age 376.5 127.1 2.963 0.00381 ** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 10750 on 99 degrees of freedom Multiple R-squared: 0.08148, Adjusted R-squared: 0.0722 F-statistic: 8.782 on 1 and 99 DF, p-value: 0.003811 Simon Porcher 28 Les régressions > resids = Linreg$residuals > plot(revenuannuel, resids, xlab="Revenu annuel", ylab="Résidus", main="Relation entre le revenu annuel et les résidus") > abline (h=0, col ="red") Simon Porcher 29 Les régressions (suite) • Faire face à des valeurs manquantes • Supprimons quelques observations sur les revenus au hasard. >cor(revenuannuel,age) ou >cor.test(revenuannuel,age) >manquantes = (!is.na(revenuannuel)) >cor(age[manquantes],revenuannuel[manquantes]) fait une corrélation entre les deux variables en dehors des observations manquantes Simon Porcher 30 Les régressions (suite) • Les prédictions: >lm.agerev=lm(revenuannuel~age) et summary(lm.agerev) >pp = predict(lm.agerev,int="p",) donne la prédiction et les intervalles bas et haut > pc= predict(lm.agerev,int="c",) idem Simon Porcher 31 Les régressions (suite) • Les prédictions: >plot(age,revenuannuel,ylim=range(revenuannuel, pp), xlab=“Age", ylab="Revenu annuel", cex = 1.5, cex.axis=1.5,cex.lab=1.5) > matlines(age, pc, lty=c(1,2,2), col="black") intègre les intervalles de confiance > matlines(age, pp, lty=c(1,3,3), col="black") idem Regarder si les résidus sont normaux •>qqnorm(resid(lm.agerev) donne la courbe des résidus Simon Porcher 32 Les régressions (suite) Simon Porcher 33 Les régressions (suite) • Nous allons construire notre propre base de données. Selon des recherches scientifiques, les filles et les garçons ont des meilleurs résultats quand ils sont séparés. Parce que les garçons sont plus à l’aise quand la température de la classe est moins élevée. temperature = c(rep(19,30),rep(22,30),rep(25,30)) 30 personnes réparties dans trois classes. gender = rep(c(rep("boy",15),rep("girl",15)),3) 15 garçons dans chaque classe gendernum = rep(c(rep(-1,15),rep(1,15)),3) on transforme notre variable en variable numérique testscore = 80 + rnorm(90,0,5) + (temperature - 22)*gendernum avec une loi normale de 90 observations et un ET de 5 et une moyenne de 80 au test Simon Porcher 34 Les régressions (suite) boxplot(testscore ~ gender,ylab="test score") représente les « boîtes » qui ne doivent montrer aucune différence entre homme et femme quand la température n’est pas prise en compte ttest(testscore~gender) idem interaction.plot(temperature,gender,testscore) permet de checker graphiquement avant de regarder les variances anova(lm(testscore ~ temperature*gender)) montre une interaction significative entre le sexe et la température Simon Porcher 35 Classwork Utilisez la base « tennis » 1. Résumer les variables avserspeed et numconeshit. 2. Faire un histogramme selon le type de la balle et la classe du joueur. 3. Peut-on en tirer un modèle linéaire? Expliquer. 4. Faire une régression et interpréter les résultats. Simon Porcher 36