## Importation des données ozone ```{r} ozone <- read.table("http://factominer.free.fr/missMDA/ozoneNA.csv",header=TRUE,sep=",",row.names=1,stringsAsFactors = TRUE) WindDirection <- ozone[,12] don <- ozone[,1:11] #### Sélection des variables quanti ``` ## Visualisation du dispositif de données manquantes ### Visualisation univariée ```{r} library(VIM) aggr(don) aggr(don,only.miss=TRUE,sortVar=TRUE) res <- summary(aggr(don,prop=TRUE,combined=TRUE))$combinations res[rev(order(res[,2])),] matrixplot(don,sortby=2) marginplot(don[,c("T9","maxO3")]) ``` ### Visualisation multivariée de la matrice de présence-absence Création d'un matrice de présence absence avec "o" pour observé et "m" pour manquant ```{r} mis.ind <- matrix("o",nrow=nrow(don),ncol=ncol(don)) mis.ind[is.na(don)] <- "m" dimnames(mis.ind) <- dimnames(don) mis.ind ``` ACM pour visualiser les associations ```{r} library(FactoMineR) resMCA <- MCA(mis.ind) plot(resMCA,invis="ind",title="Graphe des modalités") ``` ## Imputation simple par ACP ```{r} library(missMDA) ``` ### Estimation du nombre de composantes ```{r} nb <- estim_ncpPCA(don) plot(0:5,nb$criterion,xlab="dim",ylab="MSEP") ``` ### Imputation par ACP ```{r} res.comp <- imputePCA(don,ncp=nb$ncp) res.comp$completeObs ``` ### Visualisation de distribution observé - imputé ```{r} indvar="T9" indNA=which(is.na(don[,indvar])) plot(density(res.comp$completeObs[indNA,indvar]),main="Observed and imputed values for T9",xlab="T9") lines(density(res.comp$completeObs[which(!((1:nrow(don))%in%indNA)),indvar]),col="red") legend("topleft",text.col=c("black","red"),legend=c("Observed values","Imputations")) ``` ### ACP sur le tableau complété ```{r} imp <- cbind.data.frame(res.comp$completeObs, WindDirection) res.pca <- PCA(imp,quanti.sup=1,quali.sup=12) plot(res.pca, habillage=12, label="quali") plot(res.pca, choix="var") ``` ## Et avec Factoshiny ```{r, eval=FALSE} library(Factoshiny) Factoshiny(ozone) ``` ## Imputation multiple ### Avec mice - modèles conditionnels ```{r} library(mice) res.mice <- mice(don,m=100,defaultMethod="norm") # variabilité des paramètres de régression obtenue par bootstrap res.mice <- mice(don,m=100,defaultMethod="rf") # forêts aléatoires ``` ### avec missMDA - ACP ```{r} library(missMDA) res.MIPCA <- MIPCA(don,ncp=2) ``` ### Vérification et visualisation de l'imputation ```{r} plot(res.amelia) par(mfrow=c(1,1)) compare.density(res.amelia, var="T12") overimpute(res.amelia, var="maxO3") # visualisation par ACP plot(res.MIPCA,choice= "ind.supp"); plot(res.MIPCA,choice="var") ``` ### Concaténer les résultats ```{r} require(mice) imp<-prelim(res.mi=res.MIPCA,X=ozone[,1:11]) fit <- with(data=imp,exp=lm(maxO3~T9+T12+T15+Ne9+Ne12+Vx9+Vx12+Vx15+maxO3v)) res.pool<-pool(fit) summary(res.pool) ``` # Exemple en ACM ```{r} library(missMDA) data(vnf) ``` ## ACM en créant une modalité NA pour toute variable ayant au moins une donnée manquante ```{r} res1 <- MCA(vnf) ``` ## Imputation par ACM puis ACM ```{r} ncp <- estim_ncpMCA(vnf) res.impute <- imputeMCA(vnf, ncp=4) ## res.impute$completeObs # Tableau complété res.mca <- MCA(vnf, tab.disj = res.impute$tab.disj) ``` # Exemple en AFDM ## Imputation par AFDM puis AFDM ```{r} library(missMDA) ozone <- read.table("http://factominer.free.fr/missMDA/ozoneNA.csv",header=TRUE,sep=",",row.names=1) nb <- estim_ncpFAMD(ozone) ## tps de calcul long res.imp <- imputeFAMD(ozone, ncp = nb$ncp) res.famd <- FAMD(ozone, ,tab.disj = res.imp$tab.disj) ``` ## Imputation par forêts aléatoires ```{r} library(missForest) missForest(ozone) ``` ```{r} Ecolo <- read.csv("http://factominer.free.fr/missMDA/ecological.csv", header = TRUE, sep=";",dec=",",stringsAsFactors = TRUE) ## Delete species with only missing values for contiuous variables ind <- which(rowSums(is.na(Ecolo[,-1])) == 6) biome <- Ecolo[-ind,1] ### Keep a categorical variable Ecolo <- Ecolo[-ind,-1] ### Select continuous variables ```