What's new
USCHO Fan Forum

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

  • The USCHO Fan Forum has migrated to a new plaform, xenForo. Most of the function of the forum should work in familiar ways. Please note that you can switch between light and dark modes by clicking on the gear icon in the upper right of the main menu bar. We are hoping that this new platform will prove to be faster and more reliable. Please feel free to explore its features.

Pairwise and Bracketology 2013 Edition

  • Thread starter Thread starter Priceless
  • Start date Start date
Status
Not open for further replies.
Re: Pairwise and Bracketology 2013 Edition

If SCSU misses this tournament they got robbed. It is a complete sham. The conference tournaments need to go. I'll take half a MacNaughton Cup over a Broadmoor Trophy ever year.

No if they miss it is because they didn't earn there way win. The out of conference record matters and SCSU sucked out of conference...
 
Re: Pairwise and Bracketology 2013 Edition

If SCSU misses this tournament they got robbed. It is a complete sham. The conference tournaments need to go. I'll take half a MacNaughton Cup over a Broadmoor Trophy ever year.
and not get a guaranteed NCAA spot? curious reasoning...
 
Re: Pairwise and Bracketology 2013 Edition

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.
 
Last edited:
Re: Pairwise and Bracketology 2013 Edition

Code:
   NAME   NCAA     S1     S2     S3     S4   CONF  ATLRG    TUC
1    AA 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
2    AF 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
3    AH 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
4    AI 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
5    Ak 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
6    Ar 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
7    BC 1.0000 0.1524 0.8476 0.0000 0.0000 0.0000 1.0000 1.0000
8    BG 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
9    Bn 0.4109 0.0000 0.0000 0.0000 0.4109 0.4109 0.0000 1.0000
10   BS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
11   BU 0.3743 0.0000 0.0000 0.0155 0.3588 0.3743 0.0000 1.0000
12   By 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
13   Ca 0.4760 0.0000 0.0000 0.0000 0.4760 0.4760 0.0000 0.0000
14   CC 0.4410 0.0000 0.0000 0.0000 0.4410 0.4410 0.0000 1.0000
15   Cg 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
16   Ck 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
17   Cr 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
18   Ct 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
19   Da 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
20   DU 1.0000 0.0000 0.3028 0.6972 0.0000 0.0000 1.0000 1.0000
21   FS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
22   Ha 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
23   HC 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
24   LS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
25   MA 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
26   MD 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
27   Me 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
28   Mh 0.5240 0.0000 0.0000 0.0000 0.5240 0.5240 0.0000 0.0000
29   Mi 0.0955 0.0000 0.0000 0.0000 0.0955 0.0955 0.0000 0.2965
30   Mk 0.9889 0.0000 0.2416 0.7423 0.0050 0.0000 0.9889 1.0000
31   ML 1.0000 0.8051 0.1949 0.0000 0.0000 0.6257 0.3743 1.0000
32   Mm 1.0000 0.9116 0.0884 0.0000 0.0000 0.4347 0.5653 1.0000
33   Mn 1.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 1.0000
34   Mr 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
35   MS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
36   MT 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
37   ND 1.0000 0.0000 0.9745 0.0255 0.0000 0.0000 1.0000 1.0000
38   NE 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
39   NH 1.0000 0.0000 0.9982 0.0018 0.0000 0.0000 1.0000 1.0000
40   Ni 0.9595 0.0000 0.0000 0.9217 0.0378 0.0000 0.9595 1.0000
41   NM 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
42   NO 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
43   Nt 0.7741 0.1309 0.0604 0.3916 0.1912 0.3308 0.4433 1.0000
44   OS 0.1390 0.0000 0.0000 0.0000 0.1390 0.1390 0.0000 1.0000
45   Pn 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
46   PS 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
47   Pv 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
48   Qn 1.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 1.0000
49   RM 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
50   RP 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
51   RT 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
52   SC 0.8834 0.0000 0.0000 0.5312 0.3522 0.0000 0.8834 1.0000
53   SH 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
54   SL 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000
55   Un 0.5891 0.0000 0.0000 0.4312 0.1579 0.5891 0.0000 1.0000
56   Vt 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
57   Wi 0.5590 0.0000 0.0000 0.1289 0.4301 0.5590 0.0000 1.0000
58   WM 0.0397 0.0000 0.0000 0.0000 0.0397 0.0000 0.0397 1.0000
59   Ya 0.7456 0.0000 0.2916 0.1131 0.3409 0.0000 0.7456 1.0000

Hooray hockey!

edit: did anybody new clinch? Looking at this I'd say no... :confused:
 
No if they miss it is because they didn't earn there way win. The out of conference record matters and SCSU sucked out of conference...
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.
 
Re: Pairwise and Bracketology 2013 Edition

So, taking a quick look at my numbers, I see a seed range for Notre Dame from #3-#19. Uhhh...
 
Re: Pairwise and Bracketology 2013 Edition

So, taking a quick look at my numbers, I see a seed range for Notre Dame from #3-#19. Uhhh...

Kinda freakish, isn't it.

edit: I like how they have a better bead on a 1 than a 2, but neither are better than the 3 or 4.
 
Re: Pairwise and Bracketology 2013 Edition

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...
 
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]<rpi.prelim[game.results[,1]])&(game.results[,2]>game.results[,4]))))
keep.right.id=which(((game.pt.eval[,2]<rpi.prelim[game.results[,3]])&(game.results[,4]>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.
 
Re: Pairwise and Bracketology 2013 Edition

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.
 
Re: Pairwise and Bracketology 2013 Edition

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.
 
Re: Pairwise and Bracketology 2013 Edition

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!
 
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?
 
Re: Pairwise and Bracketology 2013 Edition

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.
 
Re: Pairwise and Bracketology 2013 Edition

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)
 
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.
 
Status
Not open for further replies.
Back
Top