1/28/2013 1 Compléments sur R Compléments sur R Faculté de Médecine Vétérinaire 12/12/12 F. Farnir, L. Massart Question 1 Question 1 « Au niveau du cours sur R, j'aimerai revoir les formules exactes et leurs fonctions et non des formules +- vagues comme dans les dias; les différences entre 2 formules qui peuvent ce ressembler. Si c'est possible ce serai super ». ◦ sic… Réponse 1 Réponse 1 Pas de « formules », mais bien des ◦ définitions de variables ◦ expressions ◦ boucles ◦ définitions de fonctions Réponse 1 Réponse 1 Définitions de variables ◦ D’autres types sont utiles (« data frame » ,…) ◦ D’autres possibilités de création existent… # Scalaire et numérique nb_students<-380 # Scalaire et caractère grade<-"1BMV" # Tableau (vecteurs ou matrices) cours<-c("bio","chimie","physique","stat","seminaire") v<-1:10 v [1] 1 2 3 4 5 6 7 8 9 10 c(rep(1,5),rep(2,5)) [1] 1 1 1 1 1 2 2 2 2 2
9
Embed
Question 1 Compléments sur R - uliege.be · 1/28/2013 1 Compléments sur R Faculté de Médecine Vétérinaire 12/12/12 F. Farnir, L. Massart Question 1 «Au niveau du cours sur
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1/28/2013
1
Compléments sur RCompléments sur R
Faculté de Médecine Vétérinaire
12/12/12
F. Farnir, L. Massart
Question 1Question 1
� « Au niveau du cours sur R, j'aimerai
revoir les formules exactes et leurs
fonctions et non des formules +- vagues
comme dans les dias; les différences
entre 2 formules qui peuvent ce
ressembler. Si c'est possible ce serai
super ».
◦ sic…
Réponse 1Réponse 1
� Pas de « formules », mais bien des
◦ définitions de variables
◦ expressions
◦ boucles
◦ définitions de fonctions
Réponse 1Réponse 1
� Définitions de variables
◦ D’autres types sont utiles (« data frame » ,…)
◦ D’autres possibilités de création existent…
# Scalaire et numériquenb_students<-380# Scalaire et caractèregrade<-"1BMV"# Tableau (vecteurs ou matrices)cours<-c("bio","chimie","physique","stat","seminaire")
}# test de χ² simple: utilisations de la fonctiono<-c(50,30)a<-c(40,40)test_chi2(o,a)[1] 0.02534732x<-c(100,200,300)y<-c(120,195,285)test_chi2(x,y)[1] 0.1193725
1/28/2013
3
Question 2Question 2
� « Alors en ce qui me concerne, j'ai du mal à distinguer les différentes distributions binomiales (rbinom, qbinom, ...) et à quel moment les utiliser.Ce serait bien aussi si on pouvait revoir les commandes "générales" et à quel moment les utiliser (par exemple sélectionner un chiffre en particulierdans une ligne avec "x[]", les distributions binomiales, les fonctions comme seq(), ...), mais également comment poser une condition(je me rappelle que j'avais été bloquée à cet exercice : "8. Créer le vecteur w tel que w contienne les valeurs positives de z à l'aide des deux méthodes suivantes : la première en utilisant le vecteur c(FALSE,FALSE,TRUE,TRUE,TRUE), la seconde en utilisant la condition z > 0« )
Réponse 2.1Réponse 2.1
� Fonctions binomiales [r ~ B(n,p)]
◦ qbinom(q,size=n,prob=p)
� donne la valeur de r correspondant à une probacumulée q
◦ pbinom(r,size=n,prob=p)
� donne la proba cumulée de r
◦ dbinom(r, size=n,prob=p)
� donne la proba de r
◦ rbinom(m, size=n,prob=p)
� tire m valeurs de r au hasard
Réponse 2.1Réponse 2.1
� Commençons par dbinom
# Représentons la dist. binomiale pour n = 50 et p = 0.40n<-50p<-0.4x<-0:ny<-dbinom(x,prob=p,size=n)plot(x,y,main="Binomiale(n=50,p=0.40)",type="h")
Réponse 2.1Réponse 2.1
� Commençons par dbinom
1/28/2013
4
Réponse 2.1Réponse 2.1
� Ensuite, pbinom
# Voyons la binomiale cumulée pour n = 50 et p = 0.40n<-50p<-0.4x<-0:ny<-pbinom(x,prob=p,size=n)plot(x,y,main="Binomiale(n=50,p=0.40)",type="h")
Réponse 2.1Réponse 2.1
� Ensuite, pbinom
Réponse 2.1Réponse 2.1
� Ensuite, qbinom
# Calcul de r pour une proba cumulée de 0.3n<-50p<-0.4x<-0:nq<-0.3qbinom(q,prob=p,size=n)[1] 18plot(x,y,main="Binomiale(n=50,p=0.40)",type="h")abline(h=q,col="red")
Réponse 2.1Réponse 2.1
� Ensuite, qbinom
1/28/2013
5
Réponse 2.1Réponse 2.1
� Enfin, rbinom
# Echantillonnage dans la distributionn<-50p<-0.4size<-1000ech<-rbinom(size,prob=p,size=n)hist(ech,main="B(n=50,p=0.40) empirique",col="blue")
Réponse 2.1Réponse 2.1
� Enfin, rbinom
Réponse 2.1Réponse 2.1
� Signalons encore que:
◦ Le même genre de concepts existe pour
beaucoup d’autres distributions:
<d|p|q|r> <distrib>(<paramètres>)
� le préfixe d, p, q ou r a la même signification que
pour la binomiale
� <distrib> est une distribution
(binom, norm, unif, chisq, t, f, pois, hyper…)
� les <paramètres> dépendent de la distribution
choisie (voir l’aide)
Réponse 2.1Réponse 2.1
� Exemple: illustrer le fait que la variance
des moyennes d’échantillons extraits
d’une distribution normale de variance σ²
vaut σ²/n
# Taille d’échantillon (par exemple)n<-25# Paramètres de la distribution normale (par exemple)mu<-100sigma<-10# Initialisation du vecteur des moyennes d’échantillonsxbar<-rep(0,1000)# Boucle sur les échantillonsfor (i in 1:1000) {
xbar[i]<-mean(rnorm(n,mu,sigma))}# Variance des moyennes (attendu: 10²/25 = 4)var(xbar)[1] 4.503911
1/28/2013
6
Réponse 2.2Réponse 2.2
� Utilisation de « sous-structures »
◦ Il est possible de n’utiliser qu’une partie d’une
structure (vecteur, matrice) lors d’une
opération# Exemple 1: utilisation d’une partie de matricem<-matrix(1:12,nr=3)m
# Exemple 3: utilisation d’une partie d’un vecteurmu=170std=10taille<-rnorm(1000,mean=mu,sd=std)seuil<-mu+2*stdgrands<-taille[taille>seuil]length(grands)[1] 21
Question 3Question 3
� Suite à ton message, je pensais que M.Farniraurait pu nous faire un résumé des fonctions de R (comment elles s'écrivent, à quoi elles servent...) parce que comme l'aide est en anglais et que ce n'est pas toujours forcément évident de comprendre les exemples, j'ai un peu de mal à appliquer les fonctions.Par exemple, pour faire une boucle "for", j'ai eu du mal à comprendre où il fallait mettre les "{ }" ou si il fallait mettre des virgules ou des espaces entre chaque terme de la boucle.
Réponse 3Réponse 3
� On distingue 2 types de fonctions
◦ Les « fonctions internes » (c-à-d. déjà programmée dans un des « packages » constituant R), directement utilisables
◦ Les « fonctions utilisateurs », créées par l’utilisateur pour répondre à ses besoins.
� La liste des fonctions internes est très longue, nous en avons déjà rencontré plusieurs
◦ p.e. rnorm, sum, mean, pchisq, …
1/28/2013
7
Réponse 3Réponse 3
� « Fonction utilisateur »
◦ définie par l’utilisateur selon le schéma:
<nom> <- function(<param_1>,…,<param_p>)
{ <instruction_1>; …; <instruction_n> }
� <nom> est un nom choisi (+/-) arbitrairement
� <param_i> est un paramètre de la fonction (il peut
y en avoir 0, 1 ou plusieurs)
� <instruction_j> est une expression R (il peut y en
avoir 0 (!), 1 ou plusieurs)
Réponse 3Réponse 3
� « Exemple simple »
# Calcul d’une somme de carrés# On fournit le vecteur x# La fonction (nommée "sc") retourne Σxi²sc<-function(x) {
# Calcul de l’intégrale de f(x) entre x=a et x=bintegrale<-function(f,a,b) {
x<-seq(a,b,0.001)fx<-f(x)integ<-0for (i in 2:length(x)) {
integ<-integ+0.0005*(fx[i]+fx[i-1])}integ
}# Utilisationfx<-function(x) { x**2+2*x+1 }integrale(fx,0,2)[1] 8.66667# Vérification: x³/3+x²+x entre x=2 et x=0# vaut: (2³/3+2²+2) = 26/3 = 8.66667
1/28/2013
8
Question 4Question 4
� Pour le cours supplémentaire qui aura lieu le 12 décembre, je souhaiterai revoir les notions de bases de la programmation de R ainsi que des exemples.
� Ok ?
Question 4Question 4
� J'aimerais bien que Farnir nous explique avec plus de détails l'exercice 3 et ses sous-points de la séance 2-3:
Représenter graphiquement la fonction f(x,y) = 10*sin((x²+y²)1/2)/ (x²+y²)1/2
Question 4Question 4# Générer les valeurs de x et de y de -10 à +10 # (truc: penser à seq)x<-seq(-10,10,0.2)y<-seq(-10,10,0.2)# Définir une fonction calculant f(x,y)f<-function(a,b) {
v<-a**2+b**2if (v[1]==0) {
1} else {
10*sin(sqrt(v))/sqrt(v)}
}# Calculer les valeurs de f pour toutes les combinaisons# de x et de yz<-outer(x,y,f)dim(z)[1] 201 201
Question 4Question 4# Générer un graphique avec la fonction persp(x,y,z)persp(x,y,z)# Ajouter des options# theta=30persp(x,y,z,theta=30)# phi=30persp(x,y,z,theta=30,phi=30)# expand=0.5persp(x,y,z,theta=30,phi=30,expand=0.5)# col="lightblue"persp(x,y,z,theta=30,phi=30,expand=0.5,col="lightblue")# shade=0.25persp(x,y,z,theta=30,phi=30,expand=0.5,col="lightblue",shade=0.25)# ticktype="detailed"persp(x,y,z,theta=30,phi=30,expand=0.5,col="lightblue",shade=0.25,ticktype="detailed")