Skip to content

Instantly share code, notes, and snippets.

@joshknutson
Created May 7, 2013 23:58
Show Gist options
  • Save joshknutson/5537178 to your computer and use it in GitHub Desktop.
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
<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