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