Lets begin by importing the data


# Read in data
baseball = read.csv("baseball.csv")
str(baseball)
'data.frame':   1232 obs. of  15 variables:
 $ Team        : chr  "ARI" "ATL" "BAL" "BOS" ...
 $ League      : chr  "NL" "NL" "AL" "AL" ...
 $ Year        : int  2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
 $ RS          : int  734 700 712 734 613 748 669 667 758 726 ...
 $ RA          : int  688 600 705 806 759 676 588 845 890 670 ...
 $ W           : int  81 94 93 69 61 85 97 68 64 88 ...
 $ OBP         : num  0.328 0.32 0.311 0.315 0.302 0.318 0.315 0.324 0.33 0.335 ...
 $ SLG         : num  0.418 0.389 0.417 0.415 0.378 0.422 0.411 0.381 0.436 0.422 ...
 $ BA          : num  0.259 0.247 0.247 0.26 0.24 0.255 0.251 0.251 0.274 0.268 ...
 $ Playoffs    : int  0 1 1 0 0 0 1 0 0 1 ...
 $ RankSeason  : int  NA 4 5 NA NA NA 2 NA NA 6 ...
 $ RankPlayoffs: int  NA 5 4 NA NA NA 4 NA NA 2 ...
 $ G           : int  162 162 162 162 162 162 162 162 162 162 ...
 $ OOBP        : num  0.317 0.306 0.315 0.331 0.335 0.319 0.305 0.336 0.357 0.314 ...
 $ OSLG        : num  0.415 0.378 0.403 0.428 0.424 0.405 0.39 0.43 0.47 0.402 ...

MLB Glossary

Team: A code for the name of the team

League: The Major League Baseball league the team belongs to, either AL (American League) or NL (National League)

Year: The year of the corresponding record

RS: The number of runs scored by the team in that year

RA: The number of runs allowed by the team in that year

W: The number of regular season wins by the team in that year

OBP: The on-base percentage of the team in that year

SLG: The slugging percentage of the team in that year

BA: The batting average of the team in that year

Playoffs: Whether the team made the playoffs in that year (1 for yes, 0 for no)

RankSeason: Among the playoff teams in that year, the ranking of their regular season records (1 is best)

RankPlayoffs: Among the playoff teams in that year, how well they fared in the playoffs. The team winning the World Series gets a RankPlayoffs of 1.

G: The number of games a team played in that year

OOBP: The team’s opponents’ on-base percentage in that year

OSLG: The team’s opponents’ slugging percentage in that year

Notice we have 15 features and 1231 records

#Each row in the baseball dataset represents a team in a particular year.How many team/year pairs are there in the whole dataset?
nrow(baseball)
[1] 1232
#Though the dataset contains data from 1962 until 2012, we removed several years with shorter-than-usual seasons. Using the table() function, identify the total number of years included in this dataset.
table(baseball$Year)

1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1973 1974 1975 1976 1977 1978 
  20   20   20   20   20   20   20   24   24   24   24   24   24   24   26   26 
1979 1980 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1996 1997 
  26   26   26   26   26   26   26   26   26   26   26   26   26   28   28   28 
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 
  30   30   30   30   30   30   30   30   30   30   30   30   30   30   30 

This chunk uses the table() function to count the frequency of each year in the ‘Year’ column of the ‘baseball’ dataset, indicating the dataset spans from 1962 to 2012, with some years missing and varying numbers of data points per year.

#The baseball dataset contains 47 years (1972, 1981, 1994, and 1995 are missing). We can count the number of years in the table, or use the command length(table(baseball$Year)) directly to get the answer.
length(table(baseball$Year))
[1] 47

We can see that the count of the years in the table to be 47

Limiting to Teams Making the Playoffs

Because we’re only analyzing teams that made the playoffs, we can use the subset() function to replace baseball with a data frame limited to teams that made the playoffs (so our subsetted data frame should still be called “baseball”). How many team/year pairs are included in the new dataset?

baseball = subset(baseball, Playoffs == 1)
nrow(baseball)
[1] 244

Here we can see the count of teams that made it through to the playoffs from the dataset overall to be 244

#Through the years, different numbers of teams have been invited to the playoffs.
table(baseball$Year)

1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1973 1974 1975 1976 1977 1978 
   2    2    2    2    2    2    2    4    4    4    4    4    4    4    4    4 
1979 1980 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1996 1997 
   4    4    4    4    4    4    4    4    4    4    4    4    4    4    8    8 
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 
   8    8    8    8    8    8    8    8    8    8    8    8    8    8   10 

The number of teams in the postseason has changed drastically previously around at two in 1962 too 10 in 2012

table(table(baseball$Year))

 2  4  8 10 
 7 23 16  1 

Lets see how many the different amount of teams in post season happen each year from our dataset. We see there were 2 teams 7 times, 4 teams 23 times, 8 teams 16, and 10 teams just once. Meaning a majority of the MLB games have had 4 times competing inn the playoffs against each other.

Adding an Important Predictor

It’s much harder to win the World Series if there are 10 teams competing for the championship versus just two. Therefore, we will add the predictor variable NumCompetitors to the baseball data frame. NumCompetitors will contain the number of total teams making the playoffs in the year of a particular team/year pair. For instance, NumCompetitors should be 2 for the 1962 New York Yankees, but it should be 8 for the 1998 Boston Red Sox.

#We start by storing the output of the table() function that counts the number of playoff teams from each year:

PlayoffTable = table(baseball$Year)

#You can output the table with the following command:

PlayoffTable

1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1973 1974 1975 1976 1977 1978 
   2    2    2    2    2    2    2    4    4    4    4    4    4    4    4    4 
1979 1980 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1996 1997 
   4    4    4    4    4    4    4    4    4    4    4    4    4    4    8    8 
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 
   8    8    8    8    8    8    8    8    8    8    8    8    8    8   10 
str(names(PlayoffTable))
 chr [1:47] "1962" "1963" "1964" "1965" "1966" "1967" "1968" "1969" "1970" ...

This is all of the names for our new playoffs table notice that the column names are each year as a string.

 #Which function call returns the number of playoff teams in 1990 and 2001?
PlayoffTable[c("1990", "2001")]

1990 2001 
   4    8 

We can see that there were 4 playoff teams in 1990 and 8 in 2010

#Putting it all together, we want to look up the number of teams in the playoffs for each team/year pair in the dataset, and store it as a new variable named NumCompetitors in the baseball data frame.
baseball$NumCompetitors = PlayoffTable[as.character(baseball$Year)]
baseball$NumCompetitors
  [1] 10 10 10 10 10 10 10 10 10 10  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8
 [26]  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8
 [51]  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8
 [76]  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8
[101]  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8
[126]  8  8  8  8  8  8  8  8  8  8  8  8  8  4  4  4  4  4  4  4  4  4  4  4  4
[151]  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4
[176]  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4
[201]  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4
[226]  4  4  4  4  4  2  2  2  2  2  2  2  2  2  2  2  2  2  2
#How many playoff team/year pairs are there in our dataset from years where 8 teams were invited to the playoffs?
table(baseball$NumCompetitors)

  2   4   8  10 
 14  92 128  10 

We can see that in this table we saw 128, years where 8 teams where invited.

Bivariate Models for Predicting World Series Winner

In this problem, we seek to predict whether a team won the World Series; in our dataset this is denoted with a RankPlayoffs value of 1. Add a variable named WorldSeries to the baseball data frame, by typing the following command in your R console:

baseballWorldSeries=as.numeric(baseball RankPlayoffs == 1)

WorldSeries takes value 1 if a team won the World Series in the indicated year and a 0 otherwise.

#How many observations do we have in our dataset where a team did NOT win the World Series?
baseball$WorldSeries = as.numeric(baseball$RankPlayoffs == 1)
table(baseball$WorldSeries)

  0   1 
197  47 

We see that 197 teams overall from the dataset did not make it to the playoffs and 47 teams did

