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

Cours 5 Boucles, Programmation de base. Boucles et Tests for( in ) { } while( ) { } Exemple: x=rep(5,0) for (i in 1:5) x[i]=2*i+1 Les fonctions du type.

Présentations similaires


Présentation au sujet: "Cours 5 Boucles, Programmation de base. Boucles et Tests for( in ) { } while( ) { } Exemple: x=rep(5,0) for (i in 1:5) x[i]=2*i+1 Les fonctions du type."— Transcription de la présentation:

1 Cours 5 Boucles, Programmation de base

2 Boucles et Tests for( in ) { } while( ) { } Exemple: x=rep(5,0) for (i in 1:5) x[i]=2*i+1 Les fonctions du type apply(),replicate() évitent d’écrire des boucles.

3 Boucles et exécutions conditionnelles if(expr1) expr2 else expr3 avec pour expr1 une expression de type logique, Remarques: Plusieurs commandes entre accolades: {expr;… ;expr n} Les exécutions conditionnelles (if.. else) peuvent quelquefois être remplacées efficacement par des indexations logiques.

4 Exemple: y=numeric(length(x)); for(i in 1:length(x)) {if(x[i]==b)y[i]=0 else y[i]=1} Remarque: L'exemple précédent peut être remplacé par: y[x==b]=0; y[x!=b]=1;

5 Des Expressions de type logique utilisant des opérateurs relationnels: x y;x =y;x==y; x!=y ou bien (et) les opérateurs NOT ! AND & OR I

6 if(expr1) expr2 else expr3 Le résultat de cette commande est expr2 si expr1 vaut TRUE et expr3 si expr1 vaut FALSE Il existe une version vectorisée de cette commande: ifelse(condition, a,b)

7 exemples x=1; if(x<5) y=1 else y=2 y; [1] 1 x=1:10 if(x<5) y=1 else y=2

8 Suite: ifelse(condition, a,b) ifelse(x<5,1,2) [1] 1 1 1 1 2 2 2 2 2 2 y=ifelse(x<5,1,2);y; [1] 1 1 1 1 2 2 2 2 2 2

9 repeat expr while(condition) La commande break peut être utilisée pour terminer une boucle quelconque, et c’est le seul moyen pour interrompre une boucle avec repeat La commande next peut être utilisée pour pour interrompre une boucle particulière et passer aux instructions suivant next

10 Programmer avec R Point fort:la programmation d'une suite d'analyses qui seront exécutées successivement Un programme en R sera écrit dans un fichier ascii et sauvegardé avec l'extension.R Exemple: tracer le même graphe pour 3 espèces d'oiseaux

11 Programme 1 layout(matrix(1:3,3,1)) data=read.table(« swal.dat ») plot(data$v1,data$v2, type= »l ») Title(« swallow ») data=read.table(« wren.dat ») plot(data$v1,data$v2, type= »l ») Title(« wren ») data=read.table(« dunn.dat ») plot(data$v1,data$v2, type= »l ») Title(« dunn »)...

12 Programme 2:les noms de fichier et d'especes sont utilises comme des variables layout(matrix(1:3,3,1)) species=c(«swallow »,»wren »,»dunnock») file=c(« swal.dat »,»wren.dat »,»dunn.d at ») for(i in 1:length(species)) {data=read.table(file[i]) plot(data$v1,data$v2,type= »l ») title(species[i]) }

13 Les fonctions On peut écrire ses propres fonctions: Pour pouvoir être exécutée une fonction doit être chargée en mémoire, cela peut se faire de plusieurs façons: Entrer les lignes au clavier, ou les copier /coller à partir d’un éditeur Enregistrer la fonction dans un fichier ascii et la charger par la commande source() Si on souhaite que la fonction soit chargée au démarrage, il peut les enregistrer dans un workspace avec l’extension.Rdata qui sera chargé en mémoire s’il est localisé dans le répertoire de travail de démarrage getwd(): indique le repertoire de travail

14 Exemple de fonction carre=function(x){print(x*x)} carre(3);9 Il y a deux manières de spécifier les arguments à une fonction: par leur position par leur nom Exemple: fonc=function(arg1,arg2,arg3) fonc(x,y,z); fonc(arg2=y,arg1=x,arg3=z);

