Dear Professor Revelle and R-helpers, This is a two-part question: the first part is general, and the second is specific to the psych package. First question: In the past I've constructed composite variables from questionnaire data by using rowMeans(), and then correlating items with the scale using cor() as an informal check for "bad" items. Over the weekend I decided to take a look at some of the packages in the psychometric task view, to see if there was a way to simplify this process. I looked at several packages, including psychometric, CTT, and psych. I'm interested in hearing from others who need to do this kind of thing frequently. What approach do you use? Do you use one of the packages mentioned above? Are there other packages I might want to take a look at? Second question: I spent some time with the psych package trying to figure out how to use the score.items() function, and it's become clear to me that I don't understand what it's doing. I assumed that setting a key equal to -1 would result in the item being reverse scored, but I get weird results, as shown below. When I try to reverse score (by setting a value of -1 in the key), I get scale scores that don't add up (e.g., the mean score is reported as being larger than the maximum item score). How is the score.items() function intended to be used? Do I need to reverse score items before using score.items()? Thanks, Ista ########## score.items() example begins here ##########> library(psych) > Data.score <- as.data.frame(matrix(c(40,29,40,32,1,1,3,1,5,3,3,44,24,47,31,4,4,1,1,4,2,1,13,5,14,5,5,4,3,3,4,4,3,7,2,2,0,5,4,2,2,4,4,4,7,6,5,4,1,1,3,4,3,2,1,18,15,21,8,6,6,1,1,6,6,6,9,10,15,7,5,4,2,1,5,5,5,10,7,12,6,2,2,4,4,3,3,3,8,7,13,8,1,1,4,2,2,2,1,10,5,13,7,4,3,3,3,3,3,3), nrow=10, byrow=TRUE)) > names(Data.score) <- c("s1","s2","s3","s4","imi1","imi2","imi3","imi4","imi5","imi6","imi7") > Data.scores1 s2 s3 s4 imi1 imi2 imi3 imi4 imi5 imi6 imi7 1 40 29 40 32 1 1 3 1 5 3 3 2 44 24 47 31 4 4 1 1 4 2 1 3 13 5 14 5 5 4 3 3 4 4 3 4 7 2 2 0 5 4 2 2 4 4 4 5 7 6 5 4 1 1 3 4 3 2 1 6 18 15 21 8 6 6 1 1 6 6 6 7 9 10 15 7 5 4 2 1 5 5 5 8 10 7 12 6 2 2 4 4 3 3 3 9 8 7 13 8 1 1 4 2 2 2 1 10 10 5 13 7 4 3 3 3 3 3 3> > #This works fine > key.list <- list(silence=1:4, interest=5:11) > keys <- make.keys(length(names(Data.score)), key.list, item.labels=names(Data.score)) > scored <- score.items(keys, Data.score, missing=FALSE, totals=FALSE) > scored$scoressilence interest [1,] 35.25 2.428571 [2,] 36.50 2.428571 [3,] 9.25 3.714286 [4,] 2.75 3.571429 [5,] 5.50 2.142857 [6,] 15.50 4.571429 [7,] 10.25 3.857143 [8,] 8.75 3.000000 [9,] 9.00 1.857143 [10,] 8.75 3.142857> > #This does not do what I expected. Mean interest scores are higher than score of the highest item. > key.list2 <- list(silence=1:4, interest=c(5,6,-7,-8,9,10,11)) > keys2 <- make.keys(length(names(Data.score)), key.list2, item.labels=names(Data.score)) > scored2 <- score.items(keys2, Data.score, missing=FALSE, totals=FALSE) > scored2$scoressilence interest [1,] 35.25 14.71429 [2,] 36.50 15.28571 [3,] 9.25 15.42857 [4,] 2.75 15.85714 [5,] 5.50 13.57143 [6,] 15.50 17.42857 [7,] 10.25 16.42857 [8,] 8.75 14.14286 [9,] 9.00 13.57143 [10,] 8.75 14.85714
<snip>> Second question: I spent some time with the psych package trying to > figure out how to use the score.items() function, and it's become > clear to me that I don't understand what it's doing. I assumed that > setting a key equal to -1 would result in the item being reverse > scored, but I get weird results, as shown below. When I try to reverse > score (by setting a value of -1 in the key), I get scale scores that > don't add up (e.g., the mean score is reported as being larger than > the maximum item score). How is the score.items() function intended to > be used? Do I need to reverse score items before using score.items()?I did it again--it seems like I always figure out the answer just after I ask for help. The score.items() function needs to know the maximum of the scale in order to reverse score. For some reason, the maximum appears to be calculated from all the scores, not just scores that have a 1 or a -1 in the key. On a hunch I set the max argument to a vector of scale maxima, and it worked. I'm still interested in responses to question 1 though. Thanks again, Ista <snip>
Ista There are several functions in the MiscPsycho package that can be sued for classical item analysis.> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Ista Zahn > Sent: Tuesday, March 10, 2009 10:28 AM > To: revelle at northwestern.edu > Cc: r-help at r-project.org > Subject: [R] reliability, scale scores in the psych package > > Dear Professor Revelle and R-helpers, > This is a two-part question: the first part is general, and > the second is specific to the psych package. > > First question: In the past I've constructed composite > variables from questionnaire data by using rowMeans(), and > then correlating items with the scale using cor() as an > informal check for "bad" items. Over the weekend I decided to > take a look at some of the packages in the psychometric task > view, to see if there was a way to simplify this process. I > looked at several packages, including psychometric, CTT, and > psych. I'm interested in hearing from others who need to do > this kind of thing frequently. What approach do you use? Do > you use one of the packages mentioned above? Are there other > packages I might want to take a look at? > > Second question: I spent some time with the psych package > trying to figure out how to use the score.items() function, > and it's become clear to me that I don't understand what it's > doing. I assumed that setting a key equal to -1 would result > in the item being reverse scored, but I get weird results, as > shown below. When I try to reverse score (by setting a value > of -1 in the key), I get scale scores that don't add up > (e.g., the mean score is reported as being larger than the > maximum item score). How is the score.items() function > intended to be used? Do I need to reverse score items before > using score.items()? > > Thanks, > Ista > > ########## score.items() example begins here ########## > > library(psych) > > Data.score <- > > > as.data.frame(matrix(c(40,29,40,32,1,1,3,1,5,3,3,44,24,47,31,4,4,1,1,4 > > > ,2,1,13,5,14,5,5,4,3,3,4,4,3,7,2,2,0,5,4,2,2,4,4,4,7,6,5,4,1,1,3,4,3,2 > > > ,1,18,15,21,8,6,6,1,1,6,6,6,9,10,15,7,5,4,2,1,5,5,5,10,7,12,6,2,2,4,4, > > 3,3,3,8,7,13,8,1,1,4,2,2,2,1,10,5,13,7,4,3,3,3,3,3,3), nrow=10, > > byrow=TRUE)) > > names(Data.score) <- > > > c("s1","s2","s3","s4","imi1","imi2","imi3","imi4","imi5","imi6","imi7" > > ) > > Data.score > s1 s2 s3 s4 imi1 imi2 imi3 imi4 imi5 imi6 imi7 > 1 40 29 40 32 1 1 3 1 5 3 3 > 2 44 24 47 31 4 4 1 1 4 2 1 > 3 13 5 14 5 5 4 3 3 4 4 3 > 4 7 2 2 0 5 4 2 2 4 4 4 > 5 7 6 5 4 1 1 3 4 3 2 1 > 6 18 15 21 8 6 6 1 1 6 6 6 > 7 9 10 15 7 5 4 2 1 5 5 5 > 8 10 7 12 6 2 2 4 4 3 3 3 > 9 8 7 13 8 1 1 4 2 2 2 1 > 10 10 5 13 7 4 3 3 3 3 3 3 > > > > #This works fine > > key.list <- list(silence=1:4, interest=5:11) keys <- > > make.keys(length(names(Data.score)), key.list, > > item.labels=names(Data.score)) scored <- score.items(keys, > Data.score, > > missing=FALSE, totals=FALSE) scored$scores > silence interest > [1,] 35.25 2.428571 > [2,] 36.50 2.428571 > [3,] 9.25 3.714286 > [4,] 2.75 3.571429 > [5,] 5.50 2.142857 > [6,] 15.50 4.571429 > [7,] 10.25 3.857143 > [8,] 8.75 3.000000 > [9,] 9.00 1.857143 > [10,] 8.75 3.142857 > > > > #This does not do what I expected. Mean interest scores are > higher than score of the highest item. > > key.list2 <- list(silence=1:4, interest=c(5,6,-7,-8,9,10,11)) > > keys2 <- make.keys(length(names(Data.score)), key.list2, > > item.labels=names(Data.score)) > > scored2 <- score.items(keys2, Data.score, missing=FALSE, > totals=FALSE) > > scored2$scores > silence interest > [1,] 35.25 14.71429 > [2,] 36.50 15.28571 > [3,] 9.25 15.42857 > [4,] 2.75 15.85714 > [5,] 5.50 13.57143 > [6,] 15.50 17.42857 > [7,] 10.25 16.42857 > [8,] 8.75 14.14286 > [9,] 9.00 13.57143 > [10,] 8.75 14.85714 > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Doran, Harold <HDoran <at> air.org> writes:> > Ista > > There are several functions in the MiscPsycho package that can be sued > for classical item analysis. >Since when is classical item analysis a crime? No wonder the USA is considered such a litigious society! Ken -- Ken Knoblauch Inserm U846 Stem-cell and Brain Research Institute Department of Integrative Neurosciences 18 avenue du Doyen L?pine 69500 Bron France tel: +33 (0)4 72 91 34 77 fax: +33 (0)4 72 91 34 61 portable: +33 (0)6 84 10 64 10 http://www.sbri.fr/members/kenneth-knoblauch.html