function square(x) return x * x end function mean(a) local s = 0 local c = 0 for i,v in pairs(a) do s = s + v c = c + 1 end return s / c end function averageSquareDiff(a, predictions) local results = {} for i,x in pairs(predictions) do table.insert(results, square(x - a)) end return mean(results) end function diversityTheorem(truth, predictions) local average = mean(predictions) print("average-error: " .. averageSquareDiff(truth, predictions)) print("crowd-error: " .. square(truth - average)) print("diversity: " .. averageSquareDiff(average, predictions)) end function main() diversityTheorem(49, {48, 47, 51}) diversityTheorem(49, {48, 47, 51, 42}) end main()