library(tidyverse)
library(mvtnorm)

Simulation et lecture des données

Simulation d’un mélange Gaussian à 2 classes

Exercice

Simuler des données dans \(R^2\) issues d’un mélange de 2 vecteurs gaussien à 2 classes. Pour ce faire, il suffit de simuler une variable \(Y\) qui prend par exemple les valeurs 1 ou 2 avec probabilité \(p_1 = \mathbb{P}(C_1)\) et \(p_2=\mathbb{P}(C_2)\) respectivement. Puis, conditionnellement a la valeur de \(Y\), simuler un vecteur \(X\) qui suit une loi normale en dimension 2 (i.e. si \(Y = j\), \(X \sim N(\mu_j,\Sigma_j)\) pour \(j = 1, 2\)).

n <- 800; p1 <- 0.4; p2 <- 0.6; mu1 <- c(0.5,2); mu2 <- c(1.5,1)
Sigma1 <- diag(c(0.1,0.1)); Sigma2 <- diag(c(0.2,0.2))
y <- sample(c(1,2),size=n,prob=c(p1,p2),replace=TRUE)
y <- sort(y); y<-factor(y); y <- data.frame(y)
n1 <- sum(y==1);n2 <- sum(y==2)
x <- rbind(rmvnorm(n1,mu1,Sigma1),rmvnorm(n2,mu2,Sigma2))
x <- data.frame(x)
D <- cbind(x,y) 
colnames(D) <- c("x1","x2","y") 
summary(D)
##        x1                x2          y      
##  Min.   :-0.3863   Min.   :-0.1987   1:306  
##  1st Qu.: 0.5965   1st Qu.: 0.9008   2:494  
##  Median : 1.1171   Median : 1.4151          
##  Mean   : 1.0918   Mean   : 1.3875          
##  3rd Qu.: 1.5710   3rd Qu.: 1.8804          
##  Max.   : 2.6176   Max.   : 3.0455

Que font les commandes suivantes ? View(D$x1), View(D[,1]), View(D[[1]]), View(D %>% select(x1))

Exercice

  • Que font les commandes suivantes ? View(subset(D,D[,"y"]==1)), View(D %>% filter(y==1))

  • Tracer les deux ensembles de points sur un même graphique. Utiliser les commandes suivantes :

ggplot(D,aes(x = x1,y = x2,color = y)) + geom_point() + labs(title = "Nuage de points")

plot(D[,1:2],type="n",xlab="x1",ylab="x2",main="Nuage de points")
points(subset(D[,c("x1","x2")],D[,"y"]==1),col="red",pch=20)
points(subset(D[,c("x1","x2")],D[,"y"]==2),col="blue",pch=20)

Données Iris

Les données Iris, stockées sous R, sont très célèbres. Elles ont été collectées par Edgar Anderson.

Les variables considérérées sont mesurées sur 150 fleurs (trois espèces d’iris : iris setosa, iris versicolor et iris virginica) :

  • longueur du sépale (Sepal.Length)
  • largeur du sépale (Sepal.Width)
  • longueur du pétale (Petal.Length)
  • largeur du pétale (Petal.Width)
alt text

alt text

Pour afficher les données iris, taper simplement sur la console de R la commande iris.

Exercice :

  • Visualiser les données iris. Afficher les stats descriptives.

  • Considérer les longueurs et la largeurs des pétales et tracer les trois ensembles de points sur un même graphique.

data(iris)
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
iris_B <- iris %>% select(Petal.Length,Petal.Width,Species)
ggplot(iris_B,aes(x = Petal.Length ,y = Petal.Width,color = Species)) + geom_point() + labs(title = "Nuage de points")

Decoupage des données en blocs (Sous- ́echantillons).

D <- iris_B; n <- nrow(D)

p <- 0.8
ntrain <- floor(n*p)

ind <- sample(1:n, ntrain, replace=FALSE); 
Dtrain <- D[ind,] 
Dval <- D[-ind,]

ggplot(Dtrain,aes(x = Petal.Length ,y = Petal.Width,color = Species)) + geom_point() + labs(title = "Nuage de points d'entrainement")

ggplot(Dval,aes(x = Petal.Length ,y = Petal.Width,color = Species)) + geom_point() + labs(title = "Nuage de points de validation")

Expliquer que fait la commande rep(1:K,ceiling(n/K)) et head(which(rep(1:B,ceiling(n/B)) == 1))

B <- 5

ind_Fold <- sample(rep(1:B,ceiling(n/B)),n)

#which(ind_Fold==1); length(which(ind_Fold==1))
#....
# Example :  Pour le premier bloc
Dval  <- D[ind_Fold==1,] 
Dtrain <- D[ind_Fold !=1,]