Bivariate Models for Predicting World Series Winner

When we’re not sure which of our variables are useful in predicting a particular outcome, it’s often helpful to build bivariate models, which are models that predict the outcome using a single independent variable. Which of the following variables is a significant predictor of the WorldSeries variable in a bivariate logistic regression model? To determine significance, remember to look at the stars in the summary output of the model. We’ll define an independent variable as significant if there is at least one star at the end of the coefficients row for that variable (this is equivalent to the probability column having a value smaller than 0.05). Note that you have to build 12 models to answer this question! Use the entire dataset baseball to build the models

#Which of the following variables is a significant predictor of the WorldSeries variable in a bivariate logistic regression model?
#Varibales to use as predictors for each bivariate model(Year, RS, RA, W, OBP, SLG, BA, RankSeason, OOBP,OSLG, NumCompetitors, League)
model1<-glm(WorldSeries~Year, data=baseball, family="binomial")
summary(model1)

Call:
glm(formula = WorldSeries ~ Year, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept) 72.23602   22.64409    3.19  0.00142 **
Year        -0.03700    0.01138   -3.25  0.00115 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 228.35  on 242  degrees of freedom
AIC: 232.35

Number of Fisher Scoring iterations: 4

With the ‘WorldSeries’ variable as the outcome and ‘Year’ as the predictor, the summary indicates that ‘Year’ is a statistically significant predictor of ‘WorldSeries’ as evidenced by the p-value of 0.00115 which is less than alpha(0.05). Year is a significant predictor!

model2<-glm(WorldSeries~RS, data=baseball, family="binomial")
summary(model2)

Call:
glm(formula = WorldSeries ~ RS, family = "binomial", data = baseball)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)  0.661226   1.636494   0.404    0.686
RS          -0.002681   0.002098  -1.278    0.201

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 237.45  on 242  degrees of freedom
AIC: 241.45

Number of Fisher Scoring iterations: 4

Notice the high p value of 0.201 means we have to accept alpha and discover that there is no statistical significance to this predictor.
Runs Scored is not significant

Lets make a model using RA (runs allowed) as a predictor.

model3<-glm(WorldSeries~RA, data=baseball, family="binomial")
summary(model3)

Call:
glm(formula = WorldSeries ~ RA, family = "binomial", data = baseball)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)  
(Intercept)  1.888174   1.483831   1.272   0.2032  
RA          -0.005053   0.002273  -2.223   0.0262 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 233.88  on 242  degrees of freedom
AIC: 237.88

Number of Fisher Scoring iterations: 4

‘RA’ as a predictor of ‘WorldSeries’ is significant with a p-value of 0.0262, which is less than the significance level alpha. The negative estimate for ‘RA’ suggests a negative correlation, indicating that as ‘RA’ increases, the likelihood of ‘WorldSeries’ decreases. Notice the z-value of -2.223 indicating that the observed effect is 2.223 standard deviations away from the null hypothesis which is statistically significant given the corresponding p-value RA is a significant predictor!

model4<-glm(WorldSeries~W, data=baseball, family="binomial")
summary(model4)

Call:
glm(formula = WorldSeries ~ W, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept) -6.85568    2.87620  -2.384   0.0171 *
W            0.05671    0.02988   1.898   0.0577 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 235.51  on 242  degrees of freedom
AIC: 239.51

Number of Fisher Scoring iterations: 4

Wins as a predictor of close to alpha but still past it at a pvalue of 0.0577 which means that we must accept Ho and that it has no statistical significance. W is not significant

model5<-glm(WorldSeries~OBP, data=baseball, family="binomial")
summary(model5)

Call:
glm(formula = WorldSeries ~ OBP, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)    2.741      3.989   0.687    0.492
OBP          -12.402     11.865  -1.045    0.296

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 238.02  on 242  degrees of freedom
AIC: 242.02

Number of Fisher Scoring iterations: 4

Interestingly OBP as a predictor has a high pvalue at 0.296 which means it isn’t statistically significant. OBP is not significant

model6<-glm(WorldSeries~SLG, data=baseball, family="binomial")
summary(model6)

Call:
glm(formula = WorldSeries ~ SLG, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)    3.200      2.358   1.357   0.1748  
SLG          -11.130      5.689  -1.956   0.0504 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 235.23  on 242  degrees of freedom
AIC: 239.23

Number of Fisher Scoring iterations: 4

SLG as a predictor is super clost to alpha at 0.0504 which some may aceptable to call it significant, and if they did they would not that there is a negative correlation of -11.13. Yet for our use we will round up an in that case we would choose to accpet Ho and deem SLG as not statistically significant

model7<-glm(WorldSeries~BA, data=baseball, family="binomial")
summary(model7)

