Created
May 7, 2013 23:58
-
-
Save joshknutson/5537178 to your computer and use it in GitHub Desktop.
coldfusion sample for power law score for having predictive scores
basis from http://easygradepro.com/modules/cms/pages.phtml?sessionid=&pageid=236899
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<cfsilent> | |
<!--- create array object ---> | |
<!--- proof 1 ---> | |
<cfset assignments1 = []/> | |
<cfset assignment = {id=1,score=2} /> | |
<cfset ArrayAppend(assignments1,assignment) /> | |
<cfset assignment = {id=2,score=2} /> | |
<cfset ArrayAppend(assignments1,assignment) /> | |
<cfset assignment = {id=3,score=2} /> | |
<cfset ArrayAppend(assignments1,assignment) /> | |
<cfset assignment = {id=4,score=4} /> | |
<cfset ArrayAppend(assignments1,assignment) /> | |
<!--- proof R | |
<cfset assignmentsR = []/> | |
<cfset assignment = {id=1,score=10} /> | |
<cfset ArrayAppend(assignmentsR,assignment) /> | |
<cfset assignment = {id=2,score=20} /> | |
<cfset ArrayAppend(assignmentsR,assignment) /> | |
<cfset assignment = {id=3,score=30} /> | |
<cfset ArrayAppend(assignmentsR,assignment) /> | |
<cfset assignment = {id=4,score=40} /> | |
<cfset ArrayAppend(assignmentsR,assignment) /> ---> | |
<!--- proof 2 ---> | |
<cfset assignments2 = []/> | |
<cfset assignment = {id=1,score=1} /> | |
<cfset ArrayAppend(assignments2,assignment) /> | |
<cfset assignment = {id=2,score=3} /> | |
<cfset ArrayAppend(assignments2,assignment) /> | |
<cfset assignment = {id=3,score=2} /> | |
<cfset ArrayAppend(assignments2,assignment) /> | |
<cfset assignment = {id=4,score=4} /> | |
<cfset ArrayAppend(assignments2,assignment) /> | |
<!--- proof 3 ---> | |
<cfset assignments3 = []/> | |
<cfset assignment = {id=1,score=2} /> | |
<cfset ArrayAppend(assignments3,assignment) /> | |
<cfset assignment = {id=2,score=4} /> | |
<cfset ArrayAppend(assignments3,assignment) /> | |
<cfset assignment = {id=3,score=1} /> | |
<cfset ArrayAppend(assignments3,assignment) /> | |
<cfset assignment = {id=4,score=3} /> | |
<cfset ArrayAppend(assignments3,assignment) /> | |
<!--- proof 4 ---> | |
<cfset assignments4 = []/> | |
<cfset assignment = {id=1,score=4} /> | |
<cfset ArrayAppend(assignments4,assignment) /> | |
<cfset assignment = {id=2,score=3} /> | |
<cfset ArrayAppend(assignments4,assignment) /> | |
<cfset assignment = {id=3,score=2} /> | |
<cfset ArrayAppend(assignments4,assignment) /> | |
<cfset assignment = {id=4,score=1} /> | |
<cfset ArrayAppend(assignments4,assignment) /> | |
</cfsilent> | |
<cfoutput> | |
<h3>Test case for creating a power law score to create a predictive score based on the assignment scores the student already has</h3> | |
1 = #getPowerLawScore(assignments1)#<br /> | |
<!--- R = #getPowerLawScore(assignmentsR)#<br /> ---> | |
2 = #getPowerLawScore(assignments2)#<br /> | |
3 = #getPowerLawScore(assignments3)#<br /> | |
4 = #getPowerLawScore(assignments4)#<br /> | |
</cfoutput> | |
<cfchart format="flash" xaxistitle="Assignment" yaxistitle="Score" title="Student 1"> | |
<cfchartseries type="line"> | |
<cfloop array="#assignments1#" index="i"> | |
<cfchartdata item="#i.id#" value="#i.score#"> | |
</cfloop> | |
<cfchartdata item="#arraylen(assignments1) + 1#" value="#getPowerLawScore(assignments1)#"> | |
</cfchartseries> | |
</cfchart> | |
<cfchart format="flash" xaxistitle="Assignment" yaxistitle="Score" title="Student 2"> | |
<cfchartseries type="line"> | |
<cfloop array="#assignments2#" index="i"> | |
<cfchartdata item="#i.id#" value="#i.score#"> | |
</cfloop> | |
<cfchartdata item="#arraylen(assignments2) + 1#" value="#getPowerLawScore(assignments2)#"> | |
</cfchartseries> | |
</cfchart> | |
<cfchart format="flash" xaxistitle="Assignment" yaxistitle="Score" title="Student 3"> | |
<cfchartseries type="line"> | |
<cfloop array="#assignments3#" index="i"> | |
<cfchartdata item="#i.id#" value="#i.score#"> | |
</cfloop> | |
<cfchartdata item="#arraylen(assignments3) + 1#" value="#getPowerLawScore(assignments3)#"> | |
</cfchartseries> | |
</cfchart> | |
<cfchart format="flash" xaxistitle="Assignment" yaxistitle="Score" title="Student 4"> | |
<cfchartseries type="line"> | |
<cfloop array="#assignments4#" index="i"> | |
<cfchartdata item="#i.id#" value="#i.score#"> | |
</cfloop> | |
<cfchartdata item="#arraylen(assignments4) + 1#" value="#getPowerLawScore(assignments4)#"> | |
</cfchartseries> | |
</cfchart> | |
<cffunction name="getPowerLawScore" access="public" output="false" returntype="string" hint="pass in an array get a number back"> | |
<cfargument name="assignmentArray" required="true" type="array" hint="very simple array sorted by the date taken"/> | |
<cfset var local = {} /> | |
<cfset var k = "" /> | |
<cfset var a = "" /> | |
<cfset var b = "" /> | |
<cfset var c = "" /> | |
<cfset var d = "" /> | |
<cfset var e = "" /> | |
<cfset var f = "" /> | |
<cfset var g = "" /> | |
<cfset var i = "" /> | |
<cfset var pl = "" /> | |
<cfset k = arraylen(arguments.assignmentArray) /> | |
<!---set up the a variable---> | |
<cfset a = log(k) /> | |
a = #a# | |
<!---set up the b variable---> | |
<cfset local.formula = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,"(#log(i)#)*(#log(arguments.assignmentArray[i].score)#)") /> | |
</cfloop> | |
<cfset local.formula = replace(local.formula,",","+","all")/> | |
<cfset b = evaluate(local.formula) /> | |
<br />b = #b# | |
<!---set up the c variable---> | |
<cfset local.formula = "" /> | |
<cfset local.formulaB = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,log(i)) /> | |
<cfset local.formulaB = listappend(local.formulaB,log(arguments.assignmentArray[i].score)) /> | |
</cfloop> | |
<cfset local.formula = replace(local.formula,",","+","all")/> | |
<cfset local.formulaB = replace(local.formulaB,",","+","all")/> | |
<cfset c = evaluate("(#local.formula#) * (#local.formulaB#)") /> | |
<br />c = #c# | |
<!---set up the d variable---> | |
<cfset local.formula = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,log(i)) /> | |
</cfloop> | |
<cfset local.formula = "("&replace(local.formula,",",")^2+(","all")&")^2"/> | |
<cfset d = evaluate(local.formula) /> | |
<br />d = #d# | |
<!---set up the e variable---> | |
<cfset local.formula = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,log(i)) /> | |
</cfloop> | |
<cfset local.formula = "("&replace(local.formula,",","+","all")&")^2"/> | |
<cfset e = evaluate(local.formula) /> | |
<br />e = #e# | |
<!---set up the f variable---> | |
<cfset local.formula = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,log(arguments.assignmentArray[i].score)) /> | |
</cfloop> | |
<cfset local.formula = "("&replace(local.formula,",","+","all")&")"/> | |
<cfset f = evaluate(local.formula) /> | |
<br />f = #f# | |
<!---set up the g variable---> | |
<cfset local.formula = "" /> | |
<cfloop from="1" to="#k#" index="i"> | |
<cfset local.formula = listappend(local.formula,"log(#i#)") /> | |
</cfloop> | |
<cfset local.formula = "("&replace(local.formula,",","+","all")&")"/> | |
<cfset g = evaluate(local.formula) /> | |
<br />g = #g# | |
<!--- finally we get to the real formula ---> | |
<cfset pl = exp((a*(b-(c/k))/(d-(c/k))) + ((f-g*((b-(c/k))/(d-(c/k))))/k)) /> | |
<br />pl = "exp((#a#*(#b#-(#c#/#k#))/(#d#-(#c#/#k#))) + ((#f#-#g#*((#b#-(#c#/#k#))/(#d#-(#c#/#k#))))/#k#))"<br /> | |
<cfreturn pl /> | |
</cffunction> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment