vRating is a made up statistic implemented into vexdb.io According to the creator of vexdb, vRating is meaningless and a broken stat.
Statement from VexDB’s Creator regarding vRating:
I don’t really remember much about it. I didn’t develop it I merely implemented it. It didn’t serve its purpose which is why it’s no longer on the VexDB website (but is still available through the API as you’ve noticed).
The following is the algorithm that was given to me to implement:
// Calculate vRating
/* var1 = (totalcompetitors - totalrank) / (totalcompetitors - rankings.length);
var2 = (totalwins + 0.5 * totalties) / (totalwins + totallosses + totalties);
var3 = (totalopr / rankings.length) / (totalscore / matches.length * 0.66);
var4 = (totalccwm) / ((totalopr + totaldpr) / 2);
vrating = var1 * 0.25 + var2 * 0.25 + var3 * 0.25 + var4 * 0.25;
Most of the variables used there should be quite self explanatory (“total” just being the sum for the season).
“totalcompetitors” was the total number of robots that the team came up against
“rankings.length” is the number of rankings that the team had (i.e. the number of events they participated in)
“matches.length” is the number of matches that the team played in.
The idea they had was that it would be a number between 0 and 1 giving a team’s strength for the season. Each of the 4 parts was meant to give a number between 0 and 1 but this was not the case. I remember talking to Jordan from BNS about all the issues with it ages ago, and how some of the parts don’t even make any sense, hence why it was removed from the site. I think Jordan still wanted to use it though so I left it in the API.
var1 doesn’t really make much sense, I assume they meant to try make it the average finishing position for the team scaled, but that’s not what that is.
var2 is okay, and the only one that makes sense to me (win percentage)
var3 tries to create some relationship between average OPR and average match score which I don’t understand the point of, OPR already includes match score so it seems a bit strange, also isn’t necessarily between 0 and 1 (OPR could be negative), and where does the 0.66 come from?
var 4 also doesn’t make any sense to me. CCWM = OPR - DPR so all this variable ended up doing was greatly prioritising defensive teams (a good defensive team has a negative DPR which will increase the top half and decrease the bottom half of the fraction). Also again not limited to between 0 and 1 and for teams that are greatly defensive this number can be negative which completely makes no sense
So yeah, I didn’t think it was very good, but if you want to use it feel free, in my implementation it’s just scaled by 100 (so 100 was meant to be the top score, and 0 the lowest, but you’ll definitely find some outside those bounds).