Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. 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)
  2.  
  3. colnames(df) <- c("student", "assessment", "item", "score", "points.possible")
  4.  
  5. unique <- subset(df[,c("assessment", "item")], !duplicated(df[,c("assessment", "item")]))
  6.  
  7. fun1 <- function(a.id, i.id) {
  8. # subset original dataframe for just one assessment
  9. subsetdf <- df[df$assessment == a.id,]
  10.  
  11. # generate list of students that got the item right and wrong
  12. correct <- subsetdf$student[subsetdf$item==i.id & subsetdf$score==1]
  13. wrong <- subsetdf$student[subsetdf$item==i.id & subsetdf$score==0]
  14.  
  15. # scores by student
  16. scores <- aggregate(score ~ student, data=subsetdf,sum)/aggregate(points.possible ~ student, data=subsetdf, sum)
  17.  
  18. # average scores for students that got item right/wrong
  19. x.1 <- sum(subsetdf$score[subsetdf$student %in% correct])/sum(subsetdf$points.possible[subsetdf$student %in% correct])
  20. x.0 <- sum(subsetdf$score[subsetdf$student %in% wrong])/sum(subsetdf$points.possible[subsetdf$student %in% wrong])
  21.  
  22. # percent of students that got item right
  23. p <- length(correct)/(length(correct)+length(wrong))
  24.  
  25. # final stat calculation
  26. r <- ((x.1-x.0)*sqrt(p*(1-p)))/sd(scores[,2])
  27. print(r)
  28. }
  29.  
  30. unique$r <- mapply(fun1, unique$assessment, unique$item)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement