style2

Procédurier - Utiliser R en mesure et évaluation


Le chapitre 2 présente plusieurs coefficients à calculer.


En utilisant le tableau 2.7 de l'ouvrage qui présente un cas purement scolaire, nous calculerons 4 coefficients (alpha de Cronbach, L2 de Guttman et deux coefficients de bissection: Stuntman et Ruyon).


Ensuite nous referrons les calculs avec les données du tableau 2.2 qui présente un cas plus réaliste. Cette reprise permettra d'obtenir les résultats présentés sous forme de tableau à la page XX de Bertrand et Blais.


Deux scripts permettent de suivre les calculs faits avec les données du tableau 2.7.
Le premier permet de calculer les coefficients alpha et L2 (Cliquez ici)
Le second permet de calculer les coefficients de bissection (Cliquez ici)


Les premières opérations permettant de travailler sur le fichier de données sont sensiblement les mêmes que celles présentées à la section 2C


# La simplicité de ce problème permet une première appropriation des fonctions
# utiles et permet de valider, de visu, les réponses obtenues.

# Mise en matrice des données associées au tableau 2.7
# Le ficher est hébergé sur un site oueb, et permet donc de le récupérer sans peine
# La fabrication de fichier de données sera expliquée plus, si cela vous intéresse, vous
# pouvez le consulter pour voir comment, dans le fichier, les données sont organisées
# pour être lues par la fonction read.table("fichier")

t2.7<-read.table("http://pages.usherbrooke.ca/r_project/data/donnees_2_7a.data")
t2.7

# Premières opérations
# Additions des lignes pour valider la bonne saisie des données dans la matrice t2.7
# fonction "rowSums()"
# Cela donne le résultat du test de chaque sujet (étudiante ou étudiant)

lignes2.7 <- rowSums(t2.7)
lignes2.7

nbre_individu <- length(lignes2.7)
nbre_individu

colonnes2.7 <- colSums(t2.7)
colonnes2.7

nbre_item <- length(colonnes2.7)
nbre_item

# Et la moyenne au test (fonction "mean()")
moyenne2.7 <- mean(lignes2.7)
moyenne2.7


# Calculer la variance du test sX2_2.7

sX2_2.7 <- var(lignes2.7)

# La variance calculée par "var()" est calculée en divisant par "n-1" et nous voulons
# la variance divisée par n, nous corrigeons en multipliant par "(n-1)/n" ou "15/16"
sX2_2.7 <- sX2_2.7*((nbre_individu - 1)/nbre_individu)
sX2_2.7 #donne 13.75 (55/4), tel qu'attendu

cov2.7_a <- (cov(t2.7)*((nbre_individu - 1)/nbre_individu))
var2.7_a <- (var(t2.7)*((nbre_individu - 1)/nbre_individu))

for (i in 1:nbre_item)
{
cov2.7_a[i,i] <- 0
var2.7_a[i,i] <- 0
}

var2.7_a
cov2.7_a
sum(cov2.7_a)
sum(var2.7_a)



# Calcul du coefficient L2 de Guttman

L2_2.7 <- c(0,0) # Initialisation
L2_2.7[1] <- (sum(cov2.7_a))/(sX2_2.7)
L2_2.7[2] <- (sqrt((nbre_item)/(nbre_item - 1))) * (sqrt(sum(var2.7_a^2))/(sX2_2.7))

sum(L2_2.7) # Addition des deux termes de l'addition



# Calcul du coefficient ALPHA de Cronbach de deux façons.
# D'abord avec la fonction du module supplémentaire psy

library(psy) # charger le module (en cas d'absence, téléchargez le module)
cronbach(t2.7)




# Ensuite, avec la formule présenté à la page 59 de l'ouvrage de Bertrand (2004)

sum_si2 <- 0

for (i in 1:nbre_item)
{
sum_si2 = sum_si2 + ((colonnes2.7[i]*(nbre_individu-colonnes2.7[i]))/nbre_individu^2)
  }
