Skip to content

Instantly share code, notes, and snippets.

@MonkmanMH
Last active December 13, 2015 20:28
Show Gist options
  • Save MonkmanMH/4969818 to your computer and use it in GitHub Desktop.
Save MonkmanMH/4969818 to your computer and use it in GitHub Desktop.
MLB team runs per game
# INDIVIDUAL TEAM HISTORY
#
# discussion and output can be found at
# http://bayesball.blogspot.ca/XXXXXXXXXXXXXXXXXXXXX
#
# Select the team you want from the franchID variable in the Teams.merge data frame
# and create a new data frame called "Team1"
# For this exercise we will use the Seattle Mariners, which are coded as SEA
# Note the use of double "=" to define the team!
Team1 <- as.data.frame(subset (Teams.merge, franchID == "SEA"))
#
# Create what will be the chart title from the contents of Team1
# Note that teams sprang into existence in different years, thus the requirement to define both the start and end dates
firstyear <- Team1$yearID[1]
lastyear <- tail(Team1$yearID, 1)
team.name <- Team1$name[1]
# alternate way to define "team.name"
team.name <- tail(Team1$name, 1)
#
# Combine all of the component into a single variable, "title.text"
# "paste" works like "concatenate" in other languages
title.text <- paste(team.name, firstyear, "-", lastyear,
": Runs scored relative to the league average")
#
#
# TREND LINE -- using LOESS modeling
# references:
# http://princeofslides.blogspot.ca/2011/05/sab-r-metrics-basics-of-loess.html
# http://research.stowers-institute.org/efg/R/Statistics/loess.htm
#
# Model Version 1, using default settings
# Creates a new object Runs.LO for loess model
RunIndex.LO <- loess(Team1$R_index ~ Team1$yearID)
RunIndex.LO.predict <- predict(RunIndex.LO)
#
# Model Version 2 (with more nuance/zig-zag to the trend line)
# create new object RunIndex.LO for loess model, span=0.25
RunIndex.LO.25 <- loess(Team1$R_index ~ Team1$yearID, span=0.25)
RunIndex.LO.25.predict <- predict(RunIndex.LO.25)
#
RunIndex.LO.5 <- loess(Team1$R_index ~ Team1$yearID, span=0.5)
RunIndex.LO.5.predict <- predict(RunIndex.LO.5)
#
# plot the data, add loess curve
ylim <- c(60,140)
plot(Team1$R_index ~ Team1$yearID,
ylim = ylim,
main = title.text,
xlab = "Year", ylab = "Index (league average = 100)")
# loess predicted value line
lines(Team1$yearID, RunIndex.LO.predict, lty="solid", col="black", lwd=1.5)
lines(Team1$yearID, RunIndex.LO.25.predict, lty="dashed", col="red", lwd=2)
lines(Team1$yearID, RunIndex.LO.5.predict, lty="dotdash", col="blue", lwd=1.5)
# chart legend and grid lines
legend(firstyear+2, 140,
c("default", "span=0.25", "span=0.50"),
lty=c("solid", "dashed", "dotdash"),
col=c("black", "red", "blue"),
lwd=c(1.5, 2, 1.5))
grid()
# straight line at 100
abline(h = 100, lty="dotdash")
#
# And save the data fram as a csv file
write.csv(Team1, file="Team1.csv")
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment