style1

Procédurier - Utiliser R en mesure et évaluation

Section 08 C - Analyse du PISA par l'analyse factorielle.


Voici la section où nous ferons une analyse factorielle en utilisant des scores associés à la lecture, aux mathématiques et aux sciences.


##############################################################################
## Fichier: Section_08C_alpha.r date: décembre 2007
## Auteur: AndréSèb Aubin (andreseb.aubin@gmail.com)
##
## Dans ce script
## Analyse de données du PISA par l'analyse factorielle
##
## Fichier initial de donnée: booklet9_01a.dat (fait dans le script Section_08A_alpha.r)
## Vérification du nombre de facteurs
##
f##############################################################################

##############################################################################
## 00 - Fonctions permettant d'initialiser l'environnement R
##############################################################################

rm(list=ls(all=TRUE))
library("grDevices")

setwd("C:/Users/AndreSeb/Desktop/TDII_Omega/Activite_finale/bin")
#setwd("C:/Documents and Settings/André-Sébastien/Mes documents/doctorat/TDII_Omega/Activite_finale/bin")
# setwd(choose.dir()) # À activer si on veut choisir le répertoire à chaque fois
# setwd("F:/PISA/bin") # Autre choix de répertoire (pour une clé USB par exemple)

##############################################################################
## 01 - Importation du fichier math_booklet9_01a.dat dans la matrice donnees_brutes
##############################################################################

donnees_brutes <- read.table(file="booklet9_01a.dat", header = TRUE)
Dimension <- dim(donnees_brutes)
Dimension

questions_math <- c("M033Q01","M034Q01T","M037Q01T","M037Q02T","M124Q01","M124Q03T","M144Q01T","M144Q02T"
,"M144Q03", "M144Q04T","M145Q01T", "M155Q01", "M155Q02T", "M155Q03T" ,"M155Q04T", "M192Q01T")
questions_reading <- c("R040Q02" ,"R040Q03A", "R040Q03B", "R040Q04", "R040Q06" ,"R077Q02", "R077Q03", "R077Q04", "R077Q05" ,"R077Q06", "R088Q01", "R088Q03", "R088Q04T", "R088Q05T", "R088Q07" ,"R110Q01" ,"R110Q04", "R110Q05", "R110Q06" ,"R216Q01", "R216Q02" ,"R216Q03T", "R216Q04", "R216Q06", "R236Q01" ,"R236Q02", "R237Q01" ,"R237Q03", "R239Q01", "R239Q02", "R246Q01" ,"R246Q02")
questions_science <- c("S128Q01" ,"S128Q02", "S128Q03T" ,"S129Q01", "S129Q02T", "S131Q02T", "S131Q04T", "S253Q01T", "S253Q02" ,"S253Q05" ,"S268Q01" ,"S268Q02T", "S268Q06" ,"S269Q01", "S269Q03T", "S269Q04T", "S270Q03T")

q_math_booklet9 <- donnees_brutes[ ,questions_math]
q_reading_booklet9 <- donnees_brutes[ ,questions_reading]
q_science_booklet9 <- donnees_brutes[ ,questions_science]

score_math <- rowSums(q_math_booklet9, na.rm = TRUE)
score_reading <- rowSums(q_reading_booklet9, na.rm = TRUE)
score_science <- rowSums(q_science_booklet9, na.rm = TRUE)

score_compil <- cbind(score_math, score_reading, score_science)

write.table(score_compil, file="score_compil.dat", row.names=TRUE, col.names=TRUE, sep="\t")

score_compil[1:5,]

X <- score_compil

##############################################################################
## 02 - Analyse factorielle selon la première méthode
##
## Il faut cependant, avant de faire l'analyse factorielle, ne laissez que les
## colonnes contenant des questions sur les sciences, les mathématiques et les sciences.
##
## Inspiré du script tableau_7_1a.r
##
## Gestion des NA : les résultats avec des NA sont équivalents à des 0.
##
## Matrice utilisée: score_compil
##
##############################################################################

## Première étape, trouvons la matrice de corrélations de notre matrice de données X.
CX <- cor(X)
## Trouvons ensuite la valeurs des vecteurs propres de la matrice CX
ECX <- eigen(CX)
## Dans le cas de l'analyse factorielle, la représentation graphique est souvent intéressante.
plot(eigen(CX)$values, type="b", xlab="Composante", ylab="Valeur Propre")
lines(x=c(0,9),y=c(1,1), col="red")


Voici le schéma résultant de cette première méthode.








## Cependant, tous les cas, ne sont pas aussi simple. Une solution consiste à remplacer,
## dans la matrice de corrélation de la matrice de corrélations, la diagonale par les
## valeurs propres de la matrice CCX.

CCX <- cor(CX)
CCX

diag(CCX) <- apply(eigen(CCX)$vectors[,1:3],1,function(x) sum(xˆ2))

CCX

## Ensuite, on recalcule les valeurs propres de cette nouvelle matrice.

ECCX <- eigen(CCX)

## On peut ensuite réaliser le graphique des valeurs propres.

plot(eigen(CCX)$values, type="b", xlab="Composante", ylab="Valeur Propre")
lines(x=c(0,9),y=c(1,1), col="red")

print(varimax(ECCX$vectors[,1:3], normalize = FALSE),cutoff=0)


Et maintenant le schéma résultant de cette seconde méthode.




################################################################################

## Certaines fonctions de l'environnement R nous permettent d'accélérer l'obtention des
## facteurs. La fonctions princomp() retourne l'analyse des composante.

pc.cr <- princomp(X, cor= TRUE) # cor=TRUE utilise la matrice de corrélation pour les calculs.
summary(pc.cr) ## affiche le contenu de pc.cr sous formes résumé.

## Pour apercevoir le contenu de notre matrice en enlevant les entrées trop petites
## il est possible de modifier la valeur de cutoff.

print(loadings(pc.cr), cutoff=0) # cutoff = 0 affichera toutes les valeurs
print(loadings(pc.cr), cutoff=0.1) # cutoff=0.100 n'affichera que les valeurs plus grande que |0.100| (en valeur absolue)

## La fonction plot(pc.cr) permet d'afficher le diagramme des éboulis.
## À partir de ce diagramme, il est possible d'extraire les facteurs en observant
## le changement dans la pente du graphique.

plot(pc.cr) # affiche le graphique des éboulis.
biplot(pc.cr) # affiche le graphique biplot qui présente sous forme vectorielle.

####################### Fin du script Section_08C_alpha.r #####################






Les opérations qui ont été présentées ici sont réunies dans le script suivant. Enregistrer sous...


Pour accéder à la suite des manipulations de la section 08 Cliquez ici (Section_08_D).


Retour à à la page précédente
Retour à la page principale

Dernière mise à jour faite le 21 janvier 2017 à 13:10 -0800 par AndréSèb

Get Firefox!