alpha <- ((nbre_item)/(nbre_item - 1))*(1 - (sum_si2/sX2_2.7))
  sum_si2
alpha




Nous avons donc calculé L2 de Guttman et alpha de Cronbach, voici les résultats pour les données du tableau 2.7.


L2 = 1    alpha = 1


Il est maintenant temps de calculer deux coefficients par bissection. Vous remarquerez que le début du script (tableau_2_7a.splithalf.r) ressemble à celui du script précédent. Si vous compilez ce script immédiatement après avoir réalisé l'autre, vous pouvez sauter la première section. Sinon, exécutez-la pour ne pas râter d'étape et avoir toutes les variables nécessaires en "mémoire".



# Faire deux matrices, chacune contenant la moitié des items.

y_1 <- matrix(0, nbre_individu, (nbre_item/2))
y_2 <- matrix(0, nbre_individu, (nbre_item/2))

# D'abord par séparation pair-impairs

for (k in 1:(nbre_item/2))
{
y_1[,k] <- t2.7[,(2*k)]
y_2[,k] <- t2.7[,(2*k-1)]
}

Dans le script qui suit, nous calculerons les coefficients de bissection. rXX_SB représente le coefficient calculé par la méthode de Spearman-Brown et rXX_G1 celui calculé par la méthode de Guttman.


lignes.y_1 <- rowSums(y_1)
lignes.y_2 <- rowSums(y_2)

rYY <- (cor(lignes.y_1,lignes.y_2, method = "pearson"))
#rYY <- mean(lignes.rYY)
rYY

rXX_SB <- (2*rYY)/(1+rYY)

# Calculer la variance du test sX2_2.7

sX2_2.7 <- var(lignes2.7)

# La variance calculée par "var()" est calculée en divisant par "n-1" et nous voulons
# la variance divisée par n, nous corrigeons en multipliant par "(n-1)/n" ou "15/16"
sX2_2.7 <- sX2_2.7*((nbre_individu - 1)/nbre_individu)
sX2_2.7 # variance corrigée
lignes.y_1 <- rowSums(y_1)
lignes.y_2 <- rowSums(y_2)
sY2_1 <- var(lignes.y_1)
sY2_1 <- sY2_1*((nbre_individu - 1)/nbre_individu)
sY2_1 # variance corrigée
sY2_2 <- var(lignes.y_2)
sY2_2 <- sY2_2*((nbre_individu - 1)/nbre_individu)
sY2_2 # variance corrigée

rXX_G1 <- 2*(1-((sY2_1 + sY2_2)/sX2_2.7))
rXX_G1


Refaisons les calculs des deux coefficients de bissection avec une répartition aléatoire des deux sections du tests. Évidemment dans le cas du tableau 2.7, cela ne changera pas les valeurs obtnenues. Cependant, nous verrons plus tard qu'avec les données du tableau 2.2, nous obtiendrons des valeurs différentes. Voici le script de la nouvelle répartition, suivi du calcul des coefficients de bissection.


# SECTION 03
# Ensuite, par répartition aléatoire des items
nbre_iteration <- 100
rXX_G <- 0
rXX_G_Compil <- 0
rXX_SB_Compil <- 0
Compil <- matrix(0,nbre_iteration,(nbre_item+2))

