Sorry ... assuming you're using spreadsheet software such as Excel, you should have the option of saving any worksheet in .csv format, for "comma separated values."
I just uploaded the entire spreadsheet - I've been keeping the league's schedule, a list of goals-scored, and a list of who's played on separate sheets, and associating them together at the end. It's tremendously ugly, consumes a lot of resources, etc., but I'm not exactly technically savvy. I certainly hope you can come up with a better method. Link: MLS 2004 Register
Thx for putting the file up, but would you be able to save it into comma-sep format? I can't view it on the machine I'm using. Cheers.
Thanks ... just to be clear, you don't have a file with goals and minutes? If not, it's no big deal. I'll use the one on rsssf.
Yeah, I've got a file with goals, and the minute and game in which they were scored, separate from the one I gave you, and I've got a separate file with the scheduling. I only combined them at the end, I couldn't find a way to make a function in Excel that didn't use a whole lot of resources. Do you want all three? RSSSF's is likely more accurate than mine, if they've got one.
Tough call ... your files would be self-consistent (e.g. "DC United" always written the same way) , but rsssf would make the code a lot more re-usable. Since it's a small project, I'll just start out using rsssf and ask for more of your info if it's too cumbersome.
Hey Chris, FYI, I've got the code running. To the extent I've checked (not much), it appears to be correct. So any time you have a current .csv handy, let me know. A few things ... 1. Breaking ties -- Any time a sub occurs the same minute as a goal, I assume the sub game immediately after the goal. If you know a sub came after a goal, that can be handled by coding the minute as "75.9" instead of "76." 2. Date format -- It'd be great if you wouldn't mind using Format in Excel to make the dates go "3-Apr-04." That way, it's easy to match up with the rsssf file. 3. Tracking info. Right now, things are very bare-bones. My output looks like this (through May): Code: sanjose.arturo.alvarez 2 sanjose.brian.ching 4 sanjose.brian.mullan 1 sanjose.chris.brown 3 sanjose.craig.waibel 0 sanjose.dwayne.derosario 1 sanjose.eddie.robinson 1 sanjose.ian.russell 0 sanjose.jamil.walker -1 sanjose.jeff.agoos 3 sanjose.jon.conway -1 sanjose.landon.donovan 3 sanjose.notfullstrength 0 sanjose.pat.onstad 4 sanjose.ramiro.corrales 1 sanjose.richard.mulrooney 3 sanjose.ronnie.ekelund 2 sanjose.ryan.cochrane 2 sanjose.tighe.dombrowski 0 sanjose.troy.dayak 2 sanjose.wes.hart 3 I can obviously make this more elaborate, if need be.
Too late to edit, so clarifying: 1. Breaking ties -- Any time a sub occurs the same minute as a goal, I assume the sub came immediately after the goal. If you know a sub came before a goal, that can be handled by coding the minute as "75.9" instead of "76."
Numerista, have uploaded the season-end file here: http://www.columbia.edu/~cse2002/ Minutesplayed.csv I know I'm missing a few things - One Pat Noonan/Richie Baker sub most notably, but it very closely agrees with the MLS season end stats (save a minute here and there).
For the true data-philes among us, here's the full list of raw plus-minus ratings for everyone in the league. As noted earlier in the thread, these numbers are best viewed after some adjustments. Note to Chris: Is this format ok for you? Let me know if there's something further I can do, or if there are any errors (the rsssf file might well contain some). also, I made one other change to your file, standardizing the references to JP Peguero. Code: chicago.alexandre.boucicaut -2 chicago.andy.herron 2 chicago.andy.williams -8 chicago.ante.razov -2 chicago.chris.armas -5 chicago.chris.carrieri -1 chicago.cj.brown -8 chicago.craig.capano 1 chicago.damani.ralph -6 chicago.damarcus.beasley -1 chicago.denny.clanton -3 chicago.dipsy.selolwane 2 chicago.dj.countess 0 chicago.evan.whitfield -3 chicago.henry.ring -7 chicago.jesse.marsch -3 chicago.jim.curtin -7 chicago.justin.mapp -4 chicago.kelly.gray 2 chicago.leonard.griffin -2 chicago.logan.pause -5 chicago.nate.jaqua -3 chicago.notfullstrength -1 chicago.orlando.perez -7 chicago.scott.buete -7 chicago.sumed.ibrahim 1 colorado.adrian.cann -1 colorado.alberto.delgado 0 colorado.antonio.delatorre -3 colorado.chris.henderson -4 colorado.daryl.powell -1 colorado.david.castellanos -2 colorado.gary.sullivan -1 colorado.jean-philippe.peguero -3 colorado.joe.cannon -4 colorado.joey.digiamarino 2 colorado.john.spencer -6 colorado.jordan.cila 3 colorado.kyle.beckerman -5 colorado.mark.chung -4 colorado.matt.crawford -5 colorado.nat.borchers -4 colorado.notfullstrength 0 colorado.pablo.mastroeni -3 colorado.reyangel.martinez 1 colorado.ricky.lewis -2 colorado.ritchie.kotschau -5 colorado.seth.trembly 4 colorado.zach.kingsley 0 colorado.zizi.roberts -1 columbus.brian.maisonneuve -2 columbus.chad.marshall 8 columbus.chris.wingert 11 columbus.danny.szetela 2 columbus.dante.washington 0 columbus.david.testo -3 columbus.devin.barclay 1 columbus.duncan.oughton 6 columbus.edson.buddle 8 columbus.eric.denton 1 columbus.erick.scott -2 columbus.frankie.hejduk 4 columbus.jake.traeger 0 columbus.jamal.sutton -1 columbus.jeff.cunningham 2 columbus.jon.busch 8 columbus.kyle.martino 7 columbus.manny.lagos 1 columbus.matt.jordan 0 columbus.michael.ritch 6 columbus.nelson.akwari 5 columbus.notfullstrength 0 columbus.robin.fraser 7 columbus.ross.paule 9 columbus.simon.elliott 6 columbus.steven.herdsman -2 columbus.tony.sanneh 6 dallas.bobby.rhine -7 dallas.brad.davis -3 dallas.carey.talley -7 dallas.chris.gbandi -14 dallas.clarence.goodson -2 dallas.cory.gibbs -6 dallas.edward.johnson -6 dallas.eric.quill -2 dallas.jason.kreis -16 dallas.jeff.cassar -2 dallas.jordan.stone -2 dallas.matt.behncke 1 dallas.milton.reyes -10 dallas.notfullstrength -4 dallas.oscar.pareja 2 dallas.philip.salyer 0 dallas.ramon.nunez -4 dallas.ronnie.obrien -9 dallas.scott.garlick -9 dallas.simo.valakari -8 dallas.steve.jolley -8 dallas.toni.nhleko -5 dcunited.alecko.eskandarian 12 dcunited.ben.olsen 4 dcunited.bobby.convey 1 dcunited.brandon.prideaux -6 dcunited.brian.carroll -2 dcunited.bryan.namoff 1 dcunited.christian.gomez 8 dcunited.david.stokes -7 dcunited.dema.kovalenko 5 dcunited.doug.warren -1 dcunited.earnie.stewart -6 dcunited.ezra.hendrickson -3 dcunited.freddy.adu -3 dcunited.garlon.cannon -2 dcunited.jaime.moreno 0 dcunited.jason.thompson -3 dcunited.joshua.gros 0 dcunited.kevin.ara -5 dcunited.mike.petke 6 dcunited.nana.kuffour -3 dcunited.nick.rimando 6 dcunited.notfullstrength 0 dcunited.ronald.cerritos -2 dcunited.ryan.nelsen 5 dcunited.santino.quaranta 0 dcunited.troy.perkins -5 kansascity.alex.zotinca 6 kansascity.bo.oshoniyi 2 kansascity.chris.klein 9 kansascity.davy.arnaud 11 kansascity.diego.gutierrez 8 kansascity.diego.walsh 1 kansascity.francisco.gomez 8 kansascity.igor.simutenkov 2 kansascity.jack.jewsbury 3 kansascity.jimmy.conrad 13 kansascity.jose.burciaga 7 kansascity.josh.wolff 10 kansascity.justin.detter -1 kansascity.kerry.zavagnin 10 kansascity.khari.stephenson 0 kansascity.matt.taylor 7 kansascity.nick.garcia 9 kansascity.notfullstrength 2 kansascity.preki.radosavljevic -3 kansascity.shavar.thomas 4 kansascity.taylor.graham 4 kansascity.tony.meola 9 kansascity.vuk.rasovic 0 losangeles.alan.gordon 0 losangeles.alejandro.moreno 3 losangeles.andreas.herzog -6 losangeles.arturo.torres 2 losangeles.carlos.ruiz 2 losangeles.chris.albright 1 losangeles.chris.aloisi 3 losangeles.cobi.jones -1 losangeles.dan.popik -1 losangeles.danny.califf -2 losangeles.guillermo.gonzalez 3 losangeles.hong.myung-bo 1 losangeles.joseph.ngwenya -2 losangeles.josh.gardner 1 losangeles.jovan.kirovski 3 losangeles.kevin.hartman 1 losangeles.marcelo.saragosa -2 losangeles.ned.grabavoy 0 losangeles.notfullstrength 0 losangeles.paul.broome -3 losangeles.peter.vagenas -2 losangeles.ricky.lewis 2 losangeles.ryan.suarez -3 losangeles.sasha.victorine -1 losangeles.scot.thompson 0 losangeles.tyrone.marshall 1 metrostars.amado.guevara 1 metrostars.chris.leitch -1 metrostars.cornell.glen 1 metrostars.craig.ziadie -2 metrostars.eddie.gaven -3 metrostars.eddie.pope 0 metrostars.fabian.taylor 2 metrostars.gilberto.flores 3 metrostars.jeff.parke -1 metrostars.john.wolyniec 5 metrostars.jonny.walker -1 metrostars.joselito.vaca 0 metrostars.kenny.arena -4 metrostars.mark.lisi -2 metrostars.mike.magee 0 metrostars.notfullstrength 0 metrostars.pablo.brenes -3 metrostars.ricardo.clark -6 metrostars.sergio.galvanrey -9 metrostars.seth.stammler 1 metrostars.tenywa.bonseu 3 metrostars.tim.regan -5 metrostars.zach.wells -1 newengland.adin.brown -4 newengland.andy.dorman -3 newengland.avery.john -1 newengland.brian.kamler 2 newengland.clint.dempsey -6 newengland.daouda.kante -5 newengland.felix.brillant -3 newengland.jay.heaps -1 newengland.joe-max.moore -2 newengland.joe.franchino -2 newengland.jose.cancela -2 newengland.luke.vercollone -1 newengland.marshall.leonard 1 newengland.matt.reis 3 newengland.notfullstrength 0 newengland.pat.noonan 0 newengland.richie.baker 4 newengland.rusty.pierce 2 newengland.shalrie.joseph 6 newengland.steve.howey -2 newengland.steve.ralston -1 newengland.taylor.twellman 4 sanjose.arturo.alvarez 2 sanjose.brian.ching 9 sanjose.brian.mullan 9 sanjose.chris.brown 2 sanjose.craig.waibel 2 sanjose.dwayne.derosario 0 sanjose.eddie.robinson 0 sanjose.ian.russell 1 sanjose.jamil.walker -2 sanjose.jeff.agoos 3 sanjose.jon.conway 1 sanjose.landon.donovan 5 sanjose.notfullstrength 1 sanjose.pat.onstad 5 sanjose.ramiro.corrales 5 sanjose.richard.mulrooney 6 sanjose.ronnie.ekelund 3 sanjose.ryan.cochrane 11 sanjose.tighe.dombrowski -2 sanjose.todd.dunivant 4 sanjose.troy.dayak 3 sanjose.wes.hart -2
Turns out there was a small error in my code involving the use of float arithmetic in Perl (dang computers). Things are not far different, although Alecko Eskandarian's numbers become even more pronounced. DC was +13 with him, -12 without him. Code: chicago.alexandre.boucicaut -2 chicago.andy.herron 2 chicago.andy.williams -8 chicago.ante.razov -3 chicago.chris.armas -5 chicago.chris.carrieri -1 chicago.cj.brown -9 chicago.craig.capano 1 chicago.damani.ralph -6 chicago.damarcus.beasley -1 chicago.denny.clanton -4 chicago.dipsy.selolwane 1 chicago.dj.countess 0 chicago.evan.whitfield -4 chicago.henry.ring -8 chicago.jesse.marsch -3 chicago.jim.curtin -8 chicago.justin.mapp -4 chicago.kelly.gray 1 chicago.leonard.griffin -3 chicago.logan.pause -6 chicago.nate.jaqua -3 chicago.notfullstrength -1 chicago.orlando.perez -7 chicago.scott.buete -8 chicago.sumed.ibrahim 1 colorado.adrian.cann -1 colorado.alberto.delgado 0 colorado.antonio.delatorre -3 colorado.chris.henderson -3 colorado.daryl.powell -1 colorado.david.castellanos -2 colorado.gary.sullivan -1 colorado.jean-philippe.peguero -2 colorado.joe.cannon -3 colorado.joey.digiamarino 2 colorado.john.spencer -6 colorado.jordan.cila 3 colorado.kyle.beckerman -4 colorado.mark.chung -3 colorado.matt.crawford -4 colorado.nat.borchers -3 colorado.notfullstrength 0 colorado.pablo.mastroeni -2 colorado.reyangel.martinez 1 colorado.ricky.lewis -1 colorado.ritchie.kotschau -4 colorado.seth.trembly 5 colorado.zach.kingsley 0 colorado.zizi.roberts -1 columbus.brian.maisonneuve -2 columbus.chad.marshall 8 columbus.chris.wingert 11 columbus.danny.szetela 2 columbus.dante.washington 0 columbus.david.testo -3 columbus.devin.barclay 1 columbus.duncan.oughton 6 columbus.edson.buddle 8 columbus.eric.denton 1 columbus.erick.scott -2 columbus.frankie.hejduk 4 columbus.jake.traeger 0 columbus.jamal.sutton -1 columbus.jeff.cunningham 2 columbus.jon.busch 8 columbus.kyle.martino 7 columbus.manny.lagos 1 columbus.matt.jordan 0 columbus.michael.ritch 6 columbus.nelson.akwari 5 columbus.notfullstrength 0 columbus.robin.fraser 7 columbus.ross.paule 9 columbus.simon.elliott 6 columbus.steven.herdsman -2 columbus.tony.sanneh 6 dallas.bobby.rhine -7 dallas.brad.davis -3 dallas.carey.talley -7 dallas.chris.gbandi -14 dallas.clarence.goodson -2 dallas.cory.gibbs -6 dallas.edward.johnson -6 dallas.eric.quill -2 dallas.jason.kreis -15 dallas.jeff.cassar -2 dallas.jordan.stone -2 dallas.matt.behncke 1 dallas.milton.reyes -10 dallas.notfullstrength -4 dallas.oscar.pareja 2 dallas.philip.salyer 0 dallas.ramon.nunez -4 dallas.ronnie.obrien -9 dallas.scott.garlick -9 dallas.simo.valakari -8 dallas.steve.jolley -8 dallas.toni.nhleko -5 dcunited.alecko.eskandarian 13 dcunited.ben.olsen 5 dcunited.bobby.convey 1 dcunited.brandon.prideaux -6 dcunited.brian.carroll -1 dcunited.bryan.namoff 2 dcunited.christian.gomez 8 dcunited.david.stokes -7 dcunited.dema.kovalenko 6 dcunited.doug.warren -1 dcunited.earnie.stewart -6 dcunited.ezra.hendrickson -2 dcunited.freddy.adu -2 dcunited.garlon.cannon -2 dcunited.jaime.moreno 1 dcunited.jason.thompson -3 dcunited.joshua.gros 1 dcunited.kevin.ara -5 dcunited.mike.petke 7 dcunited.nana.kuffour -3 dcunited.nick.rimando 6 dcunited.notfullstrength 0 dcunited.ronald.cerritos -2 dcunited.ryan.nelsen 6 dcunited.santino.quaranta 0 dcunited.troy.perkins -4 kansascity.alex.zotinca 5 kansascity.bo.oshoniyi 1 kansascity.chris.klein 7 kansascity.davy.arnaud 8 kansascity.diego.gutierrez 5 kansascity.diego.walsh 0 kansascity.francisco.gomez 7 kansascity.igor.simutenkov 1 kansascity.jack.jewsbury 0 kansascity.jimmy.conrad 10 kansascity.jose.burciaga 4 kansascity.josh.wolff 7 kansascity.justin.detter -1 kansascity.kerry.zavagnin 7 kansascity.khari.stephenson 0 kansascity.matt.taylor 7 kansascity.nick.garcia 7 kansascity.notfullstrength 2 kansascity.preki.radosavljevic -3 kansascity.shavar.thomas 3 kansascity.taylor.graham 3 kansascity.tony.meola 7 kansascity.vuk.rasovic 0 losangeles.alan.gordon 0 losangeles.alejandro.moreno 5 losangeles.andreas.herzog -5 losangeles.arturo.torres 2 losangeles.carlos.ruiz 3 losangeles.chris.albright 2 losangeles.chris.aloisi 4 losangeles.cobi.jones 1 losangeles.dan.popik -1 losangeles.danny.califf -2 losangeles.guillermo.gonzalez 3 losangeles.hong.myung-bo 1 losangeles.joseph.ngwenya -1 losangeles.josh.gardner 1 losangeles.jovan.kirovski 4 losangeles.kevin.hartman 3 losangeles.marcelo.saragosa -1 losangeles.ned.grabavoy 1 losangeles.notfullstrength 0 losangeles.paul.broome -1 losangeles.peter.vagenas -2 losangeles.ricky.lewis 3 losangeles.ryan.suarez -2 losangeles.sasha.victorine 1 losangeles.scot.thompson 1 losangeles.tyrone.marshall 2 metrostars.amado.guevara 1 metrostars.chris.leitch -1 metrostars.cornell.glen 2 metrostars.craig.ziadie -1 metrostars.eddie.gaven -3 metrostars.eddie.pope 0 metrostars.fabian.taylor 1 metrostars.gilberto.flores 3 metrostars.jeff.parke -2 metrostars.john.wolyniec 5 metrostars.jonny.walker -1 metrostars.joselito.vaca 0 metrostars.kenny.arena -4 metrostars.mark.lisi -1 metrostars.mike.magee -1 metrostars.notfullstrength 0 metrostars.pablo.brenes -4 metrostars.ricardo.clark -7 metrostars.sergio.galvanrey -8 metrostars.seth.stammler 1 metrostars.tenywa.bonseu 4 metrostars.tim.regan -5 metrostars.zach.wells -1 newengland.adin.brown -4 newengland.andy.dorman -4 newengland.avery.john -1 newengland.brian.kamler 2 newengland.clint.dempsey -5 newengland.daouda.kante -5 newengland.felix.brillant -3 newengland.jay.heaps -1 newengland.joe-max.moore -2 newengland.joe.franchino -2 newengland.jose.cancela -1 newengland.luke.vercollone -1 newengland.marshall.leonard 1 newengland.matt.reis 3 newengland.notfullstrength 0 newengland.pat.noonan 0 newengland.richie.baker 5 newengland.rusty.pierce 2 newengland.shalrie.joseph 6 newengland.steve.howey -2 newengland.steve.ralston -1 newengland.taylor.twellman 3 sanjose.arturo.alvarez 2 sanjose.brian.ching 9 sanjose.brian.mullan 9 sanjose.chris.brown 2 sanjose.craig.waibel 2 sanjose.dwayne.derosario 0 sanjose.eddie.robinson 0 sanjose.ian.russell 0 sanjose.jamil.walker -2 sanjose.jeff.agoos 3 sanjose.jon.conway 1 sanjose.landon.donovan 5 sanjose.notfullstrength 2 sanjose.pat.onstad 5 sanjose.ramiro.corrales 4 sanjose.richard.mulrooney 6 sanjose.ronnie.ekelund 4 sanjose.ryan.cochrane 11 sanjose.tighe.dombrowski -2 sanjose.todd.dunivant 5 sanjose.troy.dayak 2 sanjose.wes.hart -2
The 2004 MLS Plus-Minus Best XI GK: Nick Rimando (DC's goal difference was +6 with him, -5 without him) D: Ryan Cochrane (SJ +11 with him, -5 without him) D: Ryan Nelsen (DC +6 with him, -5 without him) D: Jimmy Conrad (KC +10 with him, -2 without him) M: Shalrie Joseph (NE +6 with him, -7 without him) M: Seth Trembly (Col +5 with him, -8 without him) M: Chris Wingert (Clb +11 with him, -3 without him) M: Christian Gomez (DC +8 with him, -7 without him) M: Oscar Pareja (Dal +2 with him, -13 without him) F: John Wolyniec (Met +5 with him, -7 without him) F: Alecko Eskandarian (DC +13 with him, -12 without him) MVP: Eskandarian The Worst XI GK: Troy Perkins (DC's goal difference -4 with him, +5 without him) D: C.J. Brown (Chi -9 with him, +1 without him) D: David Stokes (DC -7 with him, +8 without him) D: Chris Gbandi (Dal -14 with him, +3 without him) M: Andreas Herzog (LA -5 with him, +7 without him) M: Earnie Stewart (DC -6 with him, +7 without him) M: Ricardio Clark (Met -7 with him, +5 without him) M: Clint Dempsey (NE -5 with him, +4 without him) F: Sergio Galvan Rey (Met -8 with him, +6 without him) F: Jason Kreis (Dal -15 with him, +4 without him) F: John Spencer (Col -6 with him, +3 without him) Obviously, this method gives short shrift to true Best XI types like Eddie Johnson and Richard Mulrooney. Those two played the lion's share of minutes, so we never saw quite how much their teams would've suffered in their absence. Even so, I suspect there's some food for thought here. Over the last two seasons, Colorado is +8 with Seth Trembly on the field, -16 without him. He's an incredibly pesky player, and perhaps that can really help a team.
cool stuff If you have this all handily programmed, what is the +/- for generic starter vs generic sub, for positions 1-11 then? Be interesting to have a look at that? AV
I don't know really what you mean, but here's a brief justification that the +/- is actually showing something. Dividing the league into a top 50% minutes played (above 1293) and a bottom 50%, we get: Code: Minutes +/- per 90 227324 73 0.03 58308 -65 -0.10 So clearly, the guys who are starting are better than those who aren't. Dividing it into quartiles, it's clear why we need reserve teams - the worst players are really bad - Code: Minutes +/- per 90 129663 56 0.04 95638 25 0.02 47821 -23 -0.04 10036 -45 -0.40 For each 90 minutes they play, a team loses .4 goals, whereas for each 90 a mid-bottom player plays, they lose one tenth of that.
yeah, per 90 is good what I mean is what happens when the starting goalies are substituted when defender 1 (or position 2 of 11 however you want to think of it) is substituted, or forward 2 (player 11 of 11) for the same thing, per 90 minutes? or even groups, GK, all DEF, all MID, all FOR
You'll have to ask numerista for that, it's too much for me. You have to account for the fact, however, that substitutes are going to perform better as subs (because they're fresher) than as starters (see this thread about substitute scoring. So either you have to define 'starting defender' as somebody who registers a certain amount of minutes/games started, and look at effects when they're subbed out, or you're going to have to have to figure out how to remove the substitute performance bias (unless, and I'm still not totally clear, that's what you're asking about).
right, well both of those interesting, perhaps more so the midfielder X is injured, put in his backup X1 and see what happens, in a whole game sense
Yeah, that's definitely an interesting question. At the moment, though, I'm not aware of a good way to say who was the back-up and who was the starter. I suppose a list of injury absences might be one way. Chris's work is really intriguing, too, with those low-end players doing very, very badly. I'm a bit worried about selection bias, though ... the bottom quartile players average, what, two full games played (~200 minutes)? It's possible that they spent so much time on the pine because the team played badly while they were in, and not so much because they themselves were the problem. If the team had played better, they might've gotten more minutes. Chris, if you happen to have it handy, how do things break down for players of different roster status (senior roster/P-40/DEV/SI/etc.)? If I'm thinking straight, those numbers should be (more or less) free of selection bias. Thx again.
Interesting suggestion, although the list seems to be filled with players who were 'not ready' or otherwise just not good enough. I'm not totally confident these are all correct, but it should be close: Code: SI 1 33571 -27 -0.07 TI 2 15198 -8 -0.05 Dev 3 6849 2 0.03 Reg 4 225824 12 0.00 P-40 5 16134 23 0.13 To be honest, I think that just too many players fit into the fourth category for this to really tell us much. SI's are heavily biased by three dallas players and Galvan Rey, TI's by Damani Ralph (-6) and low playing time, P-40's by Alecko and Cochrane.
Meant to address this - although they only played two full games, they averaged over 5 games per player, i.e., they were given opportunities: Code: Q. Games Minutes 1 27.29 2351.9 2 22.47 1715.7 3 15.29 884.2 4 5.34 188.7
It may not be all that interesting by itself, but if you tell me a group of bottom-end players had combined to go -45, several hypotheses come to mind. One is that the development roster isn't giving us good enough players; remarkably enough, your findings point (slightly) in the opposite direction.