15 print() pour afficher le contenu d ’un objet dans une fonction Arguments par défaut Exemple: Moy.et.etype=function(x=1:10) {moyenne=mean(x); etype=sd(x); print(c(moyenne,etype)); } moy.et.etype() [1] 5.500000 3.027650 moy.et.etype(1:100) [1] 50.50000 29.01149

16 Programme 3 myfun=function(S,F) { data=read.table(F) plot(data$v1,data$v2,type= »l ») title(S) }; layout(matrix(1:3,3,1) myfun(« swallow », »sawl.dat »)...

17 Les fonctions On peut écrire ses propres fonctions: Pour pouvoir être exécutée une fonction doit être chargée en mémoire, cela peut se faire de plusieurs façons: Entrer les lignes au clavier, ou les copier /coller à partir d’un éditeur Enregistrer la fonction dans un fichier ascii et la charger par la commande source() Si on souhaite que la fonction soit chargée au démarrage, on peut les enregistrer dans un workspace avec l’extension.Rdata qui sera chargé en mémoire s’il est localisé dans le répertoire de travail de démarrage getwd(): indique le repertoire de travail

18 nom=function(arg1,arg2,…)expression Où expression peut être un groupe d’expressions rassemblées entre accolades: nom=function(arg1,arg2,…) {expression1, expression2, expression3,… }

19 Fonctions (suite) print() pour afficher le contenu d ’un objet dans une fonction Le résultat de la fonction sera en général la dernière valeur calculée. Un appel de fonction est fait de la façon suivante: nom(arg1,arg2,…)

20 Exemples carre=function(x){print(x*x)} carre(3);9 Il y a deux manières de spécifier les arguments à une fonction: par leur position par leur nom fonc=function(arg1,arg2,arg3) fonc(x,y,z); fonc(arg2=y,arg1=x,arg3=z);

21 Arguments par défaut Exemple: moy.et.etype=function(x=1:10) {moyenne=mean(x); etype=sd(x); print(c(moyenne,etype)); } moy.et.etype() [1] 5.500000 3.027650 moy.et.etype(1:100) [1] 50.50000 29.01149

22 Distributions de probabilités classiques shape,scale gammaGamma rate expExponentielle df,ncp chisqChi-Deux location, scale cauchyCauchy size,prob nbinomBinomiale négative size,prob binomBinomiale shape1,shape2,ncp beta Arguments additionnelsNoms sous Rdistributions

23 Distributions de probabilités classiques suite Arguments additionnelsNoms sous Rdistributions M,nwilcoxWilcoxon shape,scaleweibullWeibull min,maxunifUniforme df,ncptT de student lambdapoisPoisson mean,sdnormNormale meanlog,sdloglnormLog-normale n,m,khyperHypergéométrique probgeom Géométrique

24 Fonctions mathématiques de base Ecart-type des éléments de xsd(x) Matrice de corrélation si x est une matrice ou un data framecor(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matricevar(x) ou cov(x) Médiane des éléments de xmedian(x) Moyenne des éléments de xmean(x) Idem que c(min,max)range(x) Retourne l’indice du minimum des éléments de xwhich.min(x) Retourne l’indice du maximum des éléments de xwhich.max(x) Maximum, minimum des éléments de xmax(x), min(x) Produit des éléments de xprod(x) Somme des éléments de xsum(x)

25 Autres fonctions Retourne un vecteur de meme longueur que x contenant les éléments de x qui sont dans ymatch(x,y) Idem pour produit, minimum, maximumcumprod(), cummin(),cummax() Un vecteur dont le ieme élément est la somme de x[1]à x[i]cumsum(x) Un vecteur dont le iéme élément est le minimum entre x[i] et y[i]pmin(x,y,…) Centre et réduit les donnéesscale(x) Range les éléments de xrank(x) Trie les éléments de x dans l’ordre ascendantsort(x) Inverse l’ordre des éléments de xrev(x) Arrondit les éléments de x à n chiffres après la virguleround(x,n)

26 encore… Ré-échantillonnage aléatoire et sans remise de size éléments dans xsample(x,size) Retourne une selection de x en fonction de critèressubset() Retourne un tableau des effectifs des différentes valeurs de xtable() Si x est un vecteur ou un data frame, retourne un objet similaire mais avec les éléments duppliqués supprimésunique() Retourne un message d’erreur si x contient au moins un NAna.fail() Supprime les observations avec données manquantesna.omit() Coefficient binomial Cnkchoose(n,k)

27 La fonction which() which(x, arr.ind = FALSE) x: un vecteur ou tableau logique arr.ind: logique est-ce que les indices du tableau doivent être retournés lorsque x est un tableau? Exemple: m = matrix(12:24,3,4) ;m [,1] [,2] [,3] [,4] [1,] 12 15 18 21 [2,] 13 16 19 22 [3,] 14 17 20 23

28 which(m % 3 == 0) [1] 1 4 7 10 which(m % 3 == 0, arr.ind=TRUE) row col [1,] 1 1 [2,] 1 2 [3,] 1 3 [4,] 1 4

29 Fonctions mathématiques de base Ecart-type des éléments de xsd(x) Matrice de corrélation si x est une matrice ou un data framecor(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matricevar(x) ou cov(x) Médiane des éléments de xmedian(x) Moyenne des éléments de xmean(x) Idem que c(min,max)range(x) Retourne l’indice du minimum des éléments de xwhich.min(x) Retourne l’indice du maximum des éléments de xwhich.max(x) Maximum, minimum des éléments de xmax(x), min(x) Produit des éléments de xprod(x) Somme des éléments de xsum(x)

30 Autres fonctions Retourne un vecteur de meme longueur que x contenant les éléments de x qui sont dans ymatch(x,y) Idem pour produit, minimum, maximumcumprod(), cummin(),cummax() Un vecteur dont le ieme élément est la somme de x[1]à x[i]cumsum(x) Un vecteur dont le iéme élément est le minimum entre x[i] et y[i]pmin(x,y,…) Centre et réduit les donnéesscale(x) Range les éléments de xrank(x) Trie les éléments de x dans l’ordre ascendantsort(x) Inverse l’ordre des éléments de xrev(x) Arrondit les éléments de x à n chiffres après la virguleround(x,n)

31 encore… Ré-échantillonnage aléatoire et sans remise de size éléments dans xsample(x,size) Retourne une selection de x en fonction de critèressubset() Retourne un tableau des effectifs des différentes valeurs de xtable() Si x est un vecteur ou un data frame, retourne un objet similaire mais avec les éléments duppliqués supprimésunique() Retourne un message d’erreur si x contient au moins un NAna.fail() Supprime les observations avec données manquantesna.omit() Coefficient binomial Cnkchoose(n,k)

32 Cours 7 Les régressions linéaires

33 Les analyses statistiques avec R Modèles linéaires,lm() modèles linéaires généralisés,glm() analyse de variance, aov()

34 généralités L ’argument principal est une formule du type: réponse ~ prédicteur exemples: data(I=InsectSprays) aov(sqrt(count) ~ spray,data=I) équivalent à : aov(sqrt(I$count) ~ I$spray) ou à aov(sqrt(I[,1]) ~ I[,2])

35 Les formules y~model ou y est la réponse analysée et model est un ensemble de termes pour lesquels les paramètres sont estimés attention: les symboles arithmétiques ont ici une signification particulière exemples: y~x1+x2 désigne le modèle y=ax1+bx2+c y~I(x1+x2) désigne le modèle y=a(x1+x2)+c y~poly(x,2) désigne le modèle y=ax^2+bx+c y~x1+x2 désigne le modèle y=ax1+bx2+c y~x1-1 désigne le modèle y=ax1

36 Les fonctions génériques Les objets qui contiennent les résultats d ’une analyse, ont un attribut particulier, la classe. Certaines fonctions, dites génériques, permettent d ’extraire des informations d ’un objet résultat exemples: summary()qui a une action différente sur un objet de classe lm(), aov(),...

37 apropos("^summary") [1] "summary.aov" "summary.aovlist" "summary.glm" [4] "summary.infl" "summary.lm" "summary.manova" [7] "summary.mlm" "summary.stepfun" "summaryRprof" [10] "summary" "summary.connection" "summary.data.frame" [13] "summary.Date" "summary.default" "summary.factor" [16] "summary.matrix" "summary.POSIXct" "summary.POSIXlt" [19] "summary.table"

38 Les fonctions génériques plot() print()résumé succint summary()résumé détaillé df.residualsnbre de ddl résiduels coefcoefficients estimés residualsrésidus deviancedéviance fittedvaleurs ajustées par le modèle logLiklogarithme de la vraisemblance...

39 Un objet-résultat, produit par aov(), lm()…. est généralement une liste,bien qu ’il ne soit pas affiché comme tel, dont les éléments peuvent être affiché par la fonction names() ex names(res.reg)pour une régréssion linéaire "coefficients" "residuals" "effects" "rank" "fitted.values" "assign" "qr" "df.residual" "xlevels" "call" "terms" "model"

40 Analyses supplémentaires à partir d ’un objet add1(): teste successivement tous les termes qui peuvent être ajoutés à un modèle drop1():teste successivement tous les termes qui peuvent être enlevés à un modèle anova(): calcule une table d ’analyse de variance ou de deviance pour un ou plusieurs modèles predict(): calcule les valeurs prédites pour des nouvelles données update(): réajuste un modèle...

41 Exemples de statistiques Exercice 1 : Dans une enquête sur les conditions de vie des ménages de banlieue, on dispose de la série statistique du nombre d’enfants de 10 ménages:

42 D=data.frame(men=1:11,nbenf=c(3,2,5,3,6,3,5,5,1,5,2));D; men nbenf 1 1 3 2 2 2 3 3 5 4 4 3 5 5 6 6 6 3 7 7 5 8 8 5 9 9 1 10 10 5...

43 Calculer la moyenne du nombre d’enfants par ménage de deux façons différentes mean(D$nbenf); [1] 3.636364 sum(D$nbenf)/length(D$nbenf) [1] 3.636364

44 Construire le tableau de la distribution des fréquences de cette série df=D$nbenf/sum(D$nbenf) > df [1] 0.075 0.050 0.125 0.075 0.150 0.075 0.125 0.125 0.025 0.125 0.050

45 Représenter graphiquement cette distribution. plot(table(D$nbenf),main="diagramme en batons des effectifs") plot(table(D$nbenf),main="polygone des effectifs ", type="b", col=2)

46 plot(table(D$nbenf)/length(D$nbenf),x lab="nombre d'enfants", ylab="frequence")

47

48 Exercice 2 : Au poste de péage, on compte le nombre de voitures se présentant sur une période de 5mn. Sur 100 observations de 5mn, on obtient les résultats suivants:...

49 Construire le diagramme en bâtons et le polygone des fréquences cumulées de la série du nombre de voitures. D1=data.frame(nv=1:12,no=c(2,8,1 4,20,19,15,9,6,2,3,1,1)) ● plot(D1$nv,D1$no,type="h", main="diagramme en batons",xlab="nombre de voitures", ylab="nombre d'observations")

50

51 Polygone des fréquences cumuléees ● fc=cumsum(no) plot(D1$nv,fc,type="l", main="polygone des frequences cumulées",xlab="nombre de voitures", ylab="frequences cumulees")

52

53 Calculer la moyenne et l’écart- type de cette série. (attention il s'agit de moyennes et d'ecart type pondérés) moy=sum(D1$nv*D1$no)/100 [1] 5.07 et=sqrt(sum(0.01*D1$no*(D1$nv- moy)^2)) > et [1] 2.182911

54 Déterminer la médiane, les quartiles et tracer le box-plot. ● s=rep(D1$nv,D1$no);s summary(s) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 4.00 5.00 5.07 6.00 12.00 boxplot(s)

55

56 Etudier la symétrie de la série calcul du moment d'ordre r r=2 mr=(sum(0.01*D1$no*(D1$nv- moy)^r))^(1/r): 2.18 r=3 mr=(sum(0.01*D1$no*(D1$nv- moy)^r))^(1/r) mr [1] 1.944207 r=4 [1] 2.982554

57 Régréssion linéaire simple Sur des données fictives: x=1:100 x=sample(x,30,replace=TRUE) x [1] 62 18 9 67 43 38 57 12 41 29 69 76 77 46 42 75 32 74 6 40 51 88 61 3 38 [26] 71 81 76 94 34 y=3+7*x+rnorm(30,0,100) Y [1] 340.61710 254.86969 54.52298 463.78335 379.30676 177.27873 555.98297 [8] -13.48922 273.11081 187.46739 439.59869 380.92303 537.40362 414.12641 [15] 299.09269 494.05965 415.9

58 plot(x,y)

59 res.reg=lm(y~x); Call: lm(formula = y ~ x) Coefficients: (Intercept) x 13.22 6.71 Droite de régression: y=6,71 *x +13.22

60 plot(x,y); abline(res.reg)

61 summary(res.reg) Residuals: Min 1Q Median 3Q Max -142.29 -58.64 -17.17 63.33 187.99 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 13.2213 37.0548 0.357 0.724 x 6.7105 0.6587 10.188 6.37e-11 Residual standard error: 90.65 on 28 degrees of freedom Multiple R-Squared: 0.7875, Adjusted R-squared: 0.78

62 Plus sophistiquée... La croissance d ’une bactérie (par jour), modélisé par N=N0 e^kt t=2:12; N=c(55,90,135,245,403,665,1100,1810,3000,4450,7350); Le modèle est le suivant;

63 t=c(2:12);N=c(55,90,135,245,403,665,1100,1810,3000,4450,7350) T=data.frame(t,N,y=log(N));T; > T t N y t N y 1 2 55 4.007333 2 3 90 4.499810 3 4 135 4.905275 4 5 245 5.501258…..

64 Calcul de moyenne et écart-type apply(T,2,mean); t N y 7.000000 1754.818182 6.475094 apply(T,2,sd); t N y 3.316625 2326.625317 1.640357

65 plot(T$t,T$N)

66 plot(T$t,T$y)

67 droite de regression ll=lm(y~t,data=T);ll; Call: lm(formula = y ~ t, data = T) Coefficients: (Intercept) t 3.0142 0.4944

68 abline(ll);

69 summary(ll) Call: lm(formula = y ~ t, data = T) Residuals: Min 1Q Median 3Q Max -0.08656 -0.02117 0.01500 0.02912 0.04802 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.014162 0.032947 91.49 1.13e-14 *** t 0.494419 0.004289 115.27 1.41e-15 *** --- Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

70 summary(ll) suite Residual standard error: 0.04499 on 9 degrees of freedom Multiple R-Squared: 0.9993, Adjusted R-squared: 0.9992 F-statistic: 1.329e+04 on 1 and 9 DF, p-value: 1.413e-15

71 Régression linéaire multiple Exemples:

72 Les tests statistiques les test du chi-deux

73 La fonction chisq.test(x,y,logical,p) Premier exemple: on lance un dé 300 fois et on obtient le résultat suivant: 1 2 3 4 5 6 43 49 56 45 66 41 x=c(43, 49, 56, 45, 66, 41) prob=rep(1/6,6) chisq.test(x,p=prob) Chi-squared test for given probabilities data: x X-squared = 8.96, df = 5, p-value = 0.1107

74 Second exemple sur un tableau de contingence Exemple d ’un tableau donnant la cécité en fonction du sexe: tab=matrix(c(442,514,38,6),nrow=2,byrow=TRUE) colnames(tab)=c("homme","femme") rownames(tab)=c("voyant","aveugle") homme femme voyant 442 514 aveugle 38 6

75 X2=chisq.test(tab,correct=FALSE) On teste s ’il y a une relation entre sexe et cécité (l ’hypothèse par défaut est celle d ’indépendance) Pearson's Chi-squared test data: tab X-squared = 27.1387, df = 1, p-value = 1.894e-07

76 attributes(x2) $names [1] "statistic" "parameter" "p.value" "method" "data.name" "observed" [7] "expected" "residuals" $class [1] "htest » par exemple:

77 x2$expected homme femme voyant 458.88 497.12 aveugle 21.12 22.88 valeurs attendues sous hypothèse d ’indépendance x2$residuals homme femme voyant -0.787994 0.7570801 aveugle 3.673039 -3.5289413 sum(x2$residuals^2) 27.13874 la somme des carrés des résidus est la valeur du chi-deux

78 Soit le tableau de contingence suivant: roux blond brun bleu 13 20 7 marron 24 10 18 le test du chi-deux d ’indépendance s ’effectue ainsi: chisq.test(m)

79 Pearson's Chi-squared test data: m X-squared = 10.0494, df = 2, p-value = 0.006574 on teste l ’hypothèse nulle suivante « H0:il y a indépendance entre la couleur des yeux et celle des cheveux »

80 Test sur une moyenne: prop.test() Pour comparer deux ou plusieurs proportions sur des échantillons de grande taille: prop.test(x, n, p = NULL,alternative = c("two.sided", "less", "greater"), conf.level = 0.95, correct = TRUE)

81 Classification

82 La fonction kmeans() Méthodes de type « nuées dynamiques »: on suppose que les individus sont des points de R^n muni de la distance euclidienne On recherche un partitionnement des individus en classes Variance des classes minimale (classes homogènes) Variance entre classes maximale Rappel : théorème de Huygens: la somme de l ’inertie interclasse et de l ’inertie intraclasse est constante (inertie = moyenne des carrés des distances au centre de gravité)

83 suite Exemple en dimension 2 sur le dataframe D PROB LECT CARR OPER SYNO PFB SUITE ANAL D70 T M s 1 4.52 1.92 0.93 1.94 1.20 0.08 2.05 1.99 1.37 16.01 1.78 1.21 2 1.50 0.77 0.43 -0.32 1.20 1.26 2.05 1.99 2.30 11.19 1.24 0.85 3 1.77 0.19 1.94 1.19 1.20 0.59 2.05 1.50 1.37 11.80 1.31 0.61 4 1.22 0.19 2.19 0.43 1.20 0.92 2.05 0.51 0.75 9.10 1.01 0.76 5 1.22 1.92 -0.83 1.56 0.64 0.08 1.76 1.01 0.44 7.82 0.87 0.88 6 0.68 0.39 -0.83 -0.32 1.20 -1.77 1.76 0.76 0.18 1.70 0.19 1.08 7 2.05 0.77 0.68 0.43 0.36 1.60 1.76 0.51 1.06 9.23 1.03 0.63 8 0.42 0.39 -0.57 1.56 0.36 -0.93 1.76 0.26 0.44 2.86 0.32 0.90 9 -0.15 -0.19 1.44 -0.32 0.64 0.76 1.76 0.02 1.37 5.34 0.59 0.79 10 -0.42 -0.19 -0.57 1.19 0.64 E=D[,c(1,2)] cl <- kmeans(E, 4, 20) (donne 4 sous-nuages) plot(E, col = cl$cluster) (tracé pour un objet de type résultat de la fct kmeans) points(cl$centers, col = 1:4, pch = 8)

84

85 Autre exemple data(airquality); a=airquality [,3:4] cl=kmeans(a,3,20) plot(a, col = cl$cluster) ;points(cl$centers, col = 1:4, pch = 8)

86

87 le résultat de la fct kmeans est une liste contenant :les composants suivants: cluster: un vecteur d’entiers indiquant la partition ( le sous-nuage) à laquelle est affecté chaque point centers: la matrice des centres des sous-nuages withinss: The within-cluster sum of squares for each cluster. size: le nombre de points dans chaque sous-nuage

88 La fonction hclust()

89 La fonction cutree()


Télécharger ppt "Cours 5 Boucles, Programmation de base. Boucles et Tests for( in ) { } while( ) { } Exemple: x=rep(5,0) for (i in 1:5) x[i]=2*i+1 Les fonctions du type."

Présentations similaires


Annonces Google