Call:
glm(formula = WorldSeries ~ BA, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -0.6392     3.8988  -0.164    0.870
BA           -2.9765    14.6123  -0.204    0.839

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 239.08  on 242  degrees of freedom
AIC: 243.08

Number of Fisher Scoring iterations: 4

Clearly Batting Average as a predictor fpr entering the worldseries has no use since it p-value is highly insignificant at 0.839 BA is not statistically significant

model8<-glm(WorldSeries~RankSeason, data=baseball, family="binomial")
summary(model8) 

Call:
glm(formula = WorldSeries ~ RankSeason, family = "binomial", 
    data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  -0.8256     0.3268  -2.527   0.0115 *
RankSeason   -0.2069     0.1027  -2.016   0.0438 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 234.75  on 242  degrees of freedom
AIC: 238.75

Number of Fisher Scoring iterations: 4

Rank season is less than alpha so we can reject H0 and declare it as statistically significan note that it has a negative correlation so if it increases your likely hood of entering the world series is lower which for me is counter intuitive. RankSeason is significant!

model9<-glm(WorldSeries~OOBP, data=baseball, family="binomial")
summary(model9)

Call:
glm(formula = WorldSeries ~ OOBP, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -0.9306     8.3728  -0.111    0.912
OOBP         -3.2233    26.0587  -0.124    0.902

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 84.926  on 113  degrees of freedom
Residual deviance: 84.910  on 112  degrees of freedom
  (130 observations deleted due to missingness)
AIC: 88.91

Number of Fisher Scoring iterations: 4

OOBP performed even worse than OBP as a predictor OOBP is not significant

model10<-glm(WorldSeries~OSLG, data=baseball, family="binomial")
summary(model10)

Call:
glm(formula = WorldSeries ~ OSLG, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.08725    6.07285  -0.014    0.989
OSLG        -4.65992   15.06881  -0.309    0.757

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 84.926  on 113  degrees of freedom
Residual deviance: 84.830  on 112  degrees of freedom
  (130 observations deleted due to missingness)
AIC: 88.83

Number of Fisher Scoring iterations: 4

OSLG is not significant

model11<-glm(WorldSeries~NumCompetitors, data=baseball, family="binomial")
summary(model11)

Call:
glm(formula = WorldSeries ~ NumCompetitors, family = "binomial", 
    data = baseball)

Coefficients:
               Estimate Std. Error z value Pr(>|z|)    
(Intercept)     0.03868    0.43750   0.088 0.929559    
NumCompetitors -0.25220    0.07422  -3.398 0.000678 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 226.96  on 242  degrees of freedom
AIC: 230.96

Number of Fisher Scoring iterations: 4

NumCompetitors is significant!

model12<-glm(WorldSeries~League, data=baseball, family="binomial")
summary(model12)

Call:
glm(formula = WorldSeries ~ League, family = "binomial", data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.3558     0.2243  -6.045  1.5e-09 ***
LeagueNL     -0.1583     0.3252  -0.487    0.626    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 238.88  on 242  degrees of freedom
AIC: 242.88

Number of Fisher Scoring iterations: 4

League is not significant

In short, the significant predictors are Year, RA, and NumCompetitors.

Multivariate Models for Predicting World Series Winner

In this section, we’ll consider multivariate models that combine the variables we found to be significant in bivariate models. Build a model using all of the variables that you found to be significant in the bivariate models. How many variables are significant in the combined model?

#How many variables are significant in the combined model?
LogModel = glm(WorldSeries ~ Year + RA + RankSeason + NumCompetitors, data=baseball, family=binomial)
summary(LogModel)

Call:
glm(formula = WorldSeries ~ Year + RA + RankSeason + NumCompetitors, 
    family = binomial, data = baseball)

Coefficients:
                 Estimate Std. Error z value Pr(>|z|)
(Intercept)    12.5874376 53.6474210   0.235    0.814
Year           -0.0061425  0.0274665  -0.224    0.823
RA             -0.0008238  0.0027391  -0.301    0.764
RankSeason     -0.0685046  0.1203459  -0.569    0.569
NumCompetitors -0.1794264  0.1815933  -0.988    0.323

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 226.37  on 239  degrees of freedom
AIC: 236.37

Number of Fisher Scoring iterations: 4

None of these predictors are below alpha so we would accept H0 for all of them as predictors and this model in general.

Looking at summary(LogModel), we can see that none of the variables are significant in the multivariate model. Often, variables that were significant in bivariate models are no longer significant in multivariate analysis due to correlation between the variables.

Which of the following variable pairs have a high degree of correlation (a correlation greater than 0.8 or less than -0.8)?

#We can compute all pair-wise correlations between these variables with:
cor(baseball[c("Year", "RA", "RankSeason", "NumCompetitors")])
                    Year        RA RankSeason NumCompetitors
Year           1.0000000 0.4762422  0.3852191      0.9139548
RA             0.4762422 1.0000000  0.3991413      0.5136769
RankSeason     0.3852191 0.3991413  1.0000000      0.4247393
NumCompetitors 0.9139548 0.5136769  0.4247393      1.0000000

Year and NumCOmpetit While every pair was at least moderately correlated, the only strongly correlated pair was Year/NumCompetitors, with correlation coefficient 0.914.

Let us build all six of the two variable models listed in the previous problem. Together with the four bivariate models that were significant, we should have 10 different logistic regression models to analyze. Which model has the best AIC value (the minimum AIC value)?

#The two-variable models can be built with the following commands:

model13 = glm(WorldSeries ~ Year + RA, data=baseball, family=binomial)
summary(model13)

Call:
glm(formula = WorldSeries ~ Year + RA, family = binomial, data = baseball)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)  
(Intercept) 63.610741  25.654830   2.479   0.0132 *
Year        -0.032084   0.013323  -2.408   0.0160 *
RA          -0.001766   0.002585  -0.683   0.4945  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 227.88  on 241  degrees of freedom
AIC: 233.88

Number of Fisher Scoring iterations: 4

We can see that Year is statistically significant in predicting the world series in this model, notice it is negatively correlated so the higher the year the less likely to enter the world series. which makes sense given new teams coming to existence. Runs allowed was not statistically significant since it had a high pvalue far above alpha

model14 = glm(WorldSeries ~ Year + RankSeason, data=baseball, family=binomial)
summary(model14)

Call:
glm(formula = WorldSeries ~ Year + RankSeason, family = binomial, 
    data = baseball)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept) 63.64855   24.37063   2.612  0.00901 **
Year        -0.03254    0.01231  -2.643  0.00822 **
RankSeason  -0.10064    0.11352  -0.887  0.37534   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 227.55  on 241  degrees of freedom
AIC: 233.55

Number of Fisher Scoring iterations: 4

Year again was significant and negatively correlated. Where as its paired predictor (rankSeason) was not statistically significant, given its high pvalue of 0.375 which as we know is more than alpha.

model15 = glm(WorldSeries ~ Year + NumCompetitors, data=baseball, family=binomial)
summary(model15)

Call:
glm(formula = WorldSeries ~ Year + NumCompetitors, family = binomial, 
    data = baseball)

Coefficients:
                Estimate Std. Error z value Pr(>|z|)
(Intercept)    13.350467  53.481896   0.250    0.803
Year           -0.006802   0.027328  -0.249    0.803
NumCompetitors -0.212610   0.175520  -1.211    0.226

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 226.90  on 241  degrees of freedom
AIC: 232.9

Number of Fisher Scoring iterations: 4

TAHis model predicting world series with the predictor pairing of year and numcompetitors worsend or previously models where year was significant.

model16 = glm(WorldSeries ~ RA + RankSeason, data=baseball, family=binomial)
summary(model16)

Call:
glm(formula = WorldSeries ~ RA + RankSeason, family = binomial, 
    data = baseball)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)  1.487461   1.506143   0.988    0.323
RA          -0.003815   0.002441  -1.563    0.118
RankSeason  -0.140824   0.110908  -1.270    0.204

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 232.22  on 241  degrees of freedom
AIC: 238.22

Number of Fisher Scoring iterations: 4
model17 = glm(WorldSeries ~ RA + NumCompetitors, data=baseball, family=binomial)
summary(model17)

Call:
glm(formula = WorldSeries ~ RA + NumCompetitors, family = binomial, 
    data = baseball)

Coefficients:
                Estimate Std. Error z value Pr(>|z|)   
(Intercept)     0.716895   1.528736   0.469  0.63911   
RA             -0.001233   0.002661  -0.463  0.64313   
NumCompetitors -0.229385   0.088399  -2.595  0.00946 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 226.74  on 241  degrees of freedom
AIC: 232.74

Number of Fisher Scoring iterations: 4

Here we can see that NumCompetitors is significant at 0.00946 and negatively correlated. where as its paired predictor RA is not significant with ist high pvalue of 0.64

model18 = glm(WorldSeries ~ RankSeason + NumCompetitors, data=baseball, family=binomial)
summary(model18)

Call:
glm(formula = WorldSeries ~ RankSeason + NumCompetitors, family = binomial, 
    data = baseball)

Coefficients:
               Estimate Std. Error z value Pr(>|z|)   
(Intercept)     0.12277    0.45737   0.268  0.78837   
RankSeason     -0.07697    0.11711  -0.657  0.51102   
NumCompetitors -0.22784    0.08201  -2.778  0.00546 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 239.12  on 243  degrees of freedom
Residual deviance: 226.52  on 241  degrees of freedom
AIC: 232.52

Number of Fisher Scoring iterations: 4

Here we can see that numCompetitiors is significant with a pvalue of 0.00546 and negatively correlated. Also not that RankSeason is not significant wiht its high p-value.

None of the models with two independent variables had both variables significant, so none seem promising as compared to a simple bivariate model. Indeed the model with the lowest AIC value is the model with just NumCompetitors as the independent variable. This seems to confirm the claim made by Billy Beane in Moneyball that all that matters in the Playoffs is luck, since NumCompetitors has nothing to do with the quality of the teams!

LS0tCnRpdGxlOiAiQWN0aXZpdHkgMTUgLSBXb3JsZCBTZXJpZXMgLSBTcG9ydHMgQW5hbHl0aWNzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyMjIExldHMgYmVnaW4gYnkgaW1wb3J0aW5nIHRoZSBkYXRhCmBgYHtyfQoKIyBSZWFkIGluIGRhdGEKYmFzZWJhbGwgPSByZWFkLmNzdigiYmFzZWJhbGwuY3N2IikKc3RyKGJhc2ViYWxsKQoKYGBgCgojIE1MQiBHbG9zc2FyeQoKVGVhbTogQSBjb2RlIGZvciB0aGUgbmFtZSBvZiB0aGUgdGVhbQoKTGVhZ3VlOiBUaGUgTWFqb3IgTGVhZ3VlIEJhc2ViYWxsIGxlYWd1ZSB0aGUgdGVhbSBiZWxvbmdzIHRvLCBlaXRoZXIgQUwgKEFtZXJpY2FuIExlYWd1ZSkgb3IgTkwgKE5hdGlvbmFsIExlYWd1ZSkKClllYXI6IFRoZSB5ZWFyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHJlY29yZAoKUlM6IFRoZSBudW1iZXIgb2YgcnVucyBzY29yZWQgYnkgdGhlIHRlYW0gaW4gdGhhdCB5ZWFyCgpSQTogVGhlIG51bWJlciBvZiBydW5zIGFsbG93ZWQgYnkgdGhlIHRlYW0gaW4gdGhhdCB5ZWFyCgpXOiBUaGUgbnVtYmVyIG9mIHJlZ3VsYXIgc2Vhc29uIHdpbnMgYnkgdGhlIHRlYW0gaW4gdGhhdCB5ZWFyCgpPQlA6IFRoZSBvbi1iYXNlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRlYW0gaW4gdGhhdCB5ZWFyCgpTTEc6IFRoZSBzbHVnZ2luZyBwZXJjZW50YWdlIG9mIHRoZSB0ZWFtIGluIHRoYXQgeWVhcgoKQkE6IFRoZSBiYXR0aW5nIGF2ZXJhZ2Ugb2YgdGhlIHRlYW0gaW4gdGhhdCB5ZWFyCgpQbGF5b2ZmczogV2hldGhlciB0aGUgdGVhbSBtYWRlIHRoZSBwbGF5b2ZmcyBpbiB0aGF0IHllYXIgKDEgZm9yIHllcywgMCBmb3Igbm8pCgpSYW5rU2Vhc29uOiBBbW9uZyB0aGUgcGxheW9mZiB0ZWFtcyBpbiB0aGF0IHllYXIsIHRoZSByYW5raW5nIG9mIHRoZWlyIHJlZ3VsYXIgc2Vhc29uIHJlY29yZHMgKDEgaXMgYmVzdCkKClJhbmtQbGF5b2ZmczogQW1vbmcgdGhlIHBsYXlvZmYgdGVhbXMgaW4gdGhhdCB5ZWFyLCBob3cgd2VsbCB0aGV5IGZhcmVkIGluIHRoZSBwbGF5b2Zmcy4gVGhlIHRlYW0gd2lubmluZyB0aGUgV29ybGQgU2VyaWVzIGdldHMgYSAKUmFua1BsYXlvZmZzIG9mIDEuCgpHOiBUaGUgbnVtYmVyIG9mIGdhbWVzIGEgdGVhbSBwbGF5ZWQgaW4gdGhhdCB5ZWFyCgpPT0JQOiBUaGUgdGVhbeKAmXMgb3Bwb25lbnRz4oCZIG9uLWJhc2UgcGVyY2VudGFnZSBpbiB0aGF0IHllYXIKCk9TTEc6IFRoZSB0ZWFt4oCZcyBvcHBvbmVudHPigJkgc2x1Z2dpbmcgcGVyY2VudGFnZSBpbiB0aGF0IHllYXIKCk5vdGljZSB3ZSBoYXZlIDE1IGZlYXR1cmVzIGFuZCAxMjMxIHJlY29yZHMgCmBgYHtyfQojRWFjaCByb3cgaW4gdGhlIGJhc2ViYWxsIGRhdGFzZXQgcmVwcmVzZW50cyBhIHRlYW0gaW4gYSBwYXJ0aWN1bGFyIHllYXIuSG93IG1hbnkgdGVhbS95ZWFyIHBhaXJzIGFyZSB0aGVyZSBpbiB0aGUgd2hvbGUgZGF0YXNldD8KbnJvdyhiYXNlYmFsbCkKYGBgCgoKYGBge3J9CiNUaG91Z2ggdGhlIGRhdGFzZXQgY29udGFpbnMgZGF0YSBmcm9tIDE5NjIgdW50aWwgMjAxMiwgd2UgcmVtb3ZlZCBzZXZlcmFsIHllYXJzIHdpdGggc2hvcnRlci10aGFuLXVzdWFsIHNlYXNvbnMuIFVzaW5nIHRoZSB0YWJsZSgpIGZ1bmN0aW9uLCBpZGVudGlmeSB0aGUgdG90YWwgbnVtYmVyIG9mIHllYXJzIGluY2x1ZGVkIGluIHRoaXMgZGF0YXNldC4KdGFibGUoYmFzZWJhbGwkWWVhcikKCmBgYApUaGlzIGNodW5rIHVzZXMgdGhlIHRhYmxlKCkgZnVuY3Rpb24gdG8gY291bnQgdGhlIGZyZXF1ZW5jeSBvZiBlYWNoIHllYXIgaW4gdGhlICdZZWFyJyBjb2x1bW4gb2YgdGhlICdiYXNlYmFsbCcgZGF0YXNldCwgaW5kaWNhdGluZyB0aGUgZGF0YXNldCBzcGFucyBmcm9tIDE5NjIgdG8gMjAxMiwgd2l0aCBzb21lIHllYXJzIG1pc3NpbmcgYW5kIHZhcnlpbmcgbnVtYmVycyBvZiBkYXRhIHBvaW50cyBwZXIgeWVhci4KCmBgYHtyfQojVGhlIGJhc2ViYWxsIGRhdGFzZXQgY29udGFpbnMgNDcgeWVhcnMgKDE5NzIsIDE5ODEsIDE5OTQsIGFuZCAxOTk1IGFyZSBtaXNzaW5nKS4gV2UgY2FuIGNvdW50IHRoZSBudW1iZXIgb2YgeWVhcnMgaW4gdGhlIHRhYmxlLCBvciB1c2UgdGhlIGNvbW1hbmQgbGVuZ3RoKHRhYmxlKGJhc2ViYWxsJFllYXIpKSBkaXJlY3RseSB0byBnZXQgdGhlIGFuc3dlci4KbGVuZ3RoKHRhYmxlKGJhc2ViYWxsJFllYXIpKQoKYGBgCldlIGNhbiBzZWUgdGhhdCB0aGUgY291bnQgb2YgdGhlIHllYXJzIGluIHRoZSB0YWJsZSB0byBiZSA0NwoKIyBMaW1pdGluZyB0byBUZWFtcyBNYWtpbmcgdGhlIFBsYXlvZmZzIApCZWNhdXNlIHdl4oCZcmUgb25seSBhbmFseXppbmcgdGVhbXMgdGhhdCBtYWRlIHRoZSBwbGF5b2Zmcywgd2UgY2FuIHVzZSB0aGUgc3Vic2V0KCkgZnVuY3Rpb24gdG8gcmVwbGFjZSBiYXNlYmFsbCB3aXRoIGEgZGF0YSBmcmFtZSBsaW1pdGVkIHRvIHRlYW1zIHRoYXQgbWFkZSB0aGUgcGxheW9mZnMgKHNvIG91ciBzdWJzZXR0ZWQgZGF0YSBmcmFtZSBzaG91bGQgc3RpbGwgYmUgY2FsbGVkIOKAnGJhc2ViYWxs4oCdKS4gSG93IG1hbnkgdGVhbS95ZWFyIHBhaXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbmV3IGRhdGFzZXQ/CgoKYGBge3J9CiMgTGV0cyB1c2UgdGhlIG5yb3cgZnVuY3Rpb24gdG8gY291bnQgaW5zdGVhZCBvZiB0YWJsZSBhbmQgc2V0IFBsYXlvZmZzIGVxdWFsIHRvIDEgKG1hZGUgaXQgdG8gdGhlIHBsYXlvZmZzKQpiYXNlYmFsbCA9IHN1YnNldChiYXNlYmFsbCwgUGxheW9mZnMgPT0gMSkKbnJvdyhiYXNlYmFsbCkKCmBgYAoKSGVyZSB3ZSBjYW4gc2VlIHRoZSBjb3VudCBvZiB0ZWFtcyB0aGF0IG1hZGUgaXQgdGhyb3VnaCB0byB0aGUgcGxheW9mZnMgZnJvbSB0aGUgZGF0YXNldCBvdmVyYWxsIHRvIGJlIDI0NAoKYGBge3J9CiNUaHJvdWdoIHRoZSB5ZWFycywgZGlmZmVyZW50IG51bWJlcnMgb2YgdGVhbXMgaGF2ZSBiZWVuIGludml0ZWQgdG8gdGhlIHBsYXlvZmZzLgp0YWJsZShiYXNlYmFsbCRZZWFyKQoKYGBgClRoZSBudW1iZXIgb2YgdGVhbXMgaW4gdGhlIHBvc3RzZWFzb24gaGFzIGNoYW5nZWQgZHJhc3RpY2FsbHkgIHByZXZpb3VzbHkgYXJvdW5kIGF0IHR3byBpbiAxOTYyIHRvbyAxMCBpbiAyMDEyIAoKYGBge3J9CnRhYmxlKHRhYmxlKGJhc2ViYWxsJFllYXIpKQoKYGBgCiBMZXRzIHNlZSBob3cgbWFueSB0aGUgZGlmZmVyZW50IGFtb3VudCBvZiB0ZWFtcyBpbiBwb3N0IHNlYXNvbiBoYXBwZW4gZWFjaCB5ZWFyIGZyb20gb3VyIGRhdGFzZXQuIAogV2Ugc2VlIHRoZXJlIHdlcmUgMiB0ZWFtcyA3IHRpbWVzLCA0IHRlYW1zIDIzIHRpbWVzLCAgOCB0ZWFtcyAxNiwgYW5kIDEwIHRlYW1zIGp1c3Qgb25jZS4gTWVhbmluZyBhIG1ham9yaXR5IG9mIHRoZSBNTEIgZ2FtZXMgaGF2ZSBoYWQgNCB0aW1lcyBjb21wZXRpbmcgaW5uIHRoZSBwbGF5b2ZmcyBhZ2FpbnN0IGVhY2ggb3RoZXIuIAoKCiMgQWRkaW5nIGFuIEltcG9ydGFudCBQcmVkaWN0b3IKSXTigJlzIG11Y2ggaGFyZGVyIHRvIHdpbiB0aGUgV29ybGQgU2VyaWVzIGlmIHRoZXJlIGFyZSAxMCB0ZWFtcyBjb21wZXRpbmcgZm9yIHRoZSBjaGFtcGlvbnNoaXAgdmVyc3VzIGp1c3QgdHdvLiBUaGVyZWZvcmUsIHdlIHdpbGwgYWRkIHRoZSBwcmVkaWN0b3IgdmFyaWFibGUgTnVtQ29tcGV0aXRvcnMgdG8gdGhlIGJhc2ViYWxsIGRhdGEgZnJhbWUuIE51bUNvbXBldGl0b3JzIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mIHRvdGFsIHRlYW1zIG1ha2luZyB0aGUgcGxheW9mZnMgaW4gdGhlIHllYXIgb2YgYSBwYXJ0aWN1bGFyIHRlYW0veWVhciBwYWlyLiBGb3IgaW5zdGFuY2UsIE51bUNvbXBldGl0b3JzIHNob3VsZCBiZSAyIGZvciB0aGUgMTk2MiBOZXcgWW9yayBZYW5rZWVzLCBidXQgaXQgc2hvdWxkIGJlIDggZm9yIHRoZSAxOTk4IEJvc3RvbiBSZWQgU294LgoKCmBgYHtyfQojV2Ugc3RhcnQgYnkgc3RvcmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0YWJsZSgpIGZ1bmN0aW9uIHRoYXQgY291bnRzIHRoZSBudW1iZXIgb2YgcGxheW9mZiB0ZWFtcyBmcm9tIGVhY2ggeWVhcjoKClBsYXlvZmZUYWJsZSA9IHRhYmxlKGJhc2ViYWxsJFllYXIpCgojWW91IGNhbiBvdXRwdXQgdGhlIHRhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKUGxheW9mZlRhYmxlCmBgYAoKYGBge3J9CnN0cihuYW1lcyhQbGF5b2ZmVGFibGUpKQoKYGBgCgpUaGlzIGlzIGFsbCBvZiB0aGUgIG5hbWVzIGZvciBvdXIgbmV3IHBsYXlvZmZzIHRhYmxlIG5vdGljZSB0aGF0IHRoZSBjb2x1bW4gbmFtZXMgYXJlIGVhY2ggeWVhciBhcyBhIHN0cmluZy4gCmBgYHtyfQogI1doaWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBsYXlvZmYgdGVhbXMgaW4gMTk5MCBhbmQgMjAwMT8KUGxheW9mZlRhYmxlW2MoIjE5OTAiLCAiMjAwMSIpXQoKYGBgCldlIGNhbiBzZWUgdGhhdCB0aGVyZSB3ZXJlIDQgcGxheW9mZiB0ZWFtcyBpbiAxOTkwIGFuZCA4IGluIDIwMTAKCmBgYHtyfQojUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIHdlIHdhbnQgdG8gbG9vayB1cCB0aGUgbnVtYmVyIG9mIHRlYW1zIGluIHRoZSBwbGF5b2ZmcyBmb3IgZWFjaCB0ZWFtL3llYXIgcGFpciBpbiB0aGUgZGF0YXNldCwgYW5kIHN0b3JlIGl0IGFzIGEgbmV3IHZhcmlhYmxlIG5hbWVkIE51bUNvbXBldGl0b3JzIGluIHRoZSBiYXNlYmFsbCBkYXRhIGZyYW1lLgpiYXNlYmFsbCROdW1Db21wZXRpdG9ycyA9IFBsYXlvZmZUYWJsZVthcy5jaGFyYWN0ZXIoYmFzZWJhbGwkWWVhcildCmJhc2ViYWxsJE51bUNvbXBldGl0b3JzCgpgYGAKYGBge3J9CiNIb3cgbWFueSBwbGF5b2ZmIHRlYW0veWVhciBwYWlycyBhcmUgdGhlcmUgaW4gb3VyIGRhdGFzZXQgZnJvbSB5ZWFycyB3aGVyZSA4IHRlYW1zIHdlcmUgaW52aXRlZCB0byB0aGUgcGxheW9mZnM/CnRhYmxlKGJhc2ViYWxsJE51bUNvbXBldGl0b3JzKQoKYGBgCgpXZSBjYW4gc2VlIHRoYXQgaW4gdGhpcyB0YWJsZSB3ZSBzYXcgMTI4LCB5ZWFycyB3aGVyZSA4IHRlYW1zIHdoZXJlIGludml0ZWQuIAoKCiMgQml2YXJpYXRlIE1vZGVscyBmb3IgUHJlZGljdGluZyBXb3JsZCBTZXJpZXMgV2lubmVyIApJbiB0aGlzIHByb2JsZW0sIHdlIHNlZWsgdG8gcHJlZGljdCB3aGV0aGVyIGEgdGVhbSB3b24gdGhlIFdvcmxkIFNlcmllczsgaW4gb3VyIGRhdGFzZXQgdGhpcyBpcyBkZW5vdGVkIHdpdGggYSBSYW5rUGxheW9mZnMgdmFsdWUgb2YgMS4gQWRkIGEgdmFyaWFibGUgbmFtZWQgV29ybGRTZXJpZXMgdG8gdGhlIGJhc2ViYWxsIGRhdGEgZnJhbWUsIGJ5IHR5cGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4geW91ciBSIGNvbnNvbGU6CgpiYXNlYmFsbFdvcmxkU2VyaWVzPWFzLm51bWVyaWMoYmFzZWJhbGwKUmFua1BsYXlvZmZzID09IDEpCgpXb3JsZFNlcmllcyB0YWtlcyB2YWx1ZSAxIGlmIGEgdGVhbSB3b24gdGhlIFdvcmxkIFNlcmllcyBpbiB0aGUgaW5kaWNhdGVkIHllYXIgYW5kIGEgMCBvdGhlcndpc2UuCgpgYGB7cn0KI0hvdyBtYW55IG9ic2VydmF0aW9ucyBkbyB3ZSBoYXZlIGluIG91ciBkYXRhc2V0IHdoZXJlIGEgdGVhbSBkaWQgTk9UIHdpbiB0aGUgV29ybGQgU2VyaWVzPwpiYXNlYmFsbCRXb3JsZFNlcmllcyA9IGFzLm51bWVyaWMoYmFzZWJhbGwkUmFua1BsYXlvZmZzID09IDEpCnRhYmxlKGJhc2ViYWxsJFdvcmxkU2VyaWVzKQoKYGBgCldlIHNlZSB0aGF0IDE5NyB0ZWFtcyBvdmVyYWxsIGZyb20gdGhlIGRhdGFzZXQgZGlkIG5vdCBtYWtlIGl0IHRvIHRoZSBwbGF5b2ZmcyBhbmQgNDcgdGVhbXMgZGlkCgojIEJpdmFyaWF0ZSBNb2RlbHMgZm9yIFByZWRpY3RpbmcgV29ybGQgU2VyaWVzIFdpbm5lciAKV2hlbiB3ZeKAmXJlIG5vdCBzdXJlIHdoaWNoIG9mIG91ciB2YXJpYWJsZXMgYXJlIHVzZWZ1bCBpbiBwcmVkaWN0aW5nIGEgcGFydGljdWxhciBvdXRjb21lLCBpdOKAmXMgb2Z0ZW4gaGVscGZ1bCB0byBidWlsZCBiaXZhcmlhdGUgbW9kZWxzLCB3aGljaCBhcmUgbW9kZWxzIHRoYXQgcHJlZGljdCB0aGUgb3V0Y29tZSB1c2luZyBhIHNpbmdsZSBpbmRlcGVuZGVudCB2YXJpYWJsZS4gV2hpY2ggb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaXMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2YgdGhlIFdvcmxkU2VyaWVzIHZhcmlhYmxlIGluIGEgYml2YXJpYXRlIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWw/IFRvIGRldGVybWluZSBzaWduaWZpY2FuY2UsIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIHN0YXJzIGluIHRoZSBzdW1tYXJ5IG91dHB1dCBvZiB0aGUgbW9kZWwuIFdl4oCZbGwgZGVmaW5lIGFuIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIHNpZ25pZmljYW50IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdGFyIGF0IHRoZSBlbmQgb2YgdGhlIGNvZWZmaWNpZW50cyByb3cgZm9yIHRoYXQgdmFyaWFibGUgKHRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgcHJvYmFiaWxpdHkgY29sdW1uIGhhdmluZyBhIHZhbHVlIHNtYWxsZXIgdGhhbiAwLjA1KS4gTm90ZSB0aGF0IHlvdSBoYXZlIHRvIGJ1aWxkIDEyIG1vZGVscyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiEgVXNlIHRoZSBlbnRpcmUgZGF0YXNldCBiYXNlYmFsbCB0byBidWlsZCB0aGUgbW9kZWxzCgpgYGB7cn0KI1doaWNoIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGlzIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIG9mIHRoZSBXb3JsZFNlcmllcyB2YXJpYWJsZSBpbiBhIGJpdmFyaWF0ZSBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVsPwojVmFyaWJhbGVzIHRvIHVzZSBhcyBwcmVkaWN0b3JzIGZvciBlYWNoIGJpdmFyaWF0ZSBtb2RlbChZZWFyLCBSUywgUkEsIFcsIE9CUCwgU0xHLCBCQSwgUmFua1NlYXNvbiwgT09CUCxPU0xHLCBOdW1Db21wZXRpdG9ycywgTGVhZ3VlKQptb2RlbDE8LWdsbShXb3JsZFNlcmllc35ZZWFyLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDEpCgpgYGAKV2l0aCB0aGUgJ1dvcmxkU2VyaWVzJyB2YXJpYWJsZSBhcyB0aGUgb3V0Y29tZSBhbmQgJ1llYXInIGFzIHRoZSBwcmVkaWN0b3IsICB0aGUgc3VtbWFyeSBpbmRpY2F0ZXMgdGhhdCAnWWVhcicgaXMgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHByZWRpY3RvciBvZiAnV29ybGRTZXJpZXMnIGFzIGV2aWRlbmNlZCBieSB0aGUgcC12YWx1ZSBvZiAwLjAwMTE1IHdoaWNoIGlzIGxlc3MgdGhhbiBhbHBoYSgwLjA1KS4KWWVhciBpcyBhIHNpZ25pZmljYW50IHByZWRpY3RvciEKCmBgYHtyfQptb2RlbDI8LWdsbShXb3JsZFNlcmllc35SUywgZGF0YT1iYXNlYmFsbCwgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkobW9kZWwyKQpgYGAKTm90aWNlIHRoZSBoaWdoIHAgdmFsdWUgb2YgMC4yMDEgbWVhbnMgd2UgaGF2ZSB0byBhY2NlcHQgYWxwaGEgYW5kIGRpc2NvdmVyIHRoYXQgdGhlcmUgaXMgbm8gc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIHRvIHRoaXMgcHJlZGljdG9yLiAgClJ1bnMgU2NvcmVkIGlzIG5vdCBzaWduaWZpY2FudAoKTGV0cyBtYWtlIGEgbW9kZWwgdXNpbmcgUkEgKHJ1bnMgYWxsb3dlZCkgYXMgYSBwcmVkaWN0b3IuCmBgYHtyfQptb2RlbDM8LWdsbShXb3JsZFNlcmllc35SQSwgZGF0YT1iYXNlYmFsbCwgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkobW9kZWwzKQoKYGBgCidSQScgYXMgYSBwcmVkaWN0b3Igb2YgJ1dvcmxkU2VyaWVzJyBpcyBzaWduaWZpY2FudCB3aXRoIGEgcC12YWx1ZSBvZiAwLjAyNjIsIHdoaWNoIGlzIGxlc3MgdGhhbiB0aGUgc2lnbmlmaWNhbmNlIGxldmVsIGFscGhhLiBUaGUgbmVnYXRpdmUgZXN0aW1hdGUgZm9yICdSQScgc3VnZ2VzdHMgYSBuZWdhdGl2ZSBjb3JyZWxhdGlvbiwgaW5kaWNhdGluZyB0aGF0IGFzICdSQScgaW5jcmVhc2VzLCB0aGUgbGlrZWxpaG9vZCBvZiAnV29ybGRTZXJpZXMnIGRlY3JlYXNlcy4gTm90aWNlIHRoZSB6LXZhbHVlIG9mIC0yLjIyMyBpbmRpY2F0aW5nIHRoYXQgdGhlIG9ic2VydmVkIGVmZmVjdCBpcyAyLjIyMyBzdGFuZGFyZCBkZXZpYXRpb25zIGF3YXkgZnJvbSB0aGUgbnVsbCBoeXBvdGhlc2lzIHdoaWNoIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZ2l2ZW4gdGhlIGNvcnJlc3BvbmRpbmcgcC12YWx1ZQpSQSBpcyBhIHNpZ25pZmljYW50IHByZWRpY3RvciEKCmBgYHtyfQptb2RlbDQ8LWdsbShXb3JsZFNlcmllc35XLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDQpCmBgYApXaW5zIGFzIGEgcHJlZGljdG9yIG9mIGNsb3NlIHRvIGFscGhhIGJ1dCBzdGlsbCBwYXN0IGl0IGF0IGEgcHZhbHVlIG9mIDAuMDU3NyB3aGljaCBtZWFucyB0aGF0IHdlIG11c3QgYWNjZXB0IEhvIGFuZCB0aGF0IGl0IGhhcyBubyBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UuClcgaXMgbm90IHNpZ25pZmljYW50CgpgYGB7cn0KbW9kZWw1PC1nbG0oV29ybGRTZXJpZXN+T0JQLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDUpCgpgYGAKSW50ZXJlc3RpbmdseSBPQlAgYXMgYSBwcmVkaWN0b3IgaGFzIGEgaGlnaCBwdmFsdWUgYXQgMC4yOTYgd2hpY2ggbWVhbnMgaXQgaXNuJ3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4gCk9CUCBpcyBub3Qgc2lnbmlmaWNhbnQKCmBgYHtyfQptb2RlbDY8LWdsbShXb3JsZFNlcmllc35TTEcsIGRhdGE9YmFzZWJhbGwsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KG1vZGVsNikKYGBgCiBTTEcgYXMgYSBwcmVkaWN0b3IgaXMgc3VwZXIgY2xvc3QgdG8gYWxwaGEgYXQgMC4wNTA0IHdoaWNoIHNvbWUgbWF5IGFjZXB0YWJsZSB0byBjYWxsIGl0IHNpZ25pZmljYW50LCBhbmQgaWYgdGhleSBkaWQgdGhleSB3b3VsZCBub3QgdGhhdCB0aGVyZSBpcyBhIG5lZ2F0aXZlIGNvcnJlbGF0aW9uIG9mIC0xMS4xMy4KIFlldCBmb3Igb3VyIHVzZSB3ZSB3aWxsIHJvdW5kIHVwIGFuIGluIHRoYXQgY2FzZSB3ZSB3b3VsZCBjaG9vc2UgdG8gYWNjcGV0IEhvIGFuZCBkZWVtCiBTTEcgYXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQKCmBgYHtyfQptb2RlbDc8LWdsbShXb3JsZFNlcmllc35CQSwgZGF0YT1iYXNlYmFsbCwgZmFtaWx5PSJiaW5vbWlhbCIpCnN1bW1hcnkobW9kZWw3KQpgYGAKQ2xlYXJseSBCYXR0aW5nIEF2ZXJhZ2UgYXMgYSBwcmVkaWN0b3IgZnByIGVudGVyaW5nIHRoZSB3b3JsZHNlcmllcyBoYXMgbm8gdXNlIHNpbmNlIGl0IHAtdmFsdWUgaXMgaGlnaGx5IGluc2lnbmlmaWNhbnQgYXQgMC44MzkKQkEgaXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQKCmBgYHtyfQptb2RlbDg8LWdsbShXb3JsZFNlcmllc35SYW5rU2Vhc29uLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDgpIAoKYGBgClJhbmsgc2Vhc29uIGlzIGxlc3MgdGhhbiBhbHBoYSBzbyB3ZSBjYW4gcmVqZWN0IEgwIGFuZCBkZWNsYXJlIGl0IGFzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbiBub3RlIHRoYXQgaXQgaGFzIGEgbmVnYXRpdmUgY29ycmVsYXRpb24gc28gaWYgaXQgaW5jcmVhc2VzIHlvdXIgbGlrZWx5IGhvb2Qgb2YgZW50ZXJpbmcgdGhlIHdvcmxkIHNlcmllcyBpcyBsb3dlciB3aGljaCBmb3IgbWUgaXMgY291bnRlciBpbnR1aXRpdmUuIApSYW5rU2Vhc29uIGlzIHNpZ25pZmljYW50IQoKYGBge3J9Cm1vZGVsOTwtZ2xtKFdvcmxkU2VyaWVzfk9PQlAsIGRhdGE9YmFzZWJhbGwsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KG1vZGVsOSkKCmBgYApPT0JQIHBlcmZvcm1lZCBldmVuIHdvcnNlIHRoYW4gT0JQIGFzIGEgcHJlZGljdG9yCk9PQlAgaXMgbm90IHNpZ25pZmljYW50CgpgYGB7cn0KbW9kZWwxMDwtZ2xtKFdvcmxkU2VyaWVzfk9TTEcsIGRhdGE9YmFzZWJhbGwsIGZhbWlseT0iYmlub21pYWwiKQpzdW1tYXJ5KG1vZGVsMTApCgpgYGAKCk9TTEcgaXMgbm90IHNpZ25pZmljYW50CgpgYGB7cn0KbW9kZWwxMTwtZ2xtKFdvcmxkU2VyaWVzfk51bUNvbXBldGl0b3JzLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDExKQoKYGBgCgpOdW1Db21wZXRpdG9ycyBpcyBzaWduaWZpY2FudCEKCmBgYHtyfQptb2RlbDEyPC1nbG0oV29ybGRTZXJpZXN+TGVhZ3VlLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9ImJpbm9taWFsIikKc3VtbWFyeShtb2RlbDEyKQoKYGBgCgpMZWFndWUgaXMgbm90IHNpZ25pZmljYW50CgpJbiBzaG9ydCwgdGhlIHNpZ25pZmljYW50IHByZWRpY3RvcnMgYXJlIFllYXIsIFJBLCBhbmQgTnVtQ29tcGV0aXRvcnMuCgojIyMgTXVsdGl2YXJpYXRlIE1vZGVscyBmb3IgUHJlZGljdGluZyBXb3JsZCBTZXJpZXMgV2lubmVyCgpJbiB0aGlzIHNlY3Rpb24sIHdl4oCZbGwgY29uc2lkZXIgbXVsdGl2YXJpYXRlIG1vZGVscyB0aGF0IGNvbWJpbmUgdGhlIHZhcmlhYmxlcyB3ZSBmb3VuZCB0byBiZSBzaWduaWZpY2FudCBpbiBiaXZhcmlhdGUgbW9kZWxzLiBCdWlsZCBhIG1vZGVsIHVzaW5nIGFsbCBvZiB0aGUgdmFyaWFibGVzIHRoYXQgeW91IGZvdW5kIHRvIGJlIHNpZ25pZmljYW50IGluIHRoZSBiaXZhcmlhdGUgbW9kZWxzLiBIb3cgbWFueSB2YXJpYWJsZXMgYXJlIHNpZ25pZmljYW50IGluIHRoZSBjb21iaW5lZCBtb2RlbD8KCmBgYHtyfQojSG93IG1hbnkgdmFyaWFibGVzIGFyZSBzaWduaWZpY2FudCBpbiB0aGUgY29tYmluZWQgbW9kZWw/CkxvZ01vZGVsID0gZ2xtKFdvcmxkU2VyaWVzIH4gWWVhciArIFJBICsgUmFua1NlYXNvbiArIE51bUNvbXBldGl0b3JzLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9Ymlub21pYWwpCnN1bW1hcnkoTG9nTW9kZWwpCgpgYGAKTm9uZSBvZiB0aGVzZSBwcmVkaWN0b3JzIGFyZSBiZWxvdyBhbHBoYSBzbyB3ZSB3b3VsZCBhY2NlcHQgSDAgZm9yIGFsbCBvZiB0aGVtIGFzIHByZWRpY3RvcnMgYW5kIHRoaXMgbW9kZWwgaW4gZ2VuZXJhbC4KCkxvb2tpbmcgYXQgc3VtbWFyeShMb2dNb2RlbCksIHdlIGNhbiBzZWUgdGhhdCBub25lIG9mIHRoZSB2YXJpYWJsZXMgYXJlIHNpZ25pZmljYW50IGluIHRoZSBtdWx0aXZhcmlhdGUgbW9kZWwuIE9mdGVuLCB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNpZ25pZmljYW50IGluIGJpdmFyaWF0ZSBtb2RlbHMgYXJlIG5vIGxvbmdlciBzaWduaWZpY2FudCBpbiBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgZHVlIHRvIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHZhcmlhYmxlcy4gCgpXaGljaCBvZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHBhaXJzIGhhdmUgYSBoaWdoIGRlZ3JlZSBvZiBjb3JyZWxhdGlvbiAoYSBjb3JyZWxhdGlvbiBncmVhdGVyIHRoYW4gMC44IG9yIGxlc3MgdGhhbiAtMC44KT8KCmBgYHtyfQojV2UgY2FuIGNvbXB1dGUgYWxsIHBhaXItd2lzZSBjb3JyZWxhdGlvbnMgYmV0d2VlbiB0aGVzZSB2YXJpYWJsZXMgd2l0aDoKY29yKGJhc2ViYWxsW2MoIlllYXIiLCAiUkEiLCAiUmFua1NlYXNvbiIsICJOdW1Db21wZXRpdG9ycyIpXSkKCmBgYApZZWFyIGFuZCBOdW1DT21wZXRpdApXaGlsZSBldmVyeSBwYWlyIHdhcyBhdCBsZWFzdCBtb2RlcmF0ZWx5IGNvcnJlbGF0ZWQsIHRoZSBvbmx5IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgcGFpciB3YXMgWWVhci9OdW1Db21wZXRpdG9ycywgd2l0aCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCAwLjkxNC4KCkxldCB1cyBidWlsZCBhbGwgc2l4IG9mIHRoZSB0d28gdmFyaWFibGUgbW9kZWxzIGxpc3RlZCBpbiB0aGUgcHJldmlvdXMgcHJvYmxlbS4gVG9nZXRoZXIgd2l0aCB0aGUgZm91ciBiaXZhcmlhdGUgbW9kZWxzIHRoYXQgd2VyZSBzaWduaWZpY2FudCwgd2Ugc2hvdWxkIGhhdmUgMTAgZGlmZmVyZW50IGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWxzIHRvIGFuYWx5emUuIFdoaWNoIG1vZGVsIGhhcyB0aGUgYmVzdCBBSUMgdmFsdWUgKHRoZSBtaW5pbXVtIEFJQyB2YWx1ZSk/CgpgYGB7cn0KI1RoZSB0d28tdmFyaWFibGUgbW9kZWxzIGNhbiBiZSBidWlsdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Cgptb2RlbDEzID0gZ2xtKFdvcmxkU2VyaWVzIH4gWWVhciArIFJBLCBkYXRhPWJhc2ViYWxsLCBmYW1pbHk9Ymlub21pYWwpCnN1bW1hcnkobW9kZWwxMykKYGBgCldlIGNhbiBzZWUgdGhhdCBZZWFyIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgaW4gcHJlZGljdGluZyB0aGUgd29ybGQgc2VyaWVzIGluIHRoaXMgbW9kZWwsIG5vdGljZSBpdCBpcyBuZWdhdGl2ZWx5IGNvcnJlbGF0ZWQgc28gdGhlIGhpZ2hlciB0aGUgeWVhciB0aGUgbGVzcyBsaWtlbHkgdG8gZW50ZXIgdGhlIHdvcmxkIHNlcmllcy4gd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gbmV3IHRlYW1zIGNvbWluZyB0byBleGlzdGVuY2UuIFJ1bnMgYWxsb3dlZCB3YXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2luY2UgaXQgaGFkIGEgaGlnaCBwdmFsdWUgZmFyIGFib3ZlIGFscGhhCmBgYHtyfQptb2RlbDE0ID0gZ2xtKFdvcmxkU2VyaWVzIH4gWWVhciArIFJhbmtTZWFzb24sIGRhdGE9YmFzZWJhbGwsIGZhbWlseT1iaW5vbWlhbCkKc3VtbWFyeShtb2RlbDE0KQoKYGBgClllYXIgYWdhaW4gd2FzIHNpZ25pZmljYW50IGFuZCBuZWdhdGl2ZWx5IGNvcnJlbGF0ZWQuIFdoZXJlIGFzIGl0cyBwYWlyZWQgcHJlZGljdG9yIChyYW5rU2Vhc29uKSB3YXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIGdpdmVuIGl0cyBoaWdoIHB2YWx1ZSBvZiAwLjM3NSB3aGljaCBhcyB3ZSBrbm93IGlzIG1vcmUgdGhhbiBhbHBoYS4KYGBge3J9Cm1vZGVsMTUgPSBnbG0oV29ybGRTZXJpZXMgfiBZZWFyICsgTnVtQ29tcGV0aXRvcnMsIGRhdGE9YmFzZWJhbGwsIGZhbWlseT1iaW5vbWlhbCkKc3VtbWFyeShtb2RlbDE1KQoKYGBgClRBSGlzIG1vZGVsIHByZWRpY3Rpbmcgd29ybGQgc2VyaWVzIHdpdGggdGhlIHByZWRpY3RvciBwYWlyaW5nIG9mIHllYXIgYW5kIG51bWNvbXBldGl0b3JzIHdvcnNlbmQgb3IgcHJldmlvdXNseSBtb2RlbHMgd2hlcmUgeWVhciB3YXMgc2lnbmlmaWNhbnQuIApgYGB7cn0KbW9kZWwxNiA9IGdsbShXb3JsZFNlcmllcyB+IFJBICsgUmFua1NlYXNvbiwgZGF0YT1iYXNlYmFsbCwgZmFtaWx5PWJpbm9taWFsKQpzdW1tYXJ5KG1vZGVsMTYpCgpgYGAKCmBgYHtyfQptb2RlbDE3ID0gZ2xtKFdvcmxkU2VyaWVzIH4gUkEgKyBOdW1Db21wZXRpdG9ycywgZGF0YT1iYXNlYmFsbCwgZmFtaWx5PWJpbm9taWFsKQpzdW1tYXJ5KG1vZGVsMTcpCgpgYGAKSGVyZSB3ZSBjYW4gc2VlIHRoYXQgTnVtQ29tcGV0aXRvcnMgaXMgc2lnbmlmaWNhbnQgYXQgMC4wMDk0NiBhbmQgbmVnYXRpdmVseSBjb3JyZWxhdGVkLiB3aGVyZSBhcyBpdHMgcGFpcmVkIHByZWRpY3RvciBSQSBpcyBub3Qgc2lnbmlmaWNhbnQgd2l0aCBpc3QgaGlnaCBwdmFsdWUgb2YgMC42NAoKYGBge3J9Cm1vZGVsMTggPSBnbG0oV29ybGRTZXJpZXMgfiBSYW5rU2Vhc29uICsgTnVtQ29tcGV0aXRvcnMsIGRhdGE9YmFzZWJhbGwsIGZhbWlseT1iaW5vbWlhbCkKc3VtbWFyeShtb2RlbDE4KQoKYGBgCkhlcmUgd2UgY2FuIHNlZSB0aGF0IG51bUNvbXBldGl0aW9ycyBpcyBzaWduaWZpY2FudCB3aXRoIGEgcHZhbHVlIG9mIDAuMDA1NDYgYW5kIG5lZ2F0aXZlbHkgY29ycmVsYXRlZC4gQWxzbyBub3QgdGhhdCAgUmFua1NlYXNvbiBpcyBub3Qgc2lnbmlmaWNhbnQgd2lodCBpdHMgaGlnaCBwLXZhbHVlLiAKCk5vbmUgb2YgdGhlIG1vZGVscyB3aXRoIHR3byBpbmRlcGVuZGVudCB2YXJpYWJsZXMgaGFkIGJvdGggdmFyaWFibGVzIHNpZ25pZmljYW50LCBzbyBub25lIHNlZW0gcHJvbWlzaW5nIGFzIGNvbXBhcmVkIHRvIGEgc2ltcGxlIGJpdmFyaWF0ZSBtb2RlbC4gSW5kZWVkIHRoZSBtb2RlbCB3aXRoIHRoZSBsb3dlc3QgQUlDIHZhbHVlIGlzIHRoZSBtb2RlbCB3aXRoIGp1c3QgTnVtQ29tcGV0aXRvcnMgYXMgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlLiBUaGlzIHNlZW1zIHRvIGNvbmZpcm0gdGhlIGNsYWltIG1hZGUgYnkgQmlsbHkgQmVhbmUgaW4gTW9uZXliYWxsIHRoYXQgYWxsIHRoYXQgbWF0dGVycyBpbiB0aGUgUGxheW9mZnMgaXMgbHVjaywgc2luY2UgTnVtQ29tcGV0aXRvcnMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgcXVhbGl0eSBvZiB0aGUgdGVhbXMhCg==