Use weighted average instead of simple average when calculating response rates

rpp-main
Gabe Farrell 3 years ago
parent 3f4aa8e7af
commit 8f0deab53b

@ -2,7 +2,17 @@
class StudentResponseRateCalculator < ResponseRateCalculator class StudentResponseRateCalculator < ResponseRateCalculator
def raw_response_rate def raw_response_rate
rates_by_grade.length.positive? ? rates_by_grade.average : 0 rates_by_grade.values.length.positive? ? weighted_average : 0
end
def weighted_average
num_possible_responses = 0.0
rates_by_grade.keys.map do |grade|
num_possible_responses += enrollment_by_grade[grade]
end
rates_by_grade.map do |grade, rate|
rate * (enrollment_by_grade[grade] / num_possible_responses)
end.sum
end end
def rates_by_grade def rates_by_grade
@ -15,16 +25,20 @@ class StudentResponseRateCalculator < ResponseRateCalculator
next nil next nil
end end
actual_response_count_for_grade / count_of_survey_items_with_sufficient_responses / num_of_students_in_grade * 100 [grade, actual_response_count_for_grade / count_of_survey_items_with_sufficient_responses / num_of_students_in_grade * 100]
end.compact end.compact.to_h
end end
def enrollment_by_grade def enrollment_by_grade
@enrollment_by_grade ||= respondents.counts_by_grade @enrollment_by_grade ||= respondents.counts_by_grade
end end
def total_enrollment
respondents.counts_by_grade.sum
end
def survey_items_have_sufficient_responses? def survey_items_have_sufficient_responses?
rates_by_grade.length.positive? rates_by_grade.values.length.positive?
end end
def survey_items_with_sufficient_responses(grade:) def survey_items_with_sufficient_responses(grade:)

Loading…
Cancel
Save