Using R to Estimate the Pythaogrean Won-Loss Formula in Hockey
I have a paper under review at a journal where I (along with my co-author) provided theoretical verification for applying the Pythagorean Won-Loss formula to hockey. Originally devised for baseball, the Pythagorean Won-Loss formula estimates the percentage of games a team should have won at a particular point in a season. For decades, this formula had no mathematical justification from first principles. In 2006, the second author provided a statistical derivation by making some heuristic assumptions about the distributions of runs scored and allowed by baseball teams. We make a similar set of assumptions about hockey teams and show that the formula is just as applicable to hockey as it is to baseball. We conclude with a discussion of other models, and derive the linear predictor model as a first order approximation to the Pythagorean model. Our work is useful from a managerial perspective for a number of reasons as it allows one to understand what teams are over-performing and underperforming. As a result, managers could use our work as a basis for comparing teams of different eras and understanding the effects of hiring well-known coaches or superstars, as well as the expected gains resulting from mid-season signings.
I used R to estimate the Weibull densities, perform goodness of fit tests, compute the theoretical and expected Won-Loss percentages, and plot the Weibull densities versus the actual histograms of goals scored and goals allowed.
A preprint can be downloaded in its entirety here.
http://dl.dropbox.com/u/8437178/R%20Contest/HockeyPaper_contest.pdf
A few sample plots of estimated Weibull densities overlayed upon actual histograms of three NHL teams' goals scored and goals allowed are below








