# "Power-Method" powerMethod <- function(A, r0 = rep(1, nrow(A)), treshold = 10^(-10)) { r_alt <- r0 matExp <- A for (i in 2:10000) # large enough (or while(true)) { matExp <- matExp%*%A r <- matExp%*%r0/norm(matExp%*%r0,'F') #print(r) if (norm(r-r_alt,'F') < treshold) { print(paste0("Found solution after ", i, " iterations.")) break } r_alt <- r } return(r) } # Type 0: A with a_ij equals 1 for win, 0.5 for draw and 0 for loss # Type 1: S_ij: team i scored s_ij points versus team j # Type 2: A with a_ij = (S_ij+1)/(S_ij+S_ji+2) generateA <- function(dataSet, type = 0) { teams <- as.character(unique(dataSet$HomeTeam)) A <- matrix(0, nrow=length(teams), ncol=length(teams)) # named matrix rownames(A) <- teams colnames(A) <- teams for (i in 1:nrow(dataSet)) { homeTeam <- as.character(dataSet$HomeTeam[i]) awayTeam <- as.character(dataSet$AwayTeam[i]) if (type == 0) { gd <- dataSet$FTHG[i] - dataSet$FTAG[i] if (gd > 0) { A[homeTeam,awayTeam] <- A[homeTeam,awayTeam] + 1 } else if (gd < 0) { A[awayTeam,homeTeam] <- A[awayTeam,homeTeam] + 1 } else { A[homeTeam,awayTeam] <- A[homeTeam,awayTeam] + 0.5 A[awayTeam,homeTeam] <- A[awayTeam,homeTeam] + 0.5 } } else if (type == 1) { A[homeTeam,awayTeam] <- A[homeTeam,awayTeam] + dataSet$FTHG[i] A[awayTeam,homeTeam] <- A[awayTeam,homeTeam] + dataSet$FTAG[i] } else if (type == 2) { A[homeTeam,awayTeam] <- A[homeTeam,awayTeam] + (dataSet$FTHG[i]+1)/(dataSet$FTHG[i]+dataSet$FTAG[i]+2) A[awayTeam,homeTeam] <- A[awayTeam,homeTeam] + (dataSet$FTAG[i]+1)/(dataSet$FTHG[i]+dataSet$FTAG[i]+2) } } return(A) }