Limitations of Shapiro test Are there any possible limitations to the Shapiro test or the shapiro.test() function? After removing outliers in a data set it seem that using the shapiro.test shows that the data is no longer normal, although the test showed that the model was normal before.
 A: The Shapiro-Wilk test is not especially sensitive to outliers.  There are normality tests that focus on outliers, by looking at a combination of skewness and kurtosis, but they are different. 
Patrick Royston says about the Shapiro-Wilk test

Its power characteristics are well known and may be summarized by
  saying that it is strongest against short-tailed (platykurtic) and
  skew distributions and weakest against symmetric moderately long-
  tailed (leptokurtic) distributions.

An outlier-based test would be the opposite,  strongest against leptokurtic distributions. 
This also supports the idea that removing extreme observations from a sample that's truly from a Normal distribution might lead the Shapiro-Wilk test to reject -- correctly, since you no longer have a sample from a Normal distribution, but instead have a sample that has lighter tails than if it were from a Normal.
I have a longer rant about the Shapiro-Wilk test, which isn't necessarily relevant to the specific question here
A: Certainly that can happen.
Assume your original data was normal. Really normal. Then remove "outliers". E.g., everything more than 3 standard deviations away from the mean. What are we left with? A truncated normal distribution. Which is, by definition, not a normal distribution any more.
So the Shapiro-Wilk test should in this situation tell you that the original data was normal, and the truncated data is not.
Here is a little R code to simulate this:
sample_size <- 100
n_experiments <- 1000
result <- matrix(NA,nrow=n_experiments,ncol=2,dimnames=list(NULL,c("Before","After")))

for ( ii in 1:n_experiments ) {
    set.seed(ii)    # for replicability
    foo <- rnorm(sample_size)
    result[ii,"Before"] <- shapiro.test(foo)$p.value>0.05
 result[ii,"After"] <- shapiro.test(foo[abs(foo)<=3])$p.value>0.05
}

table(data.frame(result))

Result:
       After
Before  FALSE TRUE
  FALSE    32   26
  TRUE      3  939

(I recommend skimming through the comments at this post to see how controversial "outlier" removal is.)
