cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Surveyor

Rubric with Negative Points

Jump to solution

Is there a way to add a rubric item that allows a negative score (more than -1).

I'd like to have an item that, if the student's paper is done correctly is worth 0 points and if done incorrectly is worth -10 points.

Tags (2)
1 Solution

Accepted Solutions
Highlighted
Navigator

lynchs@sanjuancollege.edu​,

While kblack@dom.edu did a stellar job of testing and documenting and it looks like it would work, I would caution against actually using it. The nature of "you can go negative, but only to -1" makes it sound suspiciously like something that will be discovered as a bug and "fixed" so that it doesn't work anymore.

A quick perusal of the source code steered me to where I think the problem lies. I didn't do any testing to confirm the issue, but sometimes things just jump out at you as not looking right. I think the problem stems from the way they check rating values in the edit_rubric.js source file.

There is a note that says they are going to scan from right to left and make sure the points never decrease and round them all to 2 decimal places. That sounds good: If a rating is worth 3 points, then the rating to the left of it can't be worth less than 3 points. If that cell is worth 3.5 points, then they set the smallest value to be 3.5, so the number to the left of that cell must be at least 3.5. They then repeat this process for the whole criterion.

The problem people are experiencing stems from the way they check it. They assign an initial value to the last-seen rating points rather than using the initial value in the right-most cell. That is, they pick a value to compare the smallest value to rather than using the value in the right-most cell as the smallest value.

I used that practice many years ago as the prevailing wisdom was to always initialize your variables to some value to make sure that you didn't later try to act on an undefined value. Using an undefined variable in a comparison throws exceptions in JavaScript, which can cause the code to not work, which is a bad thing. The typical way we did it was to pick some value that could not possibly be legitimate. So, if we were looking for the maximum value of a bunch of positive (non-negative) values, we might initialize the variable to -1. If we're trying to find the smallest value, then we might initialize it to 999. The first value will be larger (or smaller in the second case) than the previous value and so we would set our number to the new value. If we got to the end and the value was still -1 (or 999) then we would know that we didn't have any valid data.

