#
# Baseball example from Section 8.3 and Chapter 8, Exercise 4
#
M <- c(18,17,16,15,14,14,13,12,11,11,10,10,10,10,10,9,8,7);
Atbats <- c(367,426,521,275,418,466,586,138,510,
            200,277,270,435,538,186,558,408, 70);
Hits <- c(127,127,144, 61,114,126,154, 29,137,
           46, 73, 69,132,142, 42,159,129, 14)
Name <- c("Clemente","F Robinson","F Howard", "Johnstone", "Berry",
          "Spencer", "Kessinger", "L Alvardo","Santo",     "Swoboda",
          "Unser",   "Williams",  "Scott",    "Petrocelli","E Rodriguez",
          "Campaneris","Munson","Alvis");
Team <- c("Pitts","Balt","Wash","Cal","Chi","Cal","Chi","Bos","Chi",
           "NY","Wash","Chi","Bos","Bos","KC","Oak","NY","Mil")
League <- c("NL","AL","AL","AL","AL","AL","NL","AL","NL",
            "AL","AL","AL","AL","AL","AL","AL","AL","NL");
r <- length(Name);
n <- 45;
blanks <- "          ";
formn <- function(x,n)
          {substring(paste(format(x,digits=n),blanks),1,n+3)};
intn <- function(n)
          {if (n<100) paste("",as.character(n)) else as.character(n)}
Name <- paste(Name,blanks);
Team <- paste(Team,blanks);
Xbar <- 0;
Ybar <- 0;
Y <- M/n;
X <- 2*sqrt(n)*asin(sqrt(Y));
P <- Hits/Atbats;
Theta <- 2*sqrt(n)*asin(sqrt(P));
Xbar <- mean(X);
Ybar <- mean(Y);
MSE <- sum((X-Theta)*(X-Theta))/r;
MSP <- sum((P-Y)*(P-Y))/r;
lambda <- (r-3)/((r-1)*var(X));
cat(" i   Name        Team   League  Y      P      Atbats  X       Theta");
cat("\n\n");
for (i in 1:r)
  {
    cat(substring(100+i,2,4)," ",substring(Name[i],1,11),
        substring(Team[i],1,6),League[i],"    ",formn(Y[i],3),
        formn(P[i],3),intn(Atbats[i]),"   ",formn(X[i],4),
        formn(Theta[i],4),"\n");
  }
cat("\n\n")
MSEEfron <- 0;
MSPEfron <- 0;
Ave <- P;
ML <- Y;
Efron <- lambda*Xbar + (1-lambda)*X;
RetransEfron <- sin(Efron/(2*sqrt(n)))*sin(Efron/(2*sqrt(n)));
MSEEfron <- sum((Efron-Theta)*(Efron-Theta))/r;
MSPEfron <- sum((RetransEfron-P)*(RetransEfron-P))/r;
Eff <- MSE/MSEEfron;
EffP <- MSP/MSPEfron;
cat(" i Name          Team   League  Ave    ML     RetransEfron \n\n");
for (i in 1:r)
  {
    cat(substring(100+i,2,4)," ",substring(Name[i],1,11),
        substring(Team[i],1,6),League[i],"    ",formn(Ave[i],3),
        formn(ML[i],3),formn(RetransEfron[i],3),"\n");
 }
cat("\n\n");
cat("Ybar          Xbar         S            lambda \n");
cat(Ybar,"   ",Xbar,"   ",(r-1)*var(X),"   ",lambda);
cat("\n\n");
cat("MSE           MSEEfron     Eff          MSP            ");
cat("MSPEfron        EffP \n");
cat(MSE,"   ",MSEEfron,"  ",Eff,"   ",MSP,"  ",MSPEfron,"   ",EffP);
cat("\n\n\n");
# Remainder of program concerns Chapter 8, Question 4
P0 <- 0.25;
Mu <- 2*sqrt(n)*asin(sqrt(P0));
S1 <- sum((X-Mu)*(X-Mu));
lambda1 <- (r-2)/S1;
Stein <- lambda1*Mu + (1-lambda1)*X;
RetransStein <- sin(Stein/(2*sqrt(n)))*sin(Stein/(2*sqrt(n)));
MSEStein <- sum((Stein-Theta)*(Stein-Theta))/r;
MSPStein <- sum((RetransStein-P)*(RetransStein-P))/r;
Eff1 <- MSE/MSEStein;
EffP1 <- MSP/MSPStein;
cat(" i   Name        Team   League  Ave    ML     RetransStein \n\n");
for (i in 1:r)
  {
    cat(substring(100+i,2,4)," ",substring(Name[i],1,11),
        substring(Team[i],1,6),League[i],"    ",formn(Ave[i],3),
        formn(ML[i],3),formn(RetransStein[i],3),"\n");
  }
cat("\n");
cat("Ybar          Xbar         S1           lambda1 \n");
cat(Ybar,"   ",Xbar,"   ",S1,"   ",lambda1,"\n");
cat("MSE           MSEStein     Eff1         MSP            ");
cat("MSPStein       EffP1 \n");
cat(MSE,"   ",MSEStein,"  ",Eff1,"   ",MSP,"  ",MSPStein,"  ",EffP1,"\n");