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