Here's a dropbox link to download the individual JPEG files
http://dl.dropbox.com/u/8437178/R%20Contest/Plots%20for%20Contest.zip
R Code is below.
The following code llweibull.R estimates a Weibull density via the method of maximum likelihood
loglike<-function(p) -sum(dweibull(data[,1]+0.5,p[1],p[2],log=T)+(dweibull(data[,2]+0.5,p[1],p[3],log=T))) results<-optim(c(1,5,6),loglike) print(results)
The following code Estimate Parameters_20102011.R uses llweibull.R to estimate the Weibull parameters as well as the expected won-loss percentage for each of the 30 NHL teams over the course of the 2010-2011 season.
<r>ematrix<-matrix(0,30,10) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Anaheim Ducks.txt") print("Anaheim Ducks") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[1,1:3]<-results$par ematrix[1,4]<-mean(data[,1]) ematrix[1,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[1,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Atlanta Thrashers.txt") print("Atlanta Thrashers") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[2,1:3]<-results$par ematrix[2,4]<-mean(data[,1]) ematrix[2,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[2,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Boston Bruins.txt") print("Boston Bruins") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[3,1:3]<-results$par ematrix[3,4]<-mean(data[,1]) ematrix[3,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[3,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Buffalo Sabres.txt") print("Buffalo Sabres") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[4,1:3]<-results$par ematrix[4,4]<-mean(data[,1]) ematrix[4,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[4,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Calgary Flames.txt") print("Calgary Flames") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[5,1:3]<-results$par ematrix[5,4]<-mean(data[,1]) ematrix[5,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[5,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Carolina Hurricanes.txt") print("Carolina Hurricanes") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[6,1:3]<-results$par ematrix[6,4]<-mean(data[,1]) ematrix[6,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[6,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Chicago Blackhawks.txt") print("Chicago Blackhawks") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[7,1:3]<-results$par ematrix[7,4]<-mean(data[,1]) ematrix[7,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[7,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Colorado Avalanche.txt") print("Colorado Avalanche") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[8,1:3]<-results$par ematrix[8,4]<-mean(data[,1]) ematrix[8,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[8,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Columbus Blue Jackets.txt") print("Columbus Blue Jackets") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[9,1:3]<-results$par ematrix[9,4]<-mean(data[,1]) ematrix[9,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[9,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Dallas Stars.txt") print("Dallas Stars") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[10,1:3]<-results$par ematrix[10,4]<-mean(data[,1]) ematrix[10,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[10,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Detroit Red Wings.txt") print("Detroit Red Wings") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[11,1:3]<-results$par ematrix[11,4]<-mean(data[,1]) ematrix[11,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[11,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Edmonton Oilers.txt") print("Edmonton Oilers") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[12,1:3]<-results$par ematrix[12,4]<-mean(data[,1]) ematrix[12,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[12,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Florida Panthers.txt") print("Florida Panthers") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[13,1:3]<-results$par ematrix[13,4]<-mean(data[,1]) ematrix[13,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[13,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//LA Kings.txt") print("LA Kings") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[14,1:3]<-results$par ematrix[14,4]<-mean(data[,1]) ematrix[14,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[14,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Minnesota Wild.txt") print("Minnesota Wild") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[15,1:3]<-results$par ematrix[15,4]<-mean(data[,1]) ematrix[15,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[15,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Montreal Canadiens.txt") print("Montreal Canadiens") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[16,1:3]<-results$par ematrix[16,4]<-mean(data[,1]) ematrix[16,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[16,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Nashville Predators.txt") print("Nashville Predators") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[17,1:3]<-results$par ematrix[17,4]<-mean(data[,1]) ematrix[17,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[17,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//New York Islanders.txt") print("New York Islanders") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[18,1:3]<-results$par ematrix[18,4]<-mean(data[,1]) ematrix[18,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[18,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//New York Rangers.txt") print("New York Rangers") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[19,1:3]<-results$par ematrix[19,4]<-mean(data[,1]) ematrix[19,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[19,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//NJ Devils.txt") print("NJ Devils") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[20,1:3]<-results$par ematrix[20,4]<-mean(data[,1]) ematrix[20,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[20,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Ottawa Senators.txt") print("Ottawa Senators") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[21,1:3]<-results$par ematrix[21,4]<-mean(data[,1]) ematrix[21,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[21,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Philadelphia Flyers.txt") print("Philadelphia Flyers") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[22,1:3]<-results$par ematrix[22,4]<-mean(data[,1]) ematrix[22,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[22,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Phoenix Coyotes.txt") print("Phoneix Coyotes") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[23,1:3]<-results$par ematrix[23,4]<-mean(data[,1]) ematrix[23,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[23,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Pittsburgh Penguins.txt") print("Pittsburgh Penguins") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[24,1:3]<-results$par ematrix[24,4]<-mean(data[,1]) ematrix[24,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[24,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//San Jose Sharks.txt") print("San Jose Sharks") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[25,1:3]<-results$par ematrix[25,4]<-mean(data[,1]) ematrix[25,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[25,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//St Louis Blues.txt") print("St Louis Blues") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[26,1:3]<-results$par ematrix[26,4]<-mean(data[,1]) ematrix[26,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[26,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Tampa Bay Lightning.txt") print("Tampa Bay Lightning") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[27,1:3]<-results$par ematrix[27,4]<-mean(data[,1]) ematrix[27,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[27,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Toronto Maple Leafs.txt") print("Toronto Maple Leafs") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[28,1:3]<-results$par ematrix[28,4]<-mean(data[,1]) ematrix[28,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[28,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Vancouver Canucks.txt") print("Vancouver Canucks") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[29,1:3]<-results$par ematrix[29,4]<-mean(data[,1]) ematrix[29,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[29,7]<-actualpercent data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Washington Capitals.txt") print("Washington Capitals") source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/llweibull.R") ematrix[30,1:3]<-results$par ematrix[30,4]<-mean(data[,1]) ematrix[30,5]<-mean(data[,2]) source("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/computeWL.R") ematrix[30,7]<-actualpercent team<-"Anaheim Ducks" team[1]<-"Anaheim Ducks" team[2]<-"Atlanta Thrashers" team[3]<-"Boston Bruins" team[4]<-"Buffalo Sabres" team[5]<-"Calgary Flames" team[6]<-"Carolina Hurricanes" team[7]<-"Chicago Blackhawks" team[8]<-"Colorado Avalanche" team[9]<-"Columbus Blue Jackets" team[10]<-"Dallas Stars" team[11]<-"Detroit Red Wings" team[12]<-"Edmonton Oilers" team[13]<-"Florida Panthers" team[14]<-"LA Kings" team[15]<-"Minnesota Wild" team[16]<-"Montreal Canadiens" team[17]<-"Nashville Predators" team[18]<-"New York Islanders" team[19]<-"New York Rangers" team[20]<-"NJ Devils" team[21]<-"Ottawa Senators" team[22]<-"Philadelphia Flyers" team[23]<-"Phoenix Coyotes" team[24]<-"Pittsburgh Penguins" team[25]<-"San Jose Sharks" team[26]<-"St Louis Blues" team[27]<-"Tampa Bay Lightning" team[28]<-"Toronto Maple Leafs" team[29]<-"Vancouver Canucks" team[30]<-"Washington Capitals"
for (i in 1:30) {ematrix[i,6]<-(ematrix[i,2]^ematrix[i,1])/((ematrix[i,2])^ematrix[i,1]+(ematrix[i,3])^ematrix[i,1]) ematrix[i,9]<-(ematrix[i,4]-mean(rweibull(1000,ematrix[i,1],ematrix[i,2])))/sd(rweibull(1000,ematrix[i,1],ematrix[i,2])) ematrix[i,10]<-(ematrix[i,5]-mean(rweibull(1000,ematrix[i,1],ematrix[i,3])))/sd(rweibull(1000,ematrix[i,1],ematrix[i,3]))} preteamlist<-t(team) teamlist<-t(preteamlist) Team<-teamlist Gamma<-ematrix[,1] Alpha_GS<-ematrix[,2] Alpha_GA<-ematrix[,3] Pythagorean_WL<-ematrix[,6] Actual_WL<-ematrix[,7] #print(data.frame(Team,Gamma,Alpha_GS,Alpha_GA,Pythagorean_WL,Actual_WL)) ematrix[,8]<-82*(ematrix[,7]-ematrix[,6]) GamesDiff<-ematrix[,8] zstatGS<-ematrix[,9] zstatGA<-ematrix[,10] quantile_matrix_win<-matrix(0,30,11) for (i in 1:30) { for (y in 0:10) {quantile_matrix_win[i,y+1]<-82*(pweibull(1+y, ematrix[i,1], ematrix[i,2])-pweibull(0+y, ematrix[i,1], ematrix[i,2]))}} quantile_matrix_loss<-matrix(0,30,11) for (i in 1:30) { for (y in 0:10) {quantile_matrix_loss[i,y+1]<-82*(pweibull(1+y, ematrix[i,1], ematrix[i,3])-pweibull(0+y, ematrix[i,1], ematrix[i,3]))}} #print(quantile_matrix_win) #print(quantile_matrix_loss) chisqval<-matrix(0,11,1) chisqval2<-matrix(0,11,1) chisqmatrix<-matrix(0,30,4) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Anaheim Ducks.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[1,i])^2/(quantile_matrix_win[1,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[1,i])^2/(quantile_matrix_loss[1,i])} chisqmatrix[1,1]<-(sum(chisqval)) chisqmatrix[1,2]<-(sum(chisqval2)) chisqmatrix[1,3]<-(dim(obswin_matrix)[1]) chisqmatrix[1,4]<-(dim(obsloss_matrix)[1]) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Atlanta Thrashers.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[2,i])^2/(quantile_matrix_win[2,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[2,i])^2/(quantile_matrix_loss[2,i])} chisqmatrix[2,1]<-(sum(chisqval)) chisqmatrix[2,2]<-(sum(chisqval2)) chisqmatrix[2,3]<-(dim(obswin_matrix)[1]) chisqmatrix[2,4]<-(dim(obsloss_matrix)[1]) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Boston Bruins.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[3,i])^2/(quantile_matrix_win[3,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[3,i])^2/(quantile_matrix_loss[3,i])} chisqmatrix[3,1]<-(sum(chisqval)) chisqmatrix[3,2]<-(sum(chisqval2)) chisqmatrix[3,3]<-(dim(obswin_matrix)[1]) chisqmatrix[3,4]<-(dim(obsloss_matrix)[1]) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Buffalo Sabres.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[4,i])^2/(quantile_matrix_win[4,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[4,i])^2/(quantile_matrix_loss[4,i])} chisqmatrix[4,1]<-(sum(chisqval)) chisqmatrix[4,2]<-(sum(chisqval2)) chisqmatrix[4,3]<-(dim(obswin_matrix)[1]) chisqmatrix[4,4]<-(dim(obsloss_matrix)[1]) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Calgary Flames.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[5,i])^2/(quantile_matrix_win[5,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[5,i])^2/(quantile_matrix_loss[5,i])} chisqmatrix[5,1]<-(sum(chisqval)) chisqmatrix[5,2]<-(sum(chisqval2)) chisqmatrix[5,3]<-(dim(obswin_matrix)[1]) chisqmatrix[5,4]<-(dim(obsloss_matrix)[1]) data<-read.table("C:/Users/Owner/Documents/Documents from old hard drives/Kevin/Hockey Data 2010-2011 Season//Carolina Hurricanes.txt") obswin_matrix<-as.matrix(table(data[,1])) obsloss_matrix<-as.matrix(table(data[,2])) for (i in 1:dim(obswin_matrix)[1]) {chisqval[i]<-(obswin_matrix[i]-quantile_matrix_win[6,i])^2/(quantile_matrix_win[6,i])} for (i in 1:dim(obsloss_matrix)[1]) {chisqval2[i]<-(obsloss_matrix[i]-quantile_matrix_loss[6,i])^2/(quantile_matrix_loss[6,i])} chisqmatrix[6,1]<-(sum(chisqval)) chisqmatrix[6,2]<-(sum(chisqval2)) chisqmatrix[6,3]<-(dim(obswin_matrix)[1]) chisqmatrix[6,4]<-(dim(obsloss_matrix)[1])
The above codes were used for the 2010-2011 season. The codes in their entirety as well as similar codes for the 2008-2009 and 2009-2010 seasons can be downloaded here - http://dl.dropbox.com/u/8437178/R%20Contest/R%20Code.zip
The hockey data that the R code uses as inputs from textfiles can be downloaded here. This data was downloaded via a JavaScript from ESPN.com. - http://dl.dropbox.com/u/8437178/R%20Contest/Hockey%20Data.zip