Another way to handle the initialization was to set the value equal to the first value. But that meant altering your looping structure, so instead of going from 1...n, you would go from 2...n because you had already assigned the value in position 1 (yes, I know JavaScript is 0 based, but it's easier to explain if you start at 1). The problem is that Canvas isn't using a counter-based approach, they're using the jQuery .each() method, which iterates over all of the values, including the first one.

I mentioned what I used to do. Now what I do is to declare a variable but leave it undefined. Yes, I know the prevailing wisdom was to not do that. But I add a check to see if it's undefined and if so, make the current value my initial one. If it is already defined, then I do the normal comparison. It adds to the complexity of the code, so initializing it is an easier way to go and it makes for simpler code.

Canvas is taking the first approach. They're initializing it before they iterate over the criterion, rather than setting it equal to the first value it finds. They needed to pick a value that was not larger than the minimum allowable rating in a rubric.

Canvas initialized their rating_points variable to -1.

That's why you can't set anything lower than a -1. If your value is less than the existing value (which is preset to -1), it will replace your value with the existing value (of -1). If they had set it to -10, then you wouldn't be able to use anything less than -10. If they had set it to 0, then you couldn't use anything less than 0. You could, however, still use 0 as it only replaces your value when it's less than the previous minimum value.

If Canvas really doesn't want to allow negative values in rubrics at all, then they should initialize that to 0, not to -1. If they want to allow negative values, then should use the value in the right-most criterion as the minimum and make sure that everything else is at least that value.

While I'm not going to file a bug report on this, it's very unlikely the desired behavior and so it may change without notice.

That's why I suggest not using negative point values in a rubric.

View solution in original post

10 Replies
Highlighted
Community Member

Hi lynchs@sanjuancollege.edu​ -

I experimented with this a little bit, and the basic answer to your question as you ask it is "no."  Interestingly, I did find that Canvas will accept a -1 value for the lowest value in a criteria row on a rubric AND accept decimal values between 0 and -1 within that row for your ratings.  As soon as you type in -10 within a row, however, Canvas will change it to -1.  Also, be prepared for a lot of frustration while editing it, because just when you think you have a row that is looking good, Canvas will often change some values to 0.  I found that you may have to work from the right-to-left while editing a row (lowest to highest) rather than the more conventional right-to-left. 

Here is a rubric that I created--after a bit of trial-and-error while experiencing the above issues.  (Pardon the wording on the columns--I wasn't quite sure how to express something with negative numbers!) Note that the total point value on the assignment is 0 points:

negative rubric.jpg

And this DID work while grading in SpeedGrader:

graded rubric.jpg

So, I suppose your scenario could work out if you could come up with a rubric of 10 criteria rows to get up to a -10 total point value somehow, since on my example I was able to get "up" to -4:

negative four.jpg

Otherwise, I'm not too sure of a way you could do this with anything less than 10 rows.

Hope this helps a bit.

Highlighted
Surveyor

Thanks Ken...  a lot harder than I'd like to use; but it sure looks like it'd work.

Highlighted
Navigator

lynchs@sanjuancollege.edu​,

While kblack@dom.edu did a stellar job of testing and documenting and it looks like it would work, I would caution against actually using it. The nature of "you can go negative, but only to -1" makes it sound suspiciously like something that will be discovered as a bug and "fixed" so that it doesn't work anymore.

A quick perusal of the source code steered me to where I think the problem lies. I didn't do any testing to confirm the issue, but sometimes things just jump out at you as not looking right. I think the problem stems from the way they check rating values in the edit_rubric.js source file.

There is a note that says they are going to scan from right to left and make sure the points never decrease and round them all to 2 decimal places. That sounds good: If a rating is worth 3 points, then the rating to the left of it can't be worth less than 3 points. If that cell is worth 3.5 points, then they set the smallest value to be 3.5, so the number to the left of that cell must be at least 3.5. They then repeat this process for the whole criterion.

The problem people are experiencing stems from the way they check it. They assign an initial value to the last-seen rating points rather than using the initial value in the right-most cell. That is, they pick a value to compare the smallest value to rather than using the value in the right-most cell as the smallest value.

I used that practice many years ago as the prevailing wisdom was to always initialize your variables to some value to make sure that you didn't later try to act on an undefined value. Using an undefined variable in a comparison throws exceptions in JavaScript, which can cause the code to not work, which is a bad thing. The typical way we did it was to pick some value that could not possibly be legitimate. So, if we were looking for the maximum value of a bunch of positive (non-negative) values, we might initialize the variable to -1. If we're trying to find the smallest value, then we might initialize it to 999. The first value will be larger (or smaller in the second case) than the previous value and so we would set our number to the new value. If we got to the end and the value was still -1 (or 999) then we would know that we didn't have any valid data.

Another way to handle the initialization was to set the value equal to the first value. But that meant altering your looping structure, so instead of going from 1...n, you would go from 2...n because you had already assigned the value in position 1 (yes, I know JavaScript is 0 based, but it's easier to explain if you start at 1). The problem is that Canvas isn't using a counter-based approach, they're using the jQuery .each() method, which iterates over all of the values, including the first one.

I mentioned what I used to do. Now what I do is to declare a variable but leave it undefined. Yes, I know the prevailing wisdom was to not do that. But I add a check to see if it's undefined and if so, make the current value my initial one. If it is already defined, then I do the normal comparison. It adds to the complexity of the code, so initializing it is an easier way to go and it makes for simpler code.

Canvas is taking the first approach. They're initializing it before they iterate over the criterion, rather than setting it equal to the first value it finds. They needed to pick a value that was not larger than the minimum allowable rating in a rubric.

Canvas initialized their rating_points variable to -1.

That's why you can't set anything lower than a -1. If your value is less than the existing value (which is preset to -1), it will replace your value with the existing value (of -1). If they had set it to -10, then you wouldn't be able to use anything less than -10. If they had set it to 0, then you couldn't use anything less than 0. You could, however, still use 0 as it only replaces your value when it's less than the previous minimum value.

If Canvas really doesn't want to allow negative values in rubrics at all, then they should initialize that to 0, not to -1. If they want to allow negative values, then should use the value in the right-most criterion as the minimum and make sure that everything else is at least that value.

While I'm not going to file a bug report on this, it's very unlikely the desired behavior and so it may change without notice.

That's why I suggest not using negative point values in a rubric.

View solution in original post

Highlighted
Community Member

Thank you, james@richland.edu​, for your always thorough explanation of things--and for that code link.  That would certainly explain why I had values randomly changing to 0 for me when I was trying to put in negative values.

lynchs@sanjuancollege.edu​--you would do well to follow James' advice, given the code that he explained.  So although the Gradebook itself indeed allows negative values, those grades would have to be input manually rather than through a rubric.

Highlighted
Community Member

This is a nice work around, but I see this function could be improved. We should definitely see if this can be altered to allow for values less than negative one. Professors may be able to adjust points with special settings in the grade book, but sometimes that can get complicated. This would make things easier to understand and could apply to assignments individually. 

Highlighted
Community Member

I would like to jump on this bandwagon. We have instructors that would like to be able to use negative points greater (smaller?) than -1. An example:

After using the rubric to grade elements of a paper, the instructor would like to have a criterion worth zero points for whether or not the Bibliography was included.  If it was included, there are no additional points awarded, but if it wasn't the instructor wants to deduct -5 from the points awarded thus far. 

Lesley

Highlighted
Community Member

Hi lesley.cryderman@cgc.edu‌ - I was about to recommend that you submit a Feature Idea, but it looks like one that may get to the same resolution you present has already been submitted and is still open for voting:  https://community.canvaslms.com/ideas/8911-rubric-option-to-subtract-points-for-late-work 

0 Kudos
Highlighted
Community Member

I really like the concept of applying negative points. The most common use case in my grading process deals with late assignments. I'd like to be able to grade the assignment to show what grade an on-time assignment would have earned and then to show the point impact of being late. It is sort of like those speed signs that show your speed on a display. In reality, that info was already available to you. Posting it specifically has makes it explicit to our brains.

Highlighted
Community Member

I would like to be able to include negative points so that I can score -5 for incorrect formatting or a negative something for failure to meet minimum word or page counts. This would, as Mark said above, make it clear what the score could have been. It would also allow for point deductions without having the rubric give points for something like doing the formatting correctly or meeting the minimum word or page counts.