## Define the directory for this course
courseDir <- file.path("~", "dubii20", "stat-R", "session2")
print(courseDir) ## Check the result
## Create the directory with the recursive option
dir.create(path = courseDir,
recursive = TRUE, ## Create the parent directories
showWarnings = FALSE) ## Don't shout it already exists
## Go to this directory
setwd(courseDir)
getwd() ## Chec
Représentez trois points en positions (x, y) : (1, 2), (2, 2) et (3, 3).
main
initial_graph.jpeg
avec la fonction jpeg() suivie de dev.off()Recommencez ce graphique en personnalisant l’affichage avec les options ou fonctions suivantes pas à pas (faites un nouveau graphique à chaque étape en ajoutant le nouveau paramètre) :
xlim
et ylim
: délimitez l’affichage des échelles des deux axes entre 0 et 4cex
: doublez la taille des pointspch
: donnez d’abord une forme de cercle plein à chaque point ;Recommencez ensuite en spécifiant une forme différente pour chaque point :
col
: mettez tous les points en gris puis donnez une couleur différente à chaque point :
bg
en plus)lwd
: doublez la largeur des traits tracés (ici des points)bty
: retirez la cadre entourant le graphique pour ne conserver que les axesxlab
et ylab
= nommez les axes Axe des abscisses
et Axe Y
.
Ajoutez un 4ème point sous forme d’un cercle plein gris aux coordonnées (1.5, 3) avec la fonction points()
Ajoutez une ligne pointillée de couleur verte en position horizontale à l’ordonnée 1 avec la fonction abline() et en particulier l’option lty
col
, pt.bg
, pt.lwd
et pt.cex
: pour respecter les couleurs, formes des points que vous mettrez à la taille 1.5legend
: pour nommer vos points A
, B
, C
et D
title
: pour donner un nom Mes 4 points
à la légendehoriz
: pour positionner les points côte à côte plutôt que les uns en dessous des autresMon graphique personnalisé
à votre figurejpeg()
pdf()
dev.off()
plot()
palette()
grep()
points()
abline()
legend()
title()
En cas d’urgence poussez sur Code pour révéler la solution.
png
2
plot(c(1,2,3), c(2,2,3),
cex = 2, pch = 16,
xlim = c(0,4), ylim = c(0,4))# ou pch=19 ou 20 selon la taille choisie
[1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"
index_grey <- grep("gray", palette())#gray=grey dans R!!!
plot(c(1,2,3), c(2,2,3),
cex = 2, pch = c(3,6,18),
xlim = c(0,4), ylim = c(0,4),
col = index_grey)# vous pouvez ecrire col="gray" ou col=8 ou col=grep("gray", palette()) indifferemment
plot(c(1,2,3), c(2,2,3),
cex = 2, pch = c(3,6,23),
xlim = c(0,4), ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan")
plot(c(1,2,3), c(2,2,3),
cex = 2, pch = c(3,6,23),
xlim = c(0,4), ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan",
lwd = 2)
plot(c(1,2,3), c(2,2,3),
cex = 2, pch = c(3,6,23),
xlim = c(0,4), ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan", lwd = 2, bty = "n")
# et enfin, cette fois-ci avec le nom des axes et en ecrivant chaque argument l'un en dessous de l'autre pour plus de lisibilite (sans oublier la virgule entre chaque!!!)
plot(c(1,2,3), c(2,2,3),
cex = 2,
pch = c(3,6,23),
xlim = c(0,4),
ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan",
lwd = 2,
bty = "n",
xlab = "Axe des abcisses",
ylab = "Axe Y")
#3.graphique personnalise suite...
points(1.5, 3, pch = 16, col = "gray", cex = 2) # points() est une fonction graphique secondaire
#4.graphique personnalise suite...
abline(h = 1, col = "green3", lty = 2) # abline() est aussi une fonction secondaire
#5.graphique personnalise suite...
legend("topright",
legend = c("A","B","C","D"),
col = c("red", "blue", "magenta", "gray"),
pch = c(3,6,23, 16),
pt.bg = "cyan",
pt.cex = 1.5,
pt.lwd = 1.5,
title = "mes 4 points",
bty = "n",
horiz = T)
#6.graphique personnalise suite...
title("Mon graphique personnalise")
# ici j'ai utilise la fonction secondaire title() pour ajouter un titre, mais j'aurais pu utiliser l'argument "main" lors de la fonction plot:
# plot(c(1,2,3), c(2,2,3),
# cex = 2, pch = c(3,6,23),
# xlim = c(0,4), ylim = c(0,4),
# col = c("red", "blue", "magenta"),
# bg = "cyan",
# lwd = 2,
# bty = "n",
# xlab = "Axe des abcisses",
# ylab = "Axe Y",
# main="Mon graphique personnalise")
#7.sauvegarder le graphique personnalise au format pdf
pdf("custom_graph.pdf")
plot(c(1,2,3), c(2,2,3),
cex = 2,
pch = c(3,6,23),
xlim = c(0,4),
ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan",
lwd = 2,
bty = "n",
xlab = "Axe des abcisses",
ylab = "Axe Y",
main = "Mon graphique personnalis?")
points(1.5, 3, pch = 16, col = "gray", cex = 2)
abline(h = 1, col = "green3", lty = 2)
legend("topright",
legend = c("A","B","C","D"),
col = c("red", "blue", "magenta", "gray"),
pch = c(3,6,23, 16),
pt.bg = "cyan",
pt.cex = 1.5,
pt.lwd = 1.5,
title = "mes 4 points",
bty = "n",
horiz = T)
dev.off()
png
2
Jouez avec l’affichage des axes
plot(c(1,2,3), c(2,2,3),
cex = 2,
pch = c(3,6,23),
xlim = c(0,4),
ylim = c(0,4),
col = c("red", "blue", "magenta"),
bg = "cyan",
lwd = 2,
bty = "n",
xlab = "Axe des abcisses",
ylab = "Axe Y",
xaxt = "n",
yaxt = "n" )
axis(1, at = 0:4,labels = F )
mtext(0:4,side = 1,at = 0:4, line = 1,col = "blue")
axis(2, at = 0:4, tcl = -0.2, cex = 0.7, labels = F )
mtext(0:4,side = 2,at = 0:4, line = 1, cex = 0.7)
abline(h = 1, col = "green3", lty = 2)
legend("topright",
legend = c("A","B","C","D"),
col = c("red", "blue", "magenta", "gray"),
pch = c(3,6,23, 16),
pt.bg = "cyan",
pt.cex = 1.5,
pt.lwd = 1.5,
title = "mes 4 points",
bty = "n",
horiz = T)
title("Mon graphique personnalise")
motorisation.txt
dans votre repertoire de travail. Le fichier est egalement present dans: /shared/projects/dubii2020/data/module3/seance2/
read.table()
table()
pie()
barplot()
par()
avec l’agument mfrow
# avant de lire ce fichier et de l'assigner dans un objet R, ouvrez le dans Unix ou avec un editeur de texte pour voir s'il y a une en-tete, combien il contient de lignes, de colonnes et quel est leur separateur (espace, tabulation, virgule, point virgule, etc...)
# ici motorisation.txt est un fichier texte de 22 lignes, avec une seule colonne (donc vous pouvez garder le separateur de champs "espace" par defaut dans la commande read.table qui suit), et sans en-tete (donc il faut le specifier avec l'argument header sinon votre premiere valeur serait lue comme un nom de colonne par defaut)
motorisation <- read.table("/shared/projects/dubii2020/data/module3/seance2/motorisation.txt", header = F, stringsAsFactors = F) # nommez votre objet R present dans votre session R sans extension! Attention, n'oubliez pas l'argument stringsAsFactors=F sinon vous factorisez la variable
# Alternativement, si le fichier motorisation n'est pas dans votre repertoire de travail, donnez son chemin absolu ou relatif a la place de myPath dans la commande ci-dessous:
#motorisation <- read.table("myPath/motorisation.txt",header=F, stringAsFactors=F)
str(motorisation)# toujours verifier la structure des objets importes et se demander si elle est conforme a ce que vous souhaitez!
'data.frame': 22 obs. of 1 variable:
$ V1: chr "Hybride" "Diesel" "Diesel" "Essence" ...
Essayez dans une premier temps de faire chaque graphique independamment avec les bonnes commandes avant de les afficher sur une meme fenetre graphique
Note: lorsque vous utilisez Rstudio: une erreur peur se produire si votre fenetre graphique est trop petite, compte tenu des marges et de la taille de votre ecran-> pensez alors a redimensionner la fenetre graphique avant de lancer vos commandes graphiques
N’hesitez pas à decomposer la commande ci-dessus élement par élement pour bien la comprendre en tapant successivement:
? pie
table(motorisation$type_de_motorisation) #cette commande vous retourne un tableau de contingence comptant le nombre d'observationns de chaque valeur de la variable "type de motorisation". C'est ce qui est le plus pratique! Il s'agit d'un objet R a une seule dimension.
Diesel Electrique Essence Hybride
9 1 7 5
# Si besoin, vous pouvez extraire les noms attribues a ces valeurs avec la commande
names(table(motorisation$type_de_motorisation))
[1] "Diesel" "Electrique" "Essence" "Hybride"
[1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"
[1] "green3" "blue" "magenta" "orange"
Alternativement: vous pouviez utiliser la commande pie sans utiliser de tableau de contingence en donnant comme argument x un vecteur avec les comptes de chaque valeur comme ci-dessous
pie(c(9,1,7,5), labels = c("Diesel","Electrique", "Essence", "Hybride"),
col = c("green3","blue","magenta","orange"))
# vous pouvez ajouter l'argument clocwise=T pour changer l'orientation des parts
# ici, j'ai ecrit labels=c("Diesel","Electrique", "Essence", "Hybride") mais on aurait pu ecrire egalement labels = names(table(motorisation$type_de_motorisation)) ou labels = sort(unique(motorisation$type_de_motorisation) car unique() retourne chaque occurence/valeur possible de la variable et la fonction sort() les trie par ordre alphanumerique
Enfin, si vous voulez afficher les parts du camembert par ordre croissant, vous pouvez appliquer la fonction sort()
sur la valeur obtenue par la commande (table(motorisation$type_de_motorisation))
barplot(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation),
col = c("green3","blue","magenta","orange"))
N’hesitez pas a aggrandir votre fenetre d’affichage pour voir les noms sous les batons…ou reduisez leur taille en utilisant l’argument cex.names:
barplot(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation),
cex.names = 0.8,
col = c("green3","blue","magenta","orange"))
Il est aussi possible d’utiliser barplot avec une matrice comme argument x. Dans ce cas, par defaut avec l’argument beside=F, les elements du diagramme en baton seront empilés.
barplot(matrix(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation)),
col = c("green3","blue","magenta","orange"),
legend.text = unique(sort(motorisation$type_de_motorisation)),
args.legend = list(x = "topright", cex = 0.8, bty = "n"),
width = 1,
xlim = c(0,5) )
Si vous voulez les afficher du plus grand au plus petit effectif, ajouter sort()
en precisant decreasing=T
barplot(matrix(sort(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation),decreasing = T)),
col = c("green3","blue","magenta","orange"),
legend.text = unique(sort(motorisation$type_de_motorisation)),
args.legend = list(x = "topright", cex = 0.8, bty = "n"),
width = 1,
xlim = c(0,5) )
Version attendue dans l’exrecice:
opar <- par()
par(mfrow = c(1,2))
pie(table(motorisation$type_de_motorisation), col = c("green3","blue","magenta","orange"))
barplot(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation),col = c("green3","blue","magenta","orange"))
Version finale pour aller plus loin en integrant des alternatives decrites pour chaque figure et avec les bonnes regles d’affichage du script R:
opar <- par()
par(mfrow = c(1,2))
pie(sort(table(motorisation$type_de_motorisation)),
col = c("green3","blue","magenta","orange"),
clockwise = T)
barplot(matrix(sort(table(motorisation$type_de_motorisation)/length(motorisation$type_de_motorisation),
decreasing = T)),
col = c("orange","magenta","blue","green3"),
legend.text = names(sort(table(motorisation$type_de_motorisation)
,decreasing = T)),
args.legend = list(x = "topright", cex = 0.8, bty = "n"),
width = 1,
xlim = c(0,5))
Vous noterez qu’il est prefable de visualiser les donnees qualitatives, comme ici le type de motorisation, au moyen d’un diagramme en batons. Cela vous ai rappele en ‘Note’ dans la fenetre d’aide de la fonction pie!
rnorm()
hist()
avec l’argument breaks
boxplot
par()
avec l’argument mfrow
myrandomdata <- rnorm(100, mean = 10, sd = 5)# bien penser a assigner le resultat de votre tirage dans un objet, sinon, les valeurs changent a chaque fois que vous effectuez un tirage avec la commande rnorm!
# je ne vous detaille pas ici chaque graphique, je les supperpose tout de suite
opar <- par()
par(mfrow = c(4,1))
hist(myrandomdata, breaks = 5)
hist(myrandomdata, breaks = 50)
hist(myrandomdata, breaks = 100)
boxplot(myrandomdata, horizontal = T)
Si \(X\) suit une loi normale de moyenne 10 et d’écart type 55, quelle est la probabilité \(P(7 \le X \le 15)\) ?
Si \(X\) suit une loi normale de moyenne \(\mu=10\) et d’écart type \(\sigma=55\), quelle est la valeur de \(k\) telle que \(P( X \ld k) = 0.67\) ?
Soit un test de Chi2 à 3 degrés de libertés avec une valeur de la statistique de `Chi2=16.26$. Quelle est la p-value de ce test ?
pnorm()
qnorm()
pchisq
[1] 0.5670916
[1] 12.19957
[1] 0.09962354
data()
par()
avec les arguments mfrow
et `mar``plot()
hist()
lines()
boxplot()
abline()
lm()
title()
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
opar <- par()
par(mfrow = c(2,2),
mar = c(4.1, 2.1, 5.1, 2.1))
stripchart(airquality$Temp~airquality$Month,
pch = 22,
xlab = "Temperature", ylab = "Month",
main = "A. stripchart of temperatures",
col = 6)
hist(airquality$Temp,
xlab = "Temp",
freq = FALSE,
main = "B. histogram of temperatures")
lines(density(airquality$Tem), col = 5)
boxplot(airquality$Ozone~airquality$Month,
names = c("May", "June", "July", "August", "September"),
cex.axis = 0.7,
col = 4,
pch = "'",
main = "C. boxplot of ozon level per month")
plot(airquality$Ozone~airquality$Wind,
xlab = "Wind",
ylab = "Ozone",
xlim = c(5,14),
pch = "'",
main = "D. ozone level versus wind")
abline(lm(airquality$Ozone~airquality$Wind),
col = 2, lty = 2, lwd = 1.5)
title("Graphs from the airquality dataset", outer = T, line = -1)
For the boxplots, you could also have generated a factor with names to each level:
fmonth <- factor(airquality$Month,levels = 5:9)
levels(fmonth) <- c("May","June","July","August","September")
boxplot(airquality$Ozone ~ fmonth ,
col = "blue",
ylab = "Ozone",
main = "C. boxplot of ozon level per month")
IMPORTANT NOTE ON NAMES OF VARIABLES:* Here for boxplot as for most R functions, you may enter the argument data="", and then just put the name of the variables without repeating the name of the dataframe:
Alternatively, you may use attach()
to access to the variables of the dataset directly by their name, then enter your commands, and then detach()
once finsihed
Importez dans R le fichier poisson.txt
R. Il s’agit d’un jeu de données de l’espèce de poisson “grand corégone” du lac Nathalie dans le territoire de la baie James (province du Québec) (d’après B. Scherrer). En 1977, Dumont a cherché les relations existantes entre le potentiel reproducteur (nombre d’œufs) de cette espèce de poisson (grand Corégone) et plusieurs caractères morphologiques. L’étude a été menée afin de déterminer une éventuelle relation entre le nombre d’œufs, révélant le potentiel reproducteur des poissons, et les variables morphologiques caractérisant ces poissons.
a. Identifier les variables et le nombre d’observations de l’échantillon.
**Fonctions recommandées :**
- `read.table()`
- `head()`
- `dim()`
- `str()`
- `names()`
coregone <- read.table("/shared/projects/dubii2020/data/module3/seance2/poisson.txt", stringsAsFactors=F, header=T)
str(coregone)
'data.frame': 41 obs. of 5 variables:
$ longueur_mm : int 420 442 397 421 464 436 424 440 420 421 ...
$ poids_total_g : int 785 850 655 790 965 880 840 1030 770 890 ...
$ poids_gonades_mg: num 74.1 54.5 49.6 71.6 69.4 ...
$ age_annee : int 12 10 9 9 11 9 8 12 10 10 ...
$ oeufs_nombre : int 10676 9461 8328 10281 14028 4984 13697 17206 13485 14055 ...
Calculer la moyenne, la variance et l’écart-type de chaque variable aléatoire.
Fonctions recommandéesmean()
var()
sd()
apply()
summary()
longueur_mm poids_total_g poids_gonades_mg age_annee oeufs_nombre
Min. :397.0 Min. : 655.0 Min. : 31.30 Min. : 8.00 Min. : 4984
1st Qu.:421.0 1st Qu.: 825.0 1st Qu.: 77.70 1st Qu.:10.00 1st Qu.:13139
Median :434.0 Median : 855.0 Median : 97.70 Median :10.00 Median :14606
Mean :435.3 Mean : 901.6 Mean : 92.84 Mean :10.39 Mean :15071
3rd Qu.:443.0 3rd Qu.: 975.0 3rd Qu.:101.90 3rd Qu.:11.00 3rd Qu.:16950
Max. :487.0 Max. :1310.0 Max. :170.30 Max. :13.00 Max. :25834
longueur_mm poids_total_g poids_gonades_mg age_annee oeufs_nombre
435.29268 901.58537 92.84390 10.39024 15070.75610
longueur_mm poids_total_g poids_gonades_mg age_annee oeufs_nombre
19.755055 141.264110 25.247169 1.180636 4173.765062
Réaliser les représentations des distributions de chaque variable aléatoire.
Fonctions à utiliserhist()
par(mfrow = c(-,-))
curve()
Ces variables vous semblent-elles distribuées selon une loi Normale ? Pour le vérifier, superposez sur chaque histogramme les courbes de densité des lois normales correspondantes (les moyennes et les variances sont estimées à partir des données de l’échantillon). Vous pouvez tracer par superposition la loi normale de même moyenne et écart type sur chaque histogramme. Vous pouvez également tracer le qqplot pour comparer la distribution de chaque variable à celle d’une loi normale. Enfin, vous pouvez tester l’hypothèse nulle de la normalité par un test de Shapiro.
Fonctions à utilisercurve()
dnorm()
qqplot()
qqline()
##histogrammes avec densite des donnees en rouge et loi normale supperposee en cyan
opar <- par()
par(mfrow = c(3, 2))
hist(coregone$longueur_mm,prob=T,
main = "Histogramme de la longueur totale",
xlab = colnames(coregone)[1],
ylab = "Densit?")
lines(density(coregone$longueur_mm),col="red" )
curve(dnorm(x,mean(coregone$longueur_mm), sd(coregone$longueur_mm)), col="cyan", add=T)
hist(coregone$poids_g,prob=T,
main = "Histogramme du poids",
xlab = colnames(coregone)[2],
ylab = "Densit?", ylim=c(0,0.02))
lines(density(coregone$poids_g), col="red" )
curve(dnorm(x,mean(coregone$poids_g),sd(coregone$poids_g)), col="cyan", add=T)
hist(coregone$poids_gonades_mg,prob=T,
main = "Histogramme du nombre de gonades",
xlab = colnames(coregone)[3],
ylab = "Densit?", ylim=c(0,0.02))
lines(density(coregone$poids_gonades_mg),col="red" )
curve(dnorm(x,mean(coregone$poids_gonades_mg), sd(coregone$poids_gonades_mg)), col="cyan",add=T)
hist(coregone$age_annee,prob=T,
main = "Histogramme de l'age",
xlab = colnames(coregone)[4],
ylab = "Densit?", ylim=c(0,0.4))
lines(density(coregone$age_annee),col="red" )
curve(dnorm(x,mean(coregone$age_annee), sd(coregone$age_annee)), col="cyan",add=T)
hist(coregone$oeufs_nombre,prob=T,
main = "Histogramme du nombre d'oeufs",
xlab = colnames(coregone)[5],
ylab = "Densit?", ylim=c(0,1.4e-04))
lines(density(coregone$oeufs_nombre),col="red" )
curve(dnorm(x,mean(coregone$oeufs_nombre), sd(coregone$oeufs_nombre)),col="cyan",add=T)
par(opar)
Pour note: vous pouvez rechercher la valeur maximale sur l’axe des y en regardant le max de la densite et l’utiliser comme valeur dans l’argument ylim. Pour la distribution normale theorique, la moyenne est aussi le mode donc la valeur Y maximale, il suffit donc de recuperer la valeur Y à cette moyenne donnée par la fonction dnorm()
:
[1] 9.558331e-05
Pour les valeurs de la variable avec max(hist(variable)$density)
reagardez la structure de l’histogramme avec str()
et recuperez le max de la densite:
List of 6
$ breaks : num [1:7] 0 5000 10000 15000 20000 25000 30000
$ counts : int [1:6] 1 2 20 14 3 1
$ density : num [1:6] 4.88e-06 9.76e-06 9.76e-05 6.83e-05 1.46e-05 ...
$ mids : num [1:6] 2500 7500 12500 17500 22500 27500
$ xname : chr "coregone$oeufs_nombre"
$ equidist: logi TRUE
- attr(*, "class")= chr "histogram"
[1] 9.756098e-05
On peut aussi representer des qqplot: comparaison de la distribution des donnees a une distribution connue, ici a celle d’une loi normale
opar <- par()
par(mfrow = c(3, 2))
qqnorm(coregone$longueur_mm,main="QQ Plot Longueur")
qqline(coregone$longueur_mm)
qqnorm(coregone$poids_g,main="QQ Plot Poids")
qqline(coregone$poids_g)
qqnorm(coregone$poids_gonades_mg,main="QQ Plot Gonades")
qqline(coregone$poids_gonades_mg)
qqnorm(coregone$age_annee,main="QQ Plot Age")
qqline(coregone$age_annee)
qqnorm(coregone$oeufs_nombre,main="QQ Plot Oeufs")
qqline(coregone$oeufs_nombre)
par(opar)
Pour aller plus loin, on peut tester la normalite de la distribution avec le test de shapiro:
Shapiro-Wilk normality test
data: coregone$longueur_mm
W = 0.97165, p-value = 0.3896
Shapiro-Wilk normality test
data: coregone$poids_g
W = 0.93983, p-value = 0.031
Shapiro-Wilk normality test
data: coregone$poids_gonades_mg
W = 0.93983, p-value = 0.031
Shapiro-Wilk normality test
data: coregone$age_annee
W = 0.92799, p-value = 0.01239
Shapiro-Wilk normality test
data: coregone$oeufs_nombre
W = 0.96143, p-value = 0.1765
Existe-t-il une différence du nombre d’œufs produits entre les poissons jeunes (âge inférieur à 10 ans) et âgés (âge supérieur ou égal à 10)?
a. Créez une nouvelle variable qualitative pour identifier les deux groupes : les individus `jeunes` et les individus `âgés`
**Fonction à utiliser**
- `which()`
coregone$classe_age <- NA
coregone[which(coregone[,4] <= 10),"classe_age"] <- "jeune"
coregone[which(coregone[,4] > 10),"classe_age"] <- "vieux"
Représentez la distribution de la variable œufs
en fonction de la variable âge
.
boxplot()
stripchart
boxplot(coregone$oeufs_nombre~coregone$classe_age)
stripchart(coregone$oeufs_nombre~coregone$classe_age, col="blue", add=T, vertical=T, pch=20)
Extraction of boxplot data: add argument plot=F -> the boxplot is not displayed but info are provided including for example stats for example:
[,1] [,2]
[1,] 8328.0 10676.0
[2,] 11993.0 13659.0
[3,] 13697.0 16760.5
[4,] 15320.5 19942.0
[5,] 18147.0 23982.0
attr(,"class")
jeune
"integer"
En plus: representation des donnees par age
opar <- par()
par(mfrow=c(2,2))
boxplot(coregone$longueur_mm~coregone$age_annee)
boxplot(coregone$poids_g~coregone$age_annee)
boxplot(coregone$poids_gonades_mg~coregone$age_annee)
boxplot(coregone$oeufs_nombre~coregone$age_annee)
Calculez les moyennes dans chaque groupe du nombre d’œufs
Fonctions à utiliserapply()
mean()
jeune vieux
13721.83 16794.39
# ou par vecteur en deux lignes:
mean(coregone$oeufs_nombre[which(coregone$classe_age == "jeune")]) # ou avec subset au lieu de [which(),]
[1] 13721.83
[1] 16794.39
Existe-t-il une différence entre ces moyennes ?
Fonctions à utilisert.test()
wilcox.test()
Welch Two Sample t-test
data: coregone$oeufs_nombre by coregone$classe_age
t = -2.4862, df = 36.672, p-value = 0.01759
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-5577.3332 -567.7924
sample estimates:
mean in group jeune mean in group vieux
13721.83 16794.39
Wilcoxon rank sum test with continuity correction
data: coregone$oeufs_nombre by coregone$classe_age
W = 124, p-value = 0.0302
alternative hypothesis: true location shift is not equal to 0
Existe-t-il une relation linéaire entre le poids des gonades et le nombre d’oeufs produits ?
Fonctions à utiliserplot()
cor()
lm()
or.test()
plot(coregone$oeufs_nombre ~ coregone$poids_gonades_mg, xlab = "Poids des gonades", ylab = "Nombre d'oeufs",pch = 20, main = "Relation entre le poids des gonades et le nombre d'oeufs")
abline(lm(coregone$oeufs_nombre ~ coregone$poids_gonades_mg),col="red")
Pearson's product-moment correlation
data: coregone$oeufs_nombre and coregone$poids_gonades_mg
t = 9.9292, df = 39, p-value = 3.128e-12
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.7285804 0.9156779
sample estimates:
cor
0.8464914
Call:
lm(formula = coregone$oeufs_nombre ~ coregone$poids_gonades_mg)
Residuals:
Min 1Q Median 3Q Max
-3717 -1772 -244 1221 5605
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2078.30 1354.89 1.534 0.133
coregone$poids_gonades_mg 139.94 14.09 9.929 3.13e-12 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2250 on 39 degrees of freedom
Multiple R-squared: 0.7165, Adjusted R-squared: 0.7093
F-statistic: 98.59 on 1 and 39 DF, p-value: 3.128e-12
**Facultatif :** Vous pouvez ensuite tester l’effet d’autres variables sur la variable `oeufs`.
Les poissons ages ont tendance a pondre plus d’oeufs que les jeunes, ce qui est en relation avec le poids de leurs gonades.