Celebrate Excellence in Education: Nominate Outstanding Educators by April 15!
Found this content helpful? Log in or sign up to leave a like!
I am looking for guidance on what the expected behaviour is for excused assignments when the total of assignment groups is greater than 100%.
First, I'll explain my understanding for the "easy" scenario where the total includes 100%.. Suppose the following. Three assignment groups, each containing a single graded item. Group 1 is worth 20%, Group 2: 40% and Group 3: 40%.
Suppose the student is excused from the single assignment in Group 1 and obtains a 100% and 50% for Group 2 and 3 respectively. Their grade is a 75% because the 20% is "allocated" to the other weights. (Screenshot attached). Note also that, obviously, the student does better than if they received a 0 in Group 1. In that case, they would have received a 60%. This makes sense, the excused is helping them.
Calculation: (40%+10%)*100%+(40%+10%)*50% =75% (The 10s being added are being reweighted from the excused assignment)
Now suppose all is the same except now the two latter groups are worth 60% each. In other words, now the total is 140% instead of 100%. What's the grade for the student now? 90%. (Screenshot attached) This feels odd. For one, this is no different than if the excused assignment had been assigned a grade of zero. There's no benefit here for excusing the student. Secondly, the calculation is clearly different.
If we use the same calculation method as before
Calculation: (60%+10%)*100%+(60%+10%)*50% =105%
Whereas this calculation appears to be consistent with
60% * 100% + 60% * 50% = 90%
It feels like having an excused result in the same outcome as a zero is not intended behaviour. Is there any documentation on the logic behind how excused assignment groups are reweighted? Are they ignored if the totals are greater than 100%? Or is this a weird bug?
Solved! Go to Solution.
@james_whalley explained this, but I wanted to clarify how the weights get distributed.
The final grade is a weighted average of the scores for assignment groups where the student has at least one score. An excused would keep them from having an assignment grade and if it was the only assignment in the assignment group, then the assignment group would be excluded.
Weighted average = (sum of weights * scores) / (sum of weights).
The weight is the percentage assigned to each category and the score is the percentage (total points scored / total points possible) for the assignment group.
The denominator is capped at 100%.
If the sum of the assignment group categories is less than 100%, then each assignment group proportionally counts more than it is weighted. If you have assignment groups worth 40%, 30%, 20%, and 10%, but only the 40%, 30%, and 20% have assignments for a student, then the sum of the weights is 90% and the numerator is divided by 0.9 to bring the final grade up to 100 possible. But it's proportional to the original weights (not equally distributed) so the first group counts 40/90, the second group 30/90, and the third group 20/90. If you had assignments in the 40% and 10% groups, then the total weight is 50% and the score would be doubled (divided by 0.5). The first group would now account for 40/50=80% and the second group would count for 10/50=20% of the grade.
The denominator never exceeds 100%, even when the assignment groups add up to more than 100%. This allows people to have extra credit.
By the way, Canvas has no idea which assignment groups are extra credit. It doesn't do parsing of the text to figure that out. All assignment groups go into the same calculation and if an extra credit assignment group has scores before the total of all the assignment groups meets 100%, it becomes part of their regular grade.
Hello @KyleMaclean,
This one was tricky at first and then I remembered that, when the weights of the included assignment groups adds up to 100% or more, missing any of the other assignment groups has no affect. This is how lots of people do extra credit (an extra group over the 100% that can't count against a student's grade). Basically, if you excuse a category that is in surplus to a weight total of 100%, it just gets ignored.
I tested this by giving the weights you explained above and then zeroed out the last category to see the max weight of one of the 60% weight categories. It was 60. I then tried the non-excused ones at 50% each and one zeroed out. I got 50.
Finally, I tried those categories at 45% and got 50%. I plugged your scores back in (100 on Group 2 and 50% on Group 3). This gave me a 75. The added weight in these categories only exists to bring the total possible weighting up to a minimum of 100%. In this case, it allocated an extra 5% to each group because Groups 2 and 3 only accounted for 90%.
I hope that all makes sense. TLDR: When the total of included weighted groups is under 100%, extra weight will be allocated to them to get to 100%. When the total weight possible is over 100%, even after an excused group, weights won't shift.
Best,
James
@james_whalley explained this, but I wanted to clarify how the weights get distributed.
The final grade is a weighted average of the scores for assignment groups where the student has at least one score. An excused would keep them from having an assignment grade and if it was the only assignment in the assignment group, then the assignment group would be excluded.
Weighted average = (sum of weights * scores) / (sum of weights).
The weight is the percentage assigned to each category and the score is the percentage (total points scored / total points possible) for the assignment group.
The denominator is capped at 100%.
If the sum of the assignment group categories is less than 100%, then each assignment group proportionally counts more than it is weighted. If you have assignment groups worth 40%, 30%, 20%, and 10%, but only the 40%, 30%, and 20% have assignments for a student, then the sum of the weights is 90% and the numerator is divided by 0.9 to bring the final grade up to 100 possible. But it's proportional to the original weights (not equally distributed) so the first group counts 40/90, the second group 30/90, and the third group 20/90. If you had assignments in the 40% and 10% groups, then the total weight is 50% and the score would be doubled (divided by 0.5). The first group would now account for 40/50=80% and the second group would count for 10/50=20% of the grade.
The denominator never exceeds 100%, even when the assignment groups add up to more than 100%. This allows people to have extra credit.
By the way, Canvas has no idea which assignment groups are extra credit. It doesn't do parsing of the text to figure that out. All assignment groups go into the same calculation and if an extra credit assignment group has scores before the total of all the assignment groups meets 100%, it becomes part of their regular grade.
Thank you to both @James and @james_whalley!!
Just for any future searchers who are having the same issue, I'll write down the mathematical formula for this that uses their insights and replicates to every example I've tried.
Canvas Final Grade = Weighted Grade / ( MIN( Sum of "Unexcused" grade weights ,1))
I thought about giving a mathematical formula with the minimum function, but I didn't want to rely on users knowing what that meant.
What you have doesn't really clear things up and perhaps confuses people based on your wording. The weighted grade is the final grade, not just the numerator. "Unexcused" grade weights is confusing. It's any assignment groups that have graded assignments in them. You don't really excuse assignment groups, you excuse individual assignments within the group. So talking about unexcused grade weights don't make sense. It is much simpler to say "assignment group where the student has at least one scored assignment in it", but then that becomes long and cumbersome and difficult to understand.
Note that which assignment groups are scored can vary by student. Tommy may have all different assignment groups than Susie does.
Sometimes saying it precisely leads to even more confusion. Here's how Canvas calculates it. But if I try to explain it to people this way, most roll their eyes. It's easier to say it's a weighted average.
(1) For all assignment groups in which a student has at least one scored assignment and (2) provided the sum of the weights of the assignment groups is not 0, then:
Canvas Final Score = [ sum of the assignment group weight times the proportion of possible points for that group ] / [ minimum ( sum of the assignment group weights, 100 ) ]
A minor point: You could use 1 instead of 100 within the minimum, but Canvas treats the weights as percentages (without the % sign), not as proportions. The score within the assignment group is a proportion (points achieved / points possible), so to come up with a number between 0 and 100 (rather than 0 and 1), it treats the weights as percentages rather than proportions.
To see, this, you can add /graphiql to the end of your Canvas dashboard URL to open the graphql explorer.
Paste this code in the box and then change 3903130 to be one of your courses (instead of mine).
query assignmentGroupWeights {
course(id: "3903130") {
assignmentGroupsConnection {
nodes {
_id
name
groupWeight
state
}
}
}
}
Now click on the execute / play triangle at the top.
You'll get something like this:
{
"data": {
"course": {
"assignmentGroupsConnection": {
"nodes": [
{
"_id": "7479521",
"name": "Activities",
"groupWeight": 10,
"state": "available"
},
{
"_id": "7455212",
"name": "Assignments",
"groupWeight": 0,
"state": "deleted"
},
{
"_id": "7479522",
"name": "Assignments",
"groupWeight": 10,
"state": "available"
},
{
"_id": "7479523",
"name": "Projects",
"groupWeight": 35,
"state": "available"
},
{
"_id": "7479524",
"name": "Concepts",
"groupWeight": 45,
"state": "available"
},
{
"_id": "7479525",
"name": "Badges",
"groupWeight": 0,
"state": "available"
},
{
"_id": "7517168",
"name": "Imported Assignments",
"groupWeight": 0,
"state": "deleted"
}
]
}
}
}
}
You can also verify it by looking at the source code that does the calculation.
Canvas doesn't actually use a minimum function, though. They use some if () statements. If the fullWeight (the sum of all the weights) is 0, your grade is null. This takes care of the division by 0 restriction. If the fullWeight is less than 100, then it adjusts it using the weightedPercent() function. Otherwise, it returns the weighted grade.
To participate in the Instructure Community, you need to sign up or log in:
Sign In