Announcement

Collapse
No announcement yet.

Pairwise and Bracketology 2013 Edition

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Re: Pairwise and Bracketology 2013 Edition

    Originally posted by Tipsy McStagger View Post
    Some truth in that, but to give a team like CC an autobid for their performance in 4 or 5 games, and that to take precedence over a 28 game schedule is ludicrous.
    The NCAA doesn't decide who gets the automatic bid; the NCAA awards a conference an autobid and the conference decides how to award it. Call up the league and tell them you think the regular-season champ should get it. No one is "giving" CC or UW the autobid, they are earning it. No one else won the first-round series, a QF and a semi but these two.

    It's the same way a 20-loss team gets into the bouncyball tourney...
    St. Norbert College Green Knights
    NCHA regular season champs: 97-99, 02-08, 10-12, 14, 16, 19
    NCHA playoff champs: 98-99, 03-05, 07-08, 10-14, 17-19, 24
    NCAA Champions: 2008, 2011, 2012, 2014, 2018
    ---
    SNC women: 2013 O'Brien Cup Champions

    Comment


    • Re: Pairwise and Bracketology 2013 Edition

      Originally posted by fairbanks hockey puck View Post
      Looks like Western Michigan is in trouble????
      This would be correct. Big trouble. Have to have in CCHA: OSU beats NoDame; Miami beats Mich; Miami beats OSU. In ECAC: Brown over Union. In HE: Lowell over BU.

      Comment


      • Re: Pairwise and Bracketology 2013 Edition

        My user unfriendly pairwise code plus a couple of extra sorting features.

        Code:
        ########################
        #                      #
        # RRRR   PPPP   IIIIII #
        # RRRRR  PPPPP  IIIIII #
        # RR  RR PP  PP   II   #
        # RR  RR PP  PP   II   #
        # RRRRR  PPPPP    II   #
        # RRRR   PPPP     II   #
        # RR RRR PP       II   #
        # RR  RR PP       II   #
        # RR  RR PP     IIIIII #
        # RR  RR PP     IIIIII #
        #                      #
        ########################
        
        #########################################
        # RATINGS PERCENTAGE INDEX COMPUTATIONS #
        #########################################
        
        #CONSTRUCT FULL NUMBER OF GAMES BY OPPONENT MATRIX
        #CONSTRUCT FULL W-L-T AGGREGATION MATRTIX
        
        #I'VE DONE THIS BEFORE, GET INTO RPI DETAILS LATER
        
        
        
        ####################
        #FUN LETTERS!
        
        
        #########################
        # PAIRWISE COMPUTATIONS #
        #########################
        
        #I'VE ALSO DONE THIS BEFORE
        
        #NOT WITH CURRENT COMMON OPPONENTS RULE THOUGH
        
        #COMPUTE A TEAM BY TEAM WIN % MATRIX
        #EFFECTIVE WINS (W+.5T) DIVIDED INTO GAMES
        #IF NUMBER OF GAMES EQUALS ZERO THEN LET VALUE BE ZERO
        
        #number of games by opponent
        n.teams=59
        #this is going to be slower than desired!
        n.games=dim(game.results)[1]
        games.mtx.nat=matrix(0,n.teams,n.teams)
        wlt.mtx.nat=matrix(0,n.teams,n.teams)
        
        for(i in 1:n.games){
        games.mtx.nat[game.results[i,1],game.results[i,3]]=1+games.mtx.nat[game.results[i,1],game.results[i,3]]
        games.mtx.nat[game.results[i,3],game.results[i,1]]=1+games.mtx.nat[game.results[i,3],game.results[i,1]]
        wlt.mtx.nat[game.results[i,1],game.results[i,3]]=(game.results[i,2]>game.results[i,4])+(game.results[i,2]==game.results[i,4])/2+wlt.mtx.nat[game.results[i,1],game.results[i,3]]
        wlt.mtx.nat[game.results[i,3],game.results[i,1]]=(game.results[i,4]>game.results[i,2])+(game.results[i,2]==game.results[i,4])/2+wlt.mtx.nat[game.results[i,3],game.results[i,1]]
        
        }
        #there must be a faster way... tables?
        n.games.team=rowSums(games.mtx.nat)
        win.pctg=rowSums(wlt.mtx.nat)/n.games.team
        
        #something here doesn't quite work
        adj.win.pctg=((matrix(rowSums(wlt.mtx.nat),n.teams,n.teams))-wlt.mtx.nat)/((matrix(n.games.team,n.teams,n.teams))-games.mtx.nat)
        
        #I think?!?!
        opp.pctg=diag(games.mtx.nat%*%(adj.win.pctg))/rowSums(games.mtx.nat)
        
        oppopp.pctg=(games.mtx.nat%*%matrix(opp.pctg,n.teams,1))/rowSums(games.mtx.nat)
        
        rpi.prelim=win.pctg*.25+opp.pctg*.21+oppopp.pctg*.54
        
        ############
        # EVALUATE GAME POINTS
        ##########
        
        
        ####
        #GAME.RESULTS -- FOR NOW  ADD OTHER ITEMS LATER
        #
        #1-AWAY TEAM
        #2-AWAY TEAM SCORE
        #3-HOME TEAM
        #4-HOME TEAM SCORE
        #5-NEUTRAL INDICATOR (DOES NOT MATTER HERE)
        #
        ##############
        
        game.pt.eval=matrix(0,dim(game.results)[1],2)
        
        game.pt.eval[,1]=((game.results[,2]>game.results[,4])+((game.results[,2]==game.results[,4]))*.5)*.25+unlist(lapply(1:n.games,function(w){adj.win.pctg[game.results[w,3],game.results[w,1]]}))*.21+opp.pctg[game.results[,3]]*.54
        game.pt.eval[,2]=((game.results[,4]>game.results[,2])+((game.results[,4]==game.results[,2]))*.5)*.25+unlist(lapply(1:n.games,function(w){adj.win.pctg[game.results[w,1],game.results[w,3]]}))*.21+opp.pctg[game.results[,1]]*.54
        
        
        rpi.prelim.2=rep(0,59)
        for(i in 1:59){
        left.col.id=which((game.results[,1]==i))
        right.col.id=which((game.results[,3]==i))
        rpi.prelim.2[i]=(sum(game.pt.eval[left.col.id,1])+sum(game.pt.eval[right.col.id,2]))/(length(left.col.id)+length(right.col.id))
        }
        
        eff.rpi.wins=rpi.prelim.2*n.games.team
        n.games.team.mod=n.games.team
        #basics... if from the first team, it wins and its game value is lower
        #than preliminary rpi then identify for chucking,
        #repeat with second team
        #once doing so, then subtract the relevant games
        keep.left.id=which((((game.pt.eval[,1]game.results[,4]))))
        keep.right.id=which(((game.pt.eval[,2]game.results[,2])))
        
        
        if (length(keep.left.id)>0){
          for(i in 1:length(keep.left.id)){
          eff.rpi.wins[game.results[keep.left.id[i],1]]=eff.rpi.wins[game.results[keep.left.id[i],1]]-game.pt.eval[keep.left.id[i],1]
          n.games.team.mod[game.results[keep.left.id[i],1]]=n.games.team.mod[game.results[keep.left.id[i],1]]-1
        }
        
        }
        
        
        if (length(keep.right.id)>0){
          for(i in 1:length(keep.right.id)){
            eff.rpi.wins[game.results[keep.right.id[i],3]]=eff.rpi.wins[game.results[keep.right.id[i],3]]-game.pt.eval[keep.right.id[i],2]
            n.games.team.mod[game.results[keep.right.id[i],3]]=n.games.team.mod[game.results[keep.right.id[i],3]]-1
          }
          
        }
        
        rpi.final=eff.rpi.wins/n.games.team.mod
        
        #here the idea would be to subtract away instead of add
        #if dim(take.out)==0 then ... move on
        
        #########
        #if the abomination below works then great!
        #########
        #lapply should leave a list of arrays/vectors
        #unlist coerses them all down down to a single dim array
        #matrix, should, re-constitute this in the appropriate order
        #hooboy!
        
        rpi.pts=matrix(unlist(lapply(1:n.teams,function(w){rpi.final>rpi.final[w]})),n.teams,n.teams)
        
        
        #IDENTIFY FOR EACH PAIR (I != J) (LOOP)
        #THE TEAMS IN WHICH THERE ARE GAMES IN COMMON
        
        #VECTOR OF COMMON OPPONENT IDS
        cop.mtx=matrix(0,n.teams,n.teams)
        for(i in 1:(n.teams-1)){
          for(j in (i+1):(n.teams)){
        cop.id=which(games.mtx.nat[i,]>0 & games.mtx.nat[j,]>0)
        cop.mtx[i,j]=sum(wlt.mtx.nat[i,cop.id]/games.mtx.nat[i,cop.id])
        cop.mtx[j,i]=sum(wlt.mtx.nat[j,cop.id]/games.mtx.nat[j,cop.id])
        }}
        
        
        cop.pts=pairoff.matrix(cop.mtx)
        #alternatively, side compute cop.mtx and determine who won 
        #this pair-point... store in cop.pt
        #bet there's a sneaky way to do this
        
        #TEAMS UNDER CONSIDERATION CALCULATION... LATER
        
        #IDENTIFY THOSE UNDER CONSIDERATION
        
        tuc.id=which(rpi.final>=.5)
        
        #compute for each, the percentage less one element
        #I think there's an efficient way to do that
        #intersect will do it, but its inconvenient
        #something nicer?  Set minus?
        #that might be more than I really need
        
        #(sum(wlt.mtx.nat[i,tuc.id])-wlt.mtx.nat[i,j])/(sum(games.mtx.nat[i,tuc.id])-games.mtx.nat[i,j])
        
        #ONE BETTER!
        tuc.mtx=matrix(0,n.teams,n.teams)
        
        tuc.games=rowSums(games.mtx.nat[,tuc.id])
        
        #matrix(unlist(lapply(1:n.teams,function(w){tuc.games[w]-games.mtx.nat[w,tuc.id]})),n.teams,n.teams)
        
        
        for(i in tuc.id){
        
        tuc.mtx[i,tuc.id]=(sum(wlt.mtx.nat[i,tuc.id])-wlt.mtx.nat[i,tuc.id])/(sum(games.mtx.nat[i,tuc.id])-games.mtx.nat[i,tuc.id])
        tuc.mtx[i,tuc.id]=tuc.mtx[i,tuc.id]*((tuc.games[i]-games.mtx.nat[i,tuc.id])>=10)*((tuc.games[tuc.id]-games.mtx.nat[i,tuc.id])>=10)
        }
        
        #modify later in case of NaN results 0/0
        #I hope to god that worked!
        
        
        #if either is zero then zero the whole
        
        
        tuc.pts=pairoff.matrix(tuc.mtx)
        
        
        #get it all in one shot!
        
        #need a quick matrix greater than symm element function
        
        #q[i,j]=1 if p[i,j]>p[j,i]
        
        #1.0001 is the lazy man's RPI tie-breaker
        pwr.pts=matrix(0,n.teams,n.teams)
        #pwr.pts[tuc.id,tuc.id]=rpi.pts[tuc.id,tuc.id]*(1.0001)+cop.pts[tuc.id,tuc.id]+tuc.pts[tuc.id,tuc.id]+wlt.mtx.nat[tuc.id,tuc.id]
        
        pwr.pts=rpi.pts*(1.0001)+cop.pts+tuc.pts+wlt.mtx.nat
        
        pwr.mtx=pairoff.matrix(pwr.pts)
        
        ###run through special matrix function
        #  pwr.mtx=matrix.function(pwr.pts)
        pairs.won=rowSums(pwr.mtx[,tuc.id])
        pairs.won[-tuc.id]=0
        pairwise.sort=matrix(0,n.teams,3)
        
        pairwise.sort[,1]=1:n.teams
        pairwise.sort[,2]=pairs.won
        pairwise.sort[,3]=rpi.final
        
        #sort on RPI first, then on pairs won
        #automatically breaking the necessary ties
        tuc.labels=team.labels
        tuc.labels=tuc.labels[order(-pairwise.sort[,3])]
        pairwise.sort=pairwise.sort[order(-pairwise.sort[,3]),]
        tuc.labels=tuc.labels[order(-pairwise.sort[,2])]
        pairwise.sort=pairwise.sort[order(-pairwise.sort[,2]),]
        
        
        
        tourn.champ.id=c(hea.champ,ecac.champ,ccha.champ,wcha.champ,aha.champ)
        
        
        
        tourn.field=pairwise.sort[is.element(pairwise.sort[,1],c(tourn.champ.id,pairwise.sort[-which(is.element(pairwise.sort[,1],tourn.champ.id)),1][1:11])),]
        This is set up for input with jtw's format. Something I would be unlikely to extend to personal later use.

        The code is also poorly commented for your enjoyment.
        BS UML '04, PhD UConn '09

        Jerseys I would like to have:
        Skating Friar Jersey
        AIC Yellowjacket Jersey w/ Yellowjacket logo on front
        UAF Jersey w/ Polar Bear on Front
        Army Black Knight logo jersey


        NCAA Men's Division 1 Simulation Primer

        Comment


        • Re: Pairwise and Bracketology 2013 Edition

          Originally posted by RHamilton View Post
          So, taking a quick look at my numbers, I see a seed range for Notre Dame from #3-#19. Uhhh...
          I think it has to do mainly with the TUC record. They have a good RPI, but they have 4-0 v Michigan counting for them right now, that could be lost if Miami beats Michigan and Michigan falls from TUC status.

          Comment


          • Re: Pairwise and Bracketology 2013 Edition

            Originally posted by GB Puck Fan View Post
            The NCAA doesn't decide who gets the automatic bid; the NCAA awards a conference an autobid and the conference decides how to award it. Call up the league and tell them you think the regular-season champ should get it. No one is "giving" CC or UW the autobid, they are earning it. No one else won the first-round series, a QF and a semi but these two.

            It's the same way a 20-loss team gets into the bouncyball tourney...
            and other than UAH that really hasn't happened in ice hockey, yet (I struggle to count a 4 team conference in this)... which is surprising seeing as such things are more likely in ice hockey.

            The B10 format is ripe for something ugly though.

            edit: I think the use of the best-of-3 series ends up being a generally useful filter.
            BS UML '04, PhD UConn '09

            Jerseys I would like to have:
            Skating Friar Jersey
            AIC Yellowjacket Jersey w/ Yellowjacket logo on front
            UAF Jersey w/ Polar Bear on Front
            Army Black Knight logo jersey


            NCAA Men's Division 1 Simulation Primer

            Comment


            • Re: Pairwise and Bracketology 2013 Edition

              Originally posted by Numbers View Post
              I think it has to do mainly with the TUC record. They have a good RPI, but they have 4-0 v Michigan counting for them right now, that could be lost if Miami beats Michigan and Michigan falls from TUC status.
              Thanks -- when generating so many aggregate results and predictions I frequently lose track of the individual comparisons, which is why I've turned my data over to all on this forum for analysis!
              RPI Class of 2012
              Visit rpitv.org to watch almost every RPI Hockey home game LIVE, as well as a huge collection of on demand games from this season and seasons past, all for FREE!

              Comment


              • Originally posted by GB Puck Fan View Post
                The NCAA doesn't decide who gets the automatic bid; the NCAA awards a conference an autobid and the conference decides how to award it. Call up the league and tell them you think the regular-season champ should get it. No one is "giving" CC or UW the autobid, they are earning it. No one else won the first-round series, a QF and a semi but these two.

                It's the same way a 20-loss team gets into the bouncyball tourney...
                I am aware of how it works. Also, who said the way basketball does it is correct? Do you think the majority of people think that 20 loss teams should get into the hoops tournament?
                Originally posted by SJHovey
                Pretty sure this post, made on January 3, 2016, when UNO was 14-3-1 and #2 in the pairwise, will go down in USCHO lore as The Curse of Tipsy McStagger.
                Originally posted by Brenthoven
                We mourn for days after a loss, puff out our chests for a week or more after we win. We brave the cold for tailgates, our friends know not to ask about the game after a tough loss, we laugh, we cry, we BLEED hockey, specifically the maroon'n'gold. Many of us have a tattoo waiting in the wings, WHEN (not IF) the Gophers are champions again.

                Comment


                • Re: Pairwise and Bracketology 2013 Edition

                  Originally posted by GB Puck Fan View Post
                  The NCAA doesn't decide who gets the automatic bid; the NCAA awards a conference an autobid and the conference decides how to award it. Call up the league and tell them you think the regular-season champ should get it. No one is "giving" CC or UW the autobid, they are earning it. No one else won the first-round series, a QF and a semi but these two.

                  It's the same way a 20-loss team gets into the bouncyball tourney...
                  This is true. Maybe once the Ivy league starts up a hockey conference they will give their auto bid to the regular season champions like they do in Basketball.

                  Comment


                  • Re: Pairwise and Bracketology 2013 Edition

                    Originally posted by RHamilton View Post
                    So, taking a quick look at my numbers, I see a seed range for Notre Dame from #3-#19. Uhhh...
                    What is even stranger (to me) if Notre Dame wins two and get the auto qualifier based on the other results they can finish 3,4,5 or 9,10,11. So with 2 wins they can't finish 6,7 or 8 just weird. (Thanks Jim Dahl and Sioux Sports)
                    "Now Progress Takes Away What Forever Took To Find" Dave Matthews Band, The Dreaming Tree

                    Comment


                    • Re: Pairwise and Bracketology 2013 Edition

                      Mankato is out only if:
                      Michigan and NoDame both win tomorrow: Yale either ties or beats Quinn: And, then there appear to be specific pairings of results between games as well after that that are required. So, Mankato is very safe.


                      Yale has about an 80% chance right now.

                      Comment


                      • Re: Pairwise and Bracketology 2013 Edition

                        Originally posted by JB View Post
                        What is even stranger (to me) if Notre Dame wins two and get the auto qualifier based on the other results they can finish 3,4,5 or 9,10,11. So with 2 wins they can't finish 6,7 or 8 just weird. (Thanks Jim Dahl and Sioux Sports)
                        Depends on Michigan's TUC status - so if Michigan beats Miami, NoDame gets the high side. Michigan loses, NoDame gets the low side.

                        Comment


                        • Re: Pairwise and Bracketology 2013 Edition

                          Originally posted by JB View Post
                          What is even stranger (to me) if Notre Dame wins two and get the auto qualifier based on the other results they can finish 3,4,5 or 9,10,11. So with 2 wins they can't finish 6,7 or 8 just weird. (Thanks Jim Dahl and Sioux Sports)
                          Yeah, that must be the TUC cliff... 3, 4, 5 is probably with Michigan beating Miami; 9, 10, 11 would be vice-versa.
                          RPI Class of 2012
                          Visit rpitv.org to watch almost every RPI Hockey home game LIVE, as well as a huge collection of on demand games from this season and seasons past, all for FREE!

                          Comment


                          • Re: Pairwise and Bracketology 2013 Edition

                            Originally posted by RHamilton View Post
                            Hey all, I've updated predictions/odds and regenerated all of the KRACHes following today's results. Subsequently, I've erased the cache of generated results to ensure the latest and greatest KRACH weighted rankings are delivered. Because of this, results will take longer to generate until the cache fills up a bit.

                            The users of this thread generated well over a thousand unique scenarios using the forms I provided, yet my host hasn't complained a word! Keep it going!


                            Overall odds leading in to Saturday are located here:
                            http://pwr.reillyhamilton.com/

                            Each query tool has been updated to reflect the past results:
                            Additionally, if you'd like to pretend Thursday and Friday never happened, there's an "unlocked" version of the first tool here.

                            Unfortunately, my heart isn't quite in this anymore following RPI's elimination from contention. I may sporadically update through tomorrow, but it's unlikely. Will update tomorrow night, for sure, but things should be fairly sorted by then.

                            Let me know if you see/have any issues or questions.
                            Some thing looks a little weird on your output UNH 100% at 7 and Yale 82.7% at 7 but no 8 seed?
                            "Now Progress Takes Away What Forever Took To Find" Dave Matthews Band, The Dreaming Tree

                            Comment


                            • Re: Pairwise and Bracketology 2013 Edition

                              Originally posted by Tipsy McStagger View Post
                              I am aware of how it works. Also, who said the way basketball does it is correct? Do you think the majority of people think that 20 loss teams should get into the hoops tournament?
                              Honestly the only NCAA sport that get the system correct is Div 3 football... Div 1 Football, Basketball (M&W) and hockey are all complete Gongshow's... Not to get off topic but I thought the NCAABB committee this year was on drugs.. Oregon and Ole miss as 12 seeds?!?! seriously?!?! Sending Syracuse as 4 seed all the way to other side of the planet to san jose but having Cal as a 12 play 15 min down the road... At least with hockey you know the system going in... that's something at least... You win the conf. tourney you are in... part of the reason why most fans are upset with the PWR is all you gotta do is get in and you got a chance.. its not that way in Bball.. you got 6 or 7 more wins to go in bball.. hockey.. 2 wins gets you to the FF then all bets are off... College hockey is just a different animal... Try explaining it to someone who doesn't know and you lose them very quickly.. to this day my dad doesn't understand it...

                              Comment


                              • Re: Pairwise and Bracketology 2013 Edition

                                Originally posted by RHamilton View Post
                                Yeah, that must be the TUC cliff... 3, 4, 5 is probably with Michigan beating Miami; 9, 10, 11 would be vice-versa.
                                Yes it is the cliff but it is still weird. Based on PWR and cliff interaction it can be explained but looking for 10,000 feet it is an odd ball.
                                "Now Progress Takes Away What Forever Took To Find" Dave Matthews Band, The Dreaming Tree

                                Comment

                                Working...
                                X