Here is a ZIP file containing the component OPR scores.
The columns are as follows:
Team Number, Final Score, Qual, Coop, Auto, RC, Tote, Litter, DQ
South Florida (FLFO) and Lake Superior (MNDU) are missing: I’m pondering the best way to handle the surrogate team data (in the Match Results) with the Rankings data (which doesn’t have surrogate data).
Did you get these component OPRs by forming a system [N][x] = ** where [N] is the square and invertible product of two binary matrices [A][C] and then varying the vector ?**
Create 2 whitespace-delimited text files for each event: one for the Rankings data and one for the Qualification Match Results data.
Step2
Run an AWK script which reads the Match Results data and creates the alliances design matrix [A], the alliance scores vector **, and a vector [T] which maps the team numbers to consecutive integers. [A] is a 2MxT binary matrix (each element either 1 or 0), where M is the number of matches and T is the number of teams.
Step3
Run an AWK script which reads the Rankings data and the [T] vector, and creates a matrix [dr] whose columns correspond to the component scores and whose rows are ordered to correspond to the columns of the design matrix [A]
Step4
Run an Octave script which reads [A], **, [T], and [dr], and does the following computations:
[N]=[A[b]’**]*[A] …N will be a square symmetric positive definite TxT matrix
[dm]=[A[b]’]*
[d]=[dm,dr]
[x]=[N][d] … “left division” solves for [x]
[Tx]=[T,x]
sort Tx by team and by OPR
… and writes the sorted [Tx] matrices containing the components scores, sorted by team and sorted by final score OPR
Ed takes great pains to handle special cases like DQ’s and surrogates, and does so in a manner that is as consistent as possible from year to year.
I don’t have Ed’s remarkable patience and attention span, so the calculations I did don’t have special-case handling for DQ/surrogate and so they won’t agree exactly with Ed’s for events with DQ’s and/or surrogates.
Ed’s numbers are the de facto official OPR numbers for FRC, so always use them when they are available.