mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 21:48:16 -08:00
Change the sufficiency threshold from a static number of minimum responses to a minimum response rate of 25 percent
This commit is contained in:
parent
d4df7cbc06
commit
2a2777745a
20 changed files with 180 additions and 138 deletions
|
|
@ -83,19 +83,13 @@ class Measure < ActiveRecord::Base
|
|||
def sufficient_student_data?(school:, academic_year:)
|
||||
return false unless includes_student_survey_items?
|
||||
|
||||
average_response_count = student_survey_items.map do |survey_item|
|
||||
survey_item.survey_item_responses.where(school:, academic_year:).count
|
||||
end.average
|
||||
average_response_count >= SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD
|
||||
subcategory.student_response_rate(school:, academic_year:).meets_student_threshold?
|
||||
end
|
||||
|
||||
def sufficient_teacher_data?(school:, academic_year:)
|
||||
return false unless includes_teacher_survey_items?
|
||||
|
||||
average_response_count = teacher_survey_items.map do |survey_item|
|
||||
survey_item.survey_item_responses.where(school:, academic_year:).count
|
||||
end.average
|
||||
average_response_count >= SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD
|
||||
subcategory.teacher_response_rate(school:, academic_year:).meets_teacher_threshold?
|
||||
end
|
||||
|
||||
def sufficient_data?(school:, academic_year:)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
module ResponseRate
|
||||
TEACHER_RATE_THRESHOLD = 0.25
|
||||
STUDENT_RATE_THRESHOLD = 0.25
|
||||
|
||||
def initialize(subcategory:, school:, academic_year:)
|
||||
@subcategory = subcategory
|
||||
@school = school
|
||||
|
|
@ -14,4 +17,12 @@ module ResponseRate
|
|||
|
||||
(average_responses_per_survey_item / total_possible_responses.to_f * 100).round
|
||||
end
|
||||
|
||||
def meets_student_threshold?
|
||||
rate >= STUDENT_RATE_THRESHOLD * 100
|
||||
end
|
||||
|
||||
def meets_teacher_threshold?
|
||||
rate >= TEACHER_RATE_THRESHOLD * 100
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ class StudentResponseRate
|
|||
private
|
||||
|
||||
def survey_item_count
|
||||
@student_survey_item_count ||= @subcategory.measures.map { |measure| measure.student_survey_items.count }.sum
|
||||
@survey_item_count ||= @subcategory.measures.map { |measure| measure.student_survey_items.count }.sum
|
||||
end
|
||||
|
||||
def response_count
|
||||
@student_response_count ||= @subcategory.measures.map do |measure|
|
||||
@response_count ||= @subcategory.measures.map do |measure|
|
||||
measure.student_survey_items.map do |survey_item|
|
||||
survey_item.survey_item_responses.where(school: @school, academic_year: @academic_year).count
|
||||
end.sum
|
||||
|
|
@ -16,7 +16,7 @@ class StudentResponseRate
|
|||
end
|
||||
|
||||
def total_possible_responses
|
||||
@total_possible_student_responses ||= begin
|
||||
@total_possible_responses ||= begin
|
||||
total_responses = Respondent.where(school: @school, academic_year: @academic_year).first
|
||||
return 0 unless total_responses.present?
|
||||
|
||||
|
|
|
|||
|
|
@ -10,4 +10,20 @@ class Subcategory < ActiveRecord::Base
|
|||
scores = scores.reject(&:nil?)
|
||||
scores.average
|
||||
end
|
||||
|
||||
def student_response_rate(school:, academic_year:)
|
||||
@student_response_rate ||= Hash.new do |memo|
|
||||
memo[[school, academic_year]] = StudentResponseRate.new(subcategory: self, school:, academic_year:)
|
||||
end
|
||||
|
||||
@student_response_rate[[school, academic_year]]
|
||||
end
|
||||
|
||||
def teacher_response_rate(school:, academic_year:)
|
||||
@teacher_response_rate ||= Hash.new do |memo|
|
||||
memo[[school, academic_year]] = TeacherResponseRate.new(subcategory: self, school:, academic_year:)
|
||||
end
|
||||
|
||||
@teacher_response_rate[[school, academic_year]]
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
class SurveyItemResponse < ActiveRecord::Base
|
||||
TEACHER_RESPONSE_THRESHOLD = 17
|
||||
STUDENT_RESPONSE_THRESHOLD = 196
|
||||
TEACHER_RESPONSE_THRESHOLD = 2
|
||||
STUDENT_RESPONSE_THRESHOLD = 2
|
||||
|
||||
belongs_to :academic_year
|
||||
belongs_to :school
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ class TeacherResponseRate
|
|||
end
|
||||
|
||||
def survey_item_count
|
||||
@teacher_survey_item_count ||= @subcategory.measures.map { |measure| measure.teacher_survey_items.count }.sum
|
||||
@survey_item_count ||= @subcategory.measures.map { |measure| measure.teacher_survey_items.count }.sum
|
||||
end
|
||||
|
||||
def response_count
|
||||
@teacher_response_count ||= @subcategory.measures.map do |measure|
|
||||
@response_count ||= @subcategory.measures.map do |measure|
|
||||
measure.teacher_survey_items.map do |survey_item|
|
||||
survey_item.survey_item_responses.where(school: @school, academic_year: @academic_year).count
|
||||
end.sum
|
||||
|
|
@ -24,7 +24,7 @@ class TeacherResponseRate
|
|||
end
|
||||
|
||||
def total_possible_responses
|
||||
@total_possible_teacher_responses ||= begin
|
||||
@total_possible_responses ||= begin
|
||||
total_responses = Respondent.where(school: @school, academic_year: @academic_year).first
|
||||
return 0 unless total_responses.present?
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue