This document can be found on RPubs http://rpubs.com/ShKlinkenberg/225952
min.score = 0
min.grade = 1
min.grade = min.grade/10
max.score = 100
cutoff.precentage = .5
guess.score = 20
non.guess.score = max.score - guess.score
guess.percentage = guess.score / max.score
score = min.score:max.score
score
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[42] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
[83] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
ScoreGradeTransformation <- function(score, guess.score, min.grade, cutoff.precentage, max.score) {
# Computes the grade corrected for guessing.
#
# Args:
# score : Value or vector with raw exam scores
# guess.score : Total amount of raw guessing score
# min.grade : Minimal grate to be given
# cutoff.precentage : Raw cut-off score for a pass mark
# max.score : Maximum raw score to be given
#
# Returns:
# Grade expressed as a number between minimal grade and 10
# Setup vector to store grades
grade = vector()
# Determine cut-off score based on percentage and guessing score
cutoff.score = guess.score + ( cutoff.precentage * (non.guess.score) )
# Grade when guessing
grade[score <= guess.score] = min.grade
# Grade between guessing and cutoff
## Slope of transformation function
a.tot.cutoff = (cutoff.precentage - min.grade) / (cutoff.score - guess.score); a.tot.cutoff
grade[score > guess.score & score < cutoff.score] = (a.tot.cutoff * (score[score > guess.score & score < cutoff.score]-guess.score)) + min.grade
# Grade between cutoff and max score
## Slope of transformation function
a.na.cutoff = (1 - cutoff.precentage) / (max.score - cutoff.score); a.na.cutoff
grade[score >= cutoff.score] = (a.na.cutoff * (score[score >= cutoff.score]-cutoff.score)) + cutoff.precentage
return(grade * 10)
}
grade <- ScoreGradeTransformation(score, guess.score, min.grade, cutoff.precentage, max.score)