style1

Procédurier - Utiliser R en mesure et évaluation

Section 09 B - Analyse du PISA2006 à partir de la théorie classique des tests


Pour faire les opérations partie A de la section 09.


Dans cette section, nous allons nous attarder aux questions contenues dans le livret 8. Cependant, nous allons d'abord faire quelques opérations avec le fichier de données.



Les opérations qui viennent d'être présentées sont réunies dans le script suivant. Enregistrer sous...




##=============================================================================
## Fichier: Section_09B_gamma.r date: juin 2009
## Auteur: AndréSèb Aubin (andreseb.aubin@gmail.com)
##
## Dans ce script
## Analyse de données du PISA selon la théorie classique des tests.
##
## F_IN: data1, data1_math et data1_science (fait dans le script transtype_alpha.r)
##
## Coefficients de bissection
##=============================================================================

donnees_2006 <- data1

Dimension <- dim(donnees_2006)
Dimension


##=============================================================================
## 02 - Calculs des coefficients de bissection
##
## Nous avons extrait une matrice de données qui ressemble à l'exercice
## fait à la section 03 (tableau 2.2)
##
## Inspiré du script tableau_2_7a.r
##
## Gestion des NA : Les répondants (lignes) contenant un NA ou plus sont
## omises pour le traitement.
##
## Matrice utilisée: donnees_2006 (équivalent à data1 sans NA)
##
##==============================================================================

donnees_2006_2 <- na.omit(donnees_2006)
View(donnees_2006_2)

Dimension_2 <- dim(donnees_2006_2)
Dimension_2

nbre_individu <- Dimension_2[1]
nbre_individu

nbre_item <- Dimension_2[2]
nbre_item




# Premières opérations
# Additions des lignes
# fonction "rowSums()"
# Cela donne le résultat du test de chaque sujet (étudiante ou étudiant)

rowsums_donnees_2006_2 <- rowSums(donnees_2006_2)
rowsums_donnees_2006_2

colsums_donnees_2006_2 <- colSums(donnees_2006_2)
colsums_donnees_2006_2


# Et la moyenne au test (fonction "mean()")
moyenne_donnees_2006_2 <- mean(donnees_2006_2)
moyenne_donnees_2006_2


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



# Même si cela est plus long et demandera un certain temps de compilation, par répartition aléatoire des items

nbre_iteration <- 10000 # Nombre d'itérations de la grande boucle.

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)
# Début de la grande boucle
{
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))


for (k in 1:(nbre_item/2))
# Début de la petite boucle
{
y_1b[,k] <- donnees_2006_2[,hasard[k]]
y_2b[,k] <- donnees_2006_2[,hasard[k+(nbre_item/2)]]
}
# Fin de la petite boucle

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

sX2 <- var(rowsums_donnees_2006_2)

# 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 <- sX2*((nbre_individu - 1)/nbre_individu)
sX2
# 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))
rXX_G_Compil[m] <- rXX_G
Compil[m,(nbre_item+2)] <- round(rXX_G,3)
}

##===== Fin de la grande boucle ===============================================

# Maximum de rXX_SB
max(Compil[,(nbre_item+1)])
# Maximum de rXX_G
max(Compil[,(nbre_item+2)])
write.table(Compil, "donnees_2006_splithalf.data", row.names=F, col.names=F, sep=" ")

#==================== Fin du script Section_09B_gamma.r =======================


> max(Compil[,(nbre_item+1)])
[1] 0.894
> max(Compil[,(nbre_item+2)])
[1] 0.954
>



Passons maintenant au coefficient de bissection, qui sont disponibles dans le script suivant. Enregistrer sous...



##=============================================================================
## Fichier: Section_09B_gamma2.r date: juin 2009
## Auteur: AndréSèb Aubin (andreseb.aubin@gmail.com)
##
## Dans ce script
## Coefficients de bissection
##
## F_IN: data1, data1_math et data1_science (fait dans le script transtype_alpha.r)
##
##
##=============================================================================

donnees_2006 <- data1

Dimension <- dim(donnees_2006)
Dimension


##==========================================================================
## 02 - Calculs des coefficients de bissection
##
## Nous avons extrait une matrice de données qui ressemble à l'exercice
## fait à la section 03 (tableau 2.2)
##
## Inspiré du script tableau_2_7a.r
##
## Gestion des NA : Les répondants (lignes) contenant un NA ou plus sont
## omises pour le traitement.
##
## Matrice utilisée: donnees_2006 sans NA
##
##==========================================================================

donnees_2006_2 <- na.omit(donnees_2006)
donnees_2006_2[1:25,]

Dimension_2 <- dim(donnees_2006_2)
Dimension_2


nbre_individu <- Dimension_2[1]
nbre_individu

nbre_item <- Dimension_2[2]
nbre_item

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

rowsums_donnees_2006_2 <- rowSums(donnees_2006_2)
rowsums_donnees_2006_2

colsums_donnees_2006_2 <- colSums(donnees_2006_2)
colsums_donnees_2006_2

# Et la moyenne au test (fonction "mean()")
moyenne_donnees_2006_2 <- mean(donnees_2006_2)
moyenne_donnees_2006_2

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


# Même si cela est plus long et demandera un certain temps de compilation, par répartition aléatoire des items

nbre_iteration <- 10000 # Nombre d'itérations de la grande boucle.

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) # Début de la grande boucle
{
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))


for (k in 1:(nbre_item/2)) # Début de la petite boucle {
y_1b[,k] <- donnees_2006_2[,hasard[k]]
y_2b[,k] <- donnees_2006_2[,hasard[k+(nbre_item/2)]]
} # Fin de la petite boucle

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

sX2 <- var(rowsums_donnees_2006_2)

# 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 <- sX2*((nbre_individu - 1)/nbre_individu)
sX2 # 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))
rXX_G_Compil[m] <- rXX_G
Compil[m,(nbre_item+2)] <- round(rXX_G,3)

} # Fin de la grande boucle.

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

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

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


################################################################################
####################### Fin du script Section_09B_gamma2.r #####################

Cela donne donc les deux coefficients de bissection.


> # Maximum de rXX_SB
> max(Compil[,(nbre_item+1)])
[1] 0.896
>
> # Maximum de rXX_G
> max(Compil[,(nbre_item+2)])
[1] 0.954
>
> write.table(Compil, "math_booklet9_splithalf.data", row.names=F, col.names=F, sep=" ")
>
>
> ################################################################################
> ####################### Fin du script Section_09B_gamma2.r #####################



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


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!