for (m in 1:nbre_iteration)
{
h <- 1;
hasard <- 0
t <- as.integer(runif(1)*nbre_item+1)
hasard[h] <- t
h = h+1
OK <- 0

while (h != (nbre_item+1))
{
t <- as.integer(runif(1)*nbre_item+1)
hasard[h] <- t
for (h2 in 1:(h-1))
{
if (hasard[h] == hasard[h2])
{
OK <- 1
}
}
if (OK != 1)
{
h = h+1
}
OK <- 0
}
hasard
Compil[m,(1:nbre_item)] <- hasard[1:nbre_item]
y_1b <- matrix(0, nbre_individu, (nbre_item/2))
y_2b <- matrix(0, nbre_individu, (nbre_item/2))


y_1b[,1] <- t2.7[,hasard[1]]
y_1b[,2] <- t2.7[,hasard[2]]
y_1b[,3] <- t2.7[,hasard[3]]
y_1b[,4] <- t2.7[,hasard[4]]

y_2b[,1] <- t2.7[,hasard[5]]
y_2b[,2] <- t2.7[,hasard[6]]
y_2b[,3] <- t2.7[,hasard[7]]
y_2b[,4] <- t2.7[,hasard[8]]

lignes.y_1b <- rowSums(y_1b)
lignes.y_2b <- rowSums(y_2b)

rYY <- (cor(lignes.y_1b,lignes.y_2b, method = "pearson"))
#rYY <- mean(lignes.rYY)
rYY
rXX_SB <- (2*rYY)/(1+rYY)
rXX_SB_Compil[m] <- rXX_SB
Compil[m,(nbre_item+1)] <- round(rXX_SB,3)

# Calculer la variance du test sX2_2.7

sX2_2.7 <- var(lignes2.7)

# La variance calculée par "var()" est calculée en divisant par "n-1" et nous voulons
# la variance divisée par n, nous corrigeons en multipliant par "(n-1)/n" ou "15/16"
sX2_2.7 <- sX2_2.7*((nbre_individu - 1)/nbre_individu)
sX2_2.7 # variance corrigée

lignes.y_1b <- rowSums(y_1b)
lignes.y_2b <- rowSums(y_2b)

sY2_1b <- var(lignes.y_1b)
sY2_1b <- sY2_1b*((nbre_individu - 1)/nbre_individu)
sY2_1b # variance corrigée

sY2_2b <- var(lignes.y_2b)
sY2_2b <- sY2_2b*((nbre_individu - 1)/nbre_individu)
sY2_2b # variance corrigée


rXX_G <- 2*(1-((sY2_1b + sY2_2b)/sX2_2.7))
rXX_G_Compil[m] <- rXX_G
Compil[m,(nbre_item+2)] <- round(rXX_G,3)

}
# Maximum de rXX_SB
max(Compil[,(nbre_item+1)])

# Maximum de rXX_G
max(Compil[,(nbre_item+2)])

write.table(Compil, "splithalf.data", row.names=F, col.names=F, sep=" ")


Ce script est plus long pour deux principales raisons. La première partie du script permet de créer aléatoirement plusieurs bissections des données. Ensuite il calcule, et cela ressemble à l'étape précédente, les coefficients pour chacune des bissections. Enfin, il extrait la valeur maximale des bissections par la fonction max(). Les résultats sont les suivants.



Compilons les résultats pour les données du tableau 2.7.


L2 = 1    alpha = 1   rXX_SB = 1   rXX_G1 = 1  


Avec le tableau 2.7, il est normal que les valeurs soient toutes 1. Cela montre que nos calculs fonctionnent probablement bien. Pour nous en assurez, reprenons l'ensemble des opérations avec les données du tableau 2.2 à la page 43 de l'ouvrage de Blais. Les résultats attendus sont données à la page 55 au tableau 2.4.

Pour reprendre les calculs avec les nouvelles données, il suffit de modifier une seule valeur dans chaque script, à la ligne 10, de remplacer le 2.7 par un 2.2.




Compilons les résultats pour les données du tableau 2.2. On s'aperçoit que l'attribution paire-impaire(1) pour la bissection retourne les valeurs de la page 55, alors que la méthode aléatoire(2) retourne des résultats un peu supérieurs.


L2 = 0,4729    alpha = 0,3265   rXX_SB(1) = 0,6516   rXX_G1(1) = 0,6458


Pour accéder aux exercices de la fin du chapitre 02 (Section_03_B) Cliquez ici.

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!