Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- df <- data.frame(c(rep("s1", 5), rep("s2", 5), rep("s3", 5),rep("s4", 5)),"a1", c("i1", "i2", "i3", "i4", "i5"), c(1, 0), 1)
- colnames(df) <- c("student", "assessment", "item", "score", "points.possible")
- unique <- subset(df[,c("assessment", "item")], !duplicated(df[,c("assessment", "item")]))
- fun1 <- function(a.id, i.id) {
- # subset original dataframe for just one assessment
- subsetdf <- df[df$assessment == a.id,]
- # generate list of students that got the item right and wrong
- correct <- subsetdf$student[subsetdf$item==i.id & subsetdf$score==1]
- wrong <- subsetdf$student[subsetdf$item==i.id & subsetdf$score==0]
- # scores by student
- scores <- aggregate(score ~ student, data=subsetdf,sum)/aggregate(points.possible ~ student, data=subsetdf, sum)
- # average scores for students that got item right/wrong
- x.1 <- sum(subsetdf$score[subsetdf$student %in% correct])/sum(subsetdf$points.possible[subsetdf$student %in% correct])
- x.0 <- sum(subsetdf$score[subsetdf$student %in% wrong])/sum(subsetdf$points.possible[subsetdf$student %in% wrong])
- # percent of students that got item right
- p <- length(correct)/(length(correct)+length(wrong))
- # final stat calculation
- r <- ((x.1-x.0)*sqrt(p*(1-p)))/sd(scores[,2])
- print(r)
- }
- unique$r <- mapply(fun1, unique$assessment, unique$item)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement