library(tidyverse)
library(mvtnorm)

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 <- 1000; 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.4311   Min.   :-0.2764   1:392  
##  1st Qu.: 0.5830   1st Qu.: 0.8903   2:608  
##  Median : 1.1014   Median : 1.3469          
##  Mean   : 1.1006   Mean   : 1.3633          
##  3rd Qu.: 1.5669   3rd Qu.: 1.8844          
##  Max.   : 3.0218   Max.   : 3.0315
D %>% filter(y==1) %>% count()
##     n
## 1 392
D %>% filter(y==2) %>% count()
##     n
## 1 608
#View(D %>% filter(y==2) %>% sample_n(8))
ggplot(D,aes(x = x1, y= x2)) + geom_point()

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

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

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) :

alt text

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  
##                 
##                 
## 

Exercice :

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.

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")

Données spam

data(spam,package = "kernlab")
#View(spam)