Analyse d'article pour un débutant R

12

J'essaie d'évaluer un test de choix multiple de 20 éléments. Je souhaite effectuer une analyse d'élément telle que celle trouvée dans cet exemple . Donc, pour chaque question, je veux la valeur P et la corrélation avec le total, et la distribution des options sélectionnées.

Je ne connais rien aux différents logiciels statistiques, mais j'aimerais utiliser R car je suis à l'aise avec la programmation et R est open source. Le pseudo-workflow que j'envisage est:

  1. préparer des données dans Excel et exporter vers CSV

  2. charger des données dans R

  3. charger un paquet qui fait ce dont j'ai besoin

  4. exécuter les commandes de ce package

  5. exporter et rapporter.

Je suis confiant avec 1 et 2 mais j'ai des problèmes avec 3, probablement parce que je n'ai pas le vocabulaire statistique pour comparer les packages que j'ai parcourus sur CRAN. ltmon dirait que ça pourrait être le bon paquet mais je ne peux pas le dire. Quel que soit le package utilisé, quelles seraient les commandes?

Question secondaire: dans l'exemple lié, que supposez-vous que MC et MI représentent?

Matthew Leingang
la source

Réponses:

11

Je peux vous proposer au moins deux packages qui permettent d'effectuer ces tâches: psych ( score.items) et ltm ( descript). Le package CTT semble également traiter MCQ mais je n'en ai aucune expérience. Plus d'informations peuvent être trouvées sur le site Web de W Revelle, The Personality Project , esp. la page dédiée à la psychométrie avec R qui fournit des instructions pas à pas pour importer, analyser et rapporter des données. De plus, la vue des tâches du CRAN sur la psychométrie comprend de nombreuses ressources supplémentaires.

Comme décrit dans votre lien, MC signifie «Score brut total moyen des personnes qui ont répondu à l'élément avec la bonne réponse», et MI pour «Score total moyen des personnes qui n'ont pas répondu à l'élément avec la bonne réponse». La corrélation point-bisériale (R (IT)) est également disponible dans le ltmpackage ( biserial.cor). Il s'agit essentiellement d'un indicateur du pouvoir de discrimination de l'item (puisqu'il s'agit de la corrélation de l'item et du score total), et est lié au paramètre de discrimination d'un modèle IRT 2 PL ou à la charge factorielle dans l'analyse factorielle.

Si vous voulez vraiment reproduire le tableau que vous montrez, je suppose que vous devrez envelopper une partie de ce code avec du code personnalisé, au moins pour sortir le même type de tableau. J'ai fait un exemple rapide et sale qui reproduit votre tableau:

dat <- replicate(10, sample(LETTERS[1:4], 100, rep=TRUE))
dat[3,2] <- dat[67,5] <- NA
itan(dat)

         P      R    MC    MI NC OMIT  A  B  C  D
 [1,] 0.23 -0.222 2.870 2.169 23    0 23 22 32 23
 [2,] 0.32 -0.378 3.062 1.985 32    1 32 20 14 33
 [3,] 0.18 -0.197 2.889 2.207 18    0 18 33 22 27
 [4,] 0.33 -0.467 3.212 1.896 33    0 33 18 29 20
 [5,] 0.27 -0.355 3.111 2.056 27    1 27 23 23 26
 [6,] 0.17 -0.269 3.118 2.169 17    0 17 25 25 33
 [7,] 0.21 -0.260 3.000 2.152 21    0 21 24 25 30
 [8,] 0.24 -0.337 3.125 2.079 24    0 24 32 22 22
 [9,] 0.13 -0.218 3.077 2.218 13    0 13 29 33 25
[10,] 0.25 -0.379 3.200 2.040 25    0 25 25 31 19

Comme il s'agit de réponses aléatoires, la corrélation bisériale et la difficulté des éléments ne sont pas très significatives (sauf pour vérifier que les données sont vraiment aléatoires :). De plus, cela vaut la peine de vérifier d'éventuelles erreurs, car j'ai rédigé la fonction R en 10 '...

chl
la source
1
Merci pour cela! Je lis votre code et cela m'aide beaucoup à comprendre la syntaxe R. Une chose qui me pose problème, c'est la ligne freq.resp <- raw.resp/apply(raw.resp, 1, sum, na.rm=T). L'erreur est que "dim (X) doit avoir une longueur positive" tandis que dim (raw.resp) est NULL. Serait-ce parce que mes données n'ont pas toutes les options avec des fréquences positives, mes tables ne sont pas toutes de la même longueur? Comment puis-je remplir les zéros de mon tableinvocation?
Matthew Leingang
@Matthew Oui, il est très probable que ce soit bien la source du problème (enfin, vous apprenez R rapidement, j'apprécie). Ainsi, si une catégorie de réponse n'est pas observée pour un ou plusieurs éléments, la longueur du tableau sera <4 et freq.respgénérera une erreur. Je vais corriger le code (d'ici demain), cela vous montrera également comment concaténer des tables irrégulières avec peu de code.
chl
@Matthew J'ai ajouté un correctif. Devrait également fonctionner avec des éléments dichotomiques. Faites-moi savoir si tout va bien maintenant. gist.github.com/642219
chl
Merci beaucoup d'avoir tenu ma main. Votre fonction me donne une erreur: "Erreur dans raw.resp [i, noms (tmp)] <- tmp: indice hors limites", mais curieusement, j'ai pu exécuter chaque ligne de la fonction sans problème. J'ai donc un rapport de travail.
Matthew Leingang
J'ai appliqué ce code et je pense que tous les signes de la ligne R (corrélation bisériale ponctuelle) peuvent être inversés.
user1205901
8

La fonction de paquetage psych alpha produit ce que vous recherchez.

Pour exporter cela, enregistrez l'objet et utilisez la fonction xtable pour produire le balisage LaTeX, qui peut ensuite être formaté par n'importe quel éditeur LaTeX.

richiemorrisroe
la source
1
(+1) psych::alphafait un meilleur travail que score.items, merci d'avoir ajouté cela. Je ne me souviens jamais de celle que je devrais utiliser!
chl