testing normality

ivn

New Member
#1
Can someone help to find the error in my code? I wanted to make a program in R which will tell me if a distribution is normal or not. It should also print a histogram with a density curve. After reading the .csv file and required packages (moments and ggplot2) i test my data for normality with the shapiro wilks test (normality <- shapiro.test() ) . After the testing, the p value is being obtained for usage in the if function (normality$p.value<0.05).

The if function should go somewhat like this:

If the p value is smaller than 0,05 test the skewness. If the skewness is less than -0,5 the distribution is shifted into the right and print a histogram of it. If the skewness is higher than >0.5, the distribution is shifted into the left, print a histogram. If the skewness is between 0,5 and -0,5 the distribution is aproximately simetrical. Else, the distribution is normal.

After running my code, nothing happens. Has somebody suggestion what might be wrong? Has anyone a better solution for this code?
Code:
library("moments")
library("ggplot2")


histogram <- qplot(data,  binwidth = 1.0, geom = "histogram", xlab = "my data", 
                   ylab = "data frequency", 
                   y = ..density.., fill = I("salmon"), colour = I("black")) +
  stat_density(geom = "line")

normality <- shapiro.test(data)
skew <- skewness(data)



if(normality$p.value<0.05){
    if(skew< -0.5){
    "The distribution is shifted into the right"
    histogram
    }
  if(skew> 0.5){
    "The distribution is shifted into the left"
    histogram
    }
  if(skew<=0.5 && skew>=-0.5){
    "The distribution is simetrical"
    return()
  }
  else{
    "The distribution is normal"
    histogram
  }
}
 

ivn

New Member
#2
In addition to the previous code, I tried to do a different approach, but something still isn't working. I would be really thankful if someone would say what I am doing wrong:
Code:
result <- shapiro.test(dat)
skew <- skewness(dat)

if(result$p.value>0.05)
{
   "The distribution is normal"
    print(histogram)
    } else if(result$p.value<0.05 && skew < (-0.5))
      {
       display <- sprintf("The curve is shifted to the right, skewness = %f", skew)
       print(display)     
       print (histogram)
    }else (result$p.value<0.05 && skew> 0.5)
     {
       display<- sprintf("The curve is shifted to the left, skewness = %f", skew)
       print(histogram)
       print(display)
    }