Le logiciel R Université de Nantes, Laboratoire de Mathématiques Jean Leray Journées académiques 9 de l IREM des Pays de la Loire Nantes, le 9 juillet Email : Anne.philippe@univ-nantes.fr www.math.sciences.univ-nantes.fr/ philippe Le logiciel R a été créé par Robert Gentleman et Ross Ihaka. C est une implémentation gratuite de Splus. Le logiciel R est disponible sur le site Il eiste des versions Windows MacOS Linu. Outils disponibles : http://cran.r-project.org/ un langage de programmation orienté objet des fonctions de base des librairies complémentaires (8 sur le site CRAN) 9 juillet / 9 juillet / Documentations Initiation au logiciel R : www.math.sciences.univ-nantes.fr/ philippe/r.html Site consacré au graphiques addictedtor.free.fr/graphiques/ Collection spécifique UseR chez Springer Plus de 8 livres, par eemple Introductory Statistics With R Bayesian Computation With R Applied Statistical Genetics With R : Generalized Additive Models : An Introduction with R Etending the Linear Model With R Time Series Analysis And Its Applications : With R Eamples 9 juillet / 9 juillet /
Plan Objets Graphiques Statistique descriptive Tests Régression Eample Fonctions Vecteurs, Matrices, etc Listes : C est une structure qui regroupe des objets (pas nécessairement de même type). >rdn=list(serie=c(:),taille=,type="arithm") Cette liste contient un vecteur dans serie un scalaire dans taille une chaîne de caractères dans type... 9 juillet / Quelques fonctions usuelles 9 juillet / Les opérations + - / * sont des opérations terme à terme Idem por les fonctions : sqrt square root abs absolute value sin cos tan trigonometric functions (radians) ep log eponential and natural logarithm log common logarithm gamma lgamma gamma function and its natural log Eample Soit A = (a i,j ) t une matrice, ep(a) retourne une matrice constituée des éléments e a i,j. sum() (somme i i), prod() (produit i i), mean() (moyenne n n i= i ) ma(), min() length(), ncol(), nrow() Ces fonctions retournent un scalaire. cumsum() (sommes cumulées (, +,..., n i= i), cumprod() (produits cumulés), sort (tri), order, unique remarque : sort() = [order()] fft() (transformé de Fourier) Ces fonctions retournent un vecteur. 9 juillet 7 / 9 juillet 8 /
Structures de contrôles et Itérations Importer/eporter des données Instructions conditionnelles if (condition) {instructions} if (>) y=*log() else y= Itérations > for ( i in :) {... } > while (i< ) {...} > repeat {... ; if (i> ) break } Importer une suite : =scan("data.dat") : pour créer un vecteur à partir de données stockées dans un fichier, ici data.dat. Importer un tableau : =read.table("data.dat") Eporter : write, write.table Importer / eporter au formats des différents logiciels commerciau (SAS, matlab, minitab SPSS etc ) La fonction apply() permet d effectuer des opérations sur les lignes ou les colonnes d une matrice. 9 juillet 9 / Créer des fonctions 9 juillet / Eemple La structure générale d une fonction est >myname=function(liste_des_paramètres) { commandes list(variables-retournées-par la fct) } Les accolades { et } définissent le début et la fin de la fonction. La dernière instruction contient le nom de l objet retourné par la fonction. On peut donner des valeurs par défaut au paramètres >PF = function(n) { u=runif(n) #nb aléatoire suivant Unif(,) pf=(u>/) freq=sum(pf)/n list(pile.face=pf, size=n, freq.pile=freq)} } >PF() $pile.face [] TRUE TRUE TRUE FALSE FALSE $size [] $freq.pile []. 9 juillet / 9 juillet /
Graphiques Graphiques Plan Fonction centrale plot Le graphique produit par la fonction plot() dépend de la classe de l objet. Graphiques Statistique descriptive Tests Régression > methods(plot) [] plot.acf* plot.add plot.data.frame* [] plot.date* plot.decomposed.ts* plot.default [7] plot.dendrogram* plot.density plot.ecdf [] plot.factor* plot.formula* plot.hclust* [] plot.histogram* plot.holtwinters* plot.isoreg* [] plot.ker plot.lm plot.medpolish* [9] plot.mlm plot.posixct* plot.posixlt* [] plot.ppr* plot.prcomp* plot.princomp* [] plot.profile.nls* plot.spec plot.spec.coherency [8] plot.spec.phase plot.stepfun plot.stl* [] plot.table* plot.ts plot.tskernel* 9 juillet / Graphiques plot( ) 9 juillet / Graphiques demo(graphics) plot(... ) pie(... ) boplot(... ) plot(cars) plot(sin, -pi, *pi) dist 8 sin () -. -.... - - - Simple Use of Color In a Plot A Sample Color Wheel 8 7 9 7 8 9 speed Just a Whisper of a Label (Use this as a test of monitor linearity) table(rpois(, )) plot(table(rpois(,))) plot(, type = "s") <- sort(rnorm(7)) - 7 8 9 January Pie Sales Cherry Blueberry Apple Vanilla Cream Other Boston Cream - Notched Boplots Inde 7 8 9 (Don't try this at home kids) Group 9 juillet / 9 juillet /
y Graphiques z y Graphiques polygon(,y,..) plot(... ) hist(..) biplot : pairs(matrice,...) Distance Between Brownian Motions. The Level of Interest in R Edgar Anderson's Iris Data.......... Distance -... Sepal.Length... 7. 8 Time. Jan Mar May Jul Sep Nov 99..... Sepal.Width Frequency Normal Random Variates..... Petal.Length Petal.Width 7 - -... 7. 7 9 juillet 7 / Graphiques contour(, y, matrice... ) image( ) persp( ) 9 juillet 8 / Statistique descriptive Plan Maunga Whau Volcano z y Graphiques Statistique descriptive 7 8 Tests Régression 9 juillet 9 / 9 juillet /
Statistique descriptive Statistique descriptive Statistique descriptive pour les donne es islands histogramme boplot data : sqrt(islands) 8 > mean() [].7 > var() [] 9.8 > quantile(,c(.,.,.7)) % % 7%.797.99.7 Antarctica Asia 988 Ael Heiberg Baffin 8 Borneo Britain 8 8 Celon Cuba Ellesmere Europe 8 7 Hainan Hispaniola Honshu Iceland 89 Java Kyushu 9 Madagascar Melville 7 Moluccas New Britain 9 New Zealand (N) New Zealand (S) 8 North America Novaya Zemlya 99 Sakhalin South America 9 79 Spitsbergen Sumatra 8 Tasmania Tierra del Fuego 9 9 juillet / Vancouver Victoria 8 Asia Africa North America South America Antarctica Europe Australia Greenland New Guinea Borneo Madagascar Baffin Sumatra Honshu Britain Victoria Ellesmere Celebes New Zealand (S) Java New Zealand (N) Newfoundland Cuba Luzon Iceland Mindanao Ireland Novaya Zemlya Hokkaido Hispaniola Sakhalin Moluccas Tasmania Celon Banks Devon Tierra del Fuego Southampton Melville Ael Heiberg Spitsbergen New Britain Taiwan Kyushu Timor Prince of Wales Hainan Vancouver Africa Australia 98 Banks Celebes 7 Devon Greenland 8 Hokkaido Ireland Luzon Mindanao New Guinea Newfoundland Prince of Wales Southampton Taiwan Timor Statistique descriptive islands data: area (sq. miles) Les donne es Island Statistique descriptive 9 juillet / histogramme : le choi du nombre de classes NON - equidistant breaks Normal Random Variates 8 sqrt(islands)... 8. On simule un e chantillon suivant la loi gaussienne de taille On trace l histogramme pour diffe rentes valeurs du nombre de classes. On compare l histogramme avec la densite the orique de loi gaussienne (courbe en rouge)........ 9...... equidistant breaks - - sqrt(islands) - - 8. - - hist(sqrt(islands), breaks = ) hist(sqrt(islands), breaks = c(*:, *:, 7,, )) hist(sqrt(islands), breaks = c(*:, *:, 7,, ),freq=true).. - sqrt(islands)...... Frequency. WRONG histogram 9 juillet / - hist(, nclass= ) ou hist() par de faut le nombre de classes est optimise pour des e chantillons gaussiens 9 juillet /
Statistique descriptive Estimation de la densité par l estimateur à noyau Plan On compare sur des données simulées suivant la loi gaussienne deu estimateurs de la densité (hist / density) avec la densité théorique de la loi... Histogram of dat Graphiques Statistique descriptive... - - - dat density.default( = dat) #calcul de l estimateur >hist(dat) > y=density(dat) > plot(y) Tests Régression - - N = Bandwidth =.79 9 juillet / Généralités 9 juillet / Quelques lois disponibles Soit X une variable aléatoire de loi P X { A P(X = ) loi discrète P X (A) = P(X A) = A f ()ḍ loi continue Pour les lois classiques, des fonctions R eistent pour calculer { P(X = ) pour les lois discrètes la densité f () pour les lois continues la fonction de répartition F () = P(X ) les quantiles F (u) = inf{ : F () u} simuler des nombres aléatoires suivant la même loi que X. Lois discrètes Loi binomiale (n,p) Loi hypergéométrique (N,n,k) Loi de Poisson (a) Loi géométrique (p) Loi à support fini {(a i, p i ), i =...m} Lois continues Loi Gaussienne (m,σ ) Loi uniforme sur [a, b] Loi de Student à ν degrés de liberté Loi du χ à ν degrés de liberté binom hyper pois geom sample norm unif t chisq 9 juillet 7 / 9 juillet 8 /
Autour des lois de probabilite s Autour des lois de probabilite s Simuler le re sultat d un de a faces - -...8 OO lancers. u..... rnorm() qnorm(u) - -. random values quantile function. table() - =TRUE) pnorm() -.....8. cdf..... dnorm() Gaussian N(,) distribution density > = sample((:),,replace > [] [] [7] [7] [9] > table() 7 7 9 > plot(table()) dnorm(,,) : densite au point pnorm(,,) : fonction de re partition au point qnorm(α,,) : quantile d ordre α rnorm(n,,) : e chantillon de taille n Eemple : loi gaussienne de moyenne et de variance 8 Inde Autour des lois de probabilite s 9 juillet 9 / Comportement asymptotique des fre quences empiriques Autour des lois de probabilite s 9 juillet / 9 juillet / Sondages On conside re les re sultats des e lections europe ennes lancer=function(n) { = sample((:),n,replace =TRUE) plot(table(),,lwd=) ; abline(h=n/,lwd=) } résultats des elections 7.9 8.. table() table(). 8 8 nb de lancers...8 table() nb de lancers prob. nb de lancers nb de lancers nb de lancers table() > > > > > 8 candidat table() table() nb de lancers 8 prob=c(7.9,.,., 8.,.,,.,,.,.8) plot(prob,type="h",lwd = ) points(prob ) title( re sultats des elections ) tet(:,prob+.,prob,col="red") 9 juillet /
Simuler les résultats d un sondage Erreur d estimation des proportions erreur sur un sondage de taille On simule un échantillon de taille suivant la loi multinomiale > prob=c(7.9,.,., 8.,.,,.,,.,.8) > size = > (Sondage = rmultinom(, size, prob/) ) -. -. -.... 8 candidat [,] [,] [,] [,] [,] [,] [,7] [,8] [,9] [,] [,] 9 7 89 8 Classement estimé classement des candidats Estimation par les fréquences empiriques > estimation = Sondage /size* [,] [,] [,] [,] [,] [,] [,7] [,8] [,9] [,] [,] 9.. 7. 8.9.....8 classements 8 8 candidats 9 juillet / Second tour d une élection présidentielle : A % contre B 9% 9 juillet / Résultat des sondages simulés : estimation du score de A Quel est la probabilité d annoncer le candidat gagnant en réalisant un sondage sur un échantillon de taille? Le résultat d un sondage est obtenu en simulant un nombre aléatoire suivant la loi binomiale (,.) On simule les résultats de N sondages =rbinom(n,,.) On calcule la fréquence de l événement X>.8....7.9 sondage y = (>) sum(y)/length(y).7 7 % des sondages donnent A gagnant 9 juillet / 9 juillet /
on augmente la taille de l échantillon On change Sondage sur des échantillons de taille.9.....9 estimation du score de A.9.88 sondage Sondage sur des échantillons de taille.9...... estimation du score de A.98. 9 juillet 7 / sondage Plan Tests les résultats les résultats sont % contre 7 % les sondages sont réalisés sur des échantillons de taille.8.....8 estimation du score de A.9.8 sondage 9 juillet 8 / 9 % des sondages donnent A gagnant Tests classiques : Tests Test sur la moyenne : test de Student Graphiques Statistique descriptive Tests Régression t.test(,mu=,alt="two.sided") t.test(,y,alt="less", conf=.9) Test sur la variance var.tet(,y) cor.test(,y) Bo.test(z, lag = ) Test χ chisq.test(,y) chisq.test() Test d ajustement ks.test(,"pnorm") ks.test(,y) shapiro.test() # comparaison variance # non correlation #non correlation #independance #ajustement à une loi donnée #normalité K-S # m^eme distribution #normalité 9 juillet 9 / 9 juillet /
- - N = Bandwidth =. - - - N = Bandwidth =.7 - - - N = Bandwidth =. Tests Eemple : Test de Student t.test() Tests Test d ajustement du χ : lancer d un dé X,..., X n iid N (, ) nb de lancers lancers Y,..., Y m iid Epo() Test H : E(X ) = E(Y ) vs H : E(X ) E(Y ) > = rnorm(,,) > y = rep(,) > t.test(,y) Welch Two Sample t-test data: and y t = -.78, df = 78., p-value =.878 alternative hypothesis: true difference in means is not equal to 9 percent confidence interval: -.89.8 sample estimates: mean of :.97 mean of y :.9879 table() table() 8 8 nb de lancers >tab = table(de) 7 8 >chisq.test(tab) Chi-squared test for given probabilities data: table(de) X-squared =., df =, p-value =.77 lancers 8 8 9 8 7 8 Chi-squared test for given probabilities data: table() X-squared =.7, df =, p-value =.8 9 juillet / Tests Test d ajustement à une gaussienne 9 juillet / Tests Test de normalité. n =,, On simule une loi normale en utilisant le TCL sur des variables iid suivant la loi uniforme. Méthode de simulation non eacte... One-sample Kolmogorov-Smirnov test data: X D =.8, p-value =.8 Shapiro-Wilk normality test data: X W =.9, p-value <.e- U = U,..., U n iid suivant la loi uniforme n(ūn ) X N(, ) Ū n = n n i= U i data: X D =., p-value =. data: X D =.9, p-value =.9 data: X W =.99, p-value =.9e- data: X W =.997, p-value =. Le générateur s écrit n= n= n= simu<-function(size,n) { y = matri(runif(n*size),ncol=n) (apply(y,,mean)-/)*sqrt(n*) }............... 9 juillet / 9 juillet /
Plan Régression Régression linéaire Régression Lien linéaire entre les variables et Y Graphiques Statistique descriptive Tests Régression Y i = a i + b + ɛ i où (ɛ i ) i est une suite de variables aléatoires iid, centrées et L. Pour réaliser une régression linéaire, par la méthode des moindres carrés, on utilise la fonction lm : Si les données sont sous la forme de vecteurs X et Y (de même taille) r=lm(y~x) Call: lm(formula = Y ~ X) Coefficients: (Intercept) X.8. 9 juillet / Régression plot(x,y) plot(r$residual, type="h") abline(r) 9 juillet / Régression Ajustement polynomial : r=lm(y poly(x,deg))) qqnorm(r$residual) abline(,) acf(r$residuals) deg = deg = Y r$residual - - dist 8 speed dist 8 speed deg = deg = X Inde Sample Quantiles - - Normal Q-Q Plot - - Theoretical Quantiles ACF -....8 Series r$residuals 8 9 juillet 7 / Lag dist 8 speed dist 8 speed plot(cars) 9 juillet 8 /
Généralisation Régression Conclusion Régression régression multiple lm(v v + v + v) régression linéaire généralisée glm sélection de modèles, anova approche non paramétrique par noyau lissage polynômes locau Peut on utiliser R pour l enseignement? Difficulté : Langage à apprendre Solutions : proposer des fonctions boite noire utiliser des librairies avec interface graphique Eemple : la librairie Rcmdr 9 juillet 9 / 9 juillet /