rm(list=ls())
set.seed(123)  

n <- 100
U <- runif(n) #generating 100 uniform random samples


X <- qnorm(U) #applying inverse cdf of standard normal

cat("Summary statistics of generated normal samples:\n")
## Summary statistics of generated normal samples:
print(summary(X))
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -3.227322 -0.688816 -0.084396 -0.005457  0.691819  2.528336
cat("\nStandard deviation:", sd(X), "\n")
## 
## Standard deviation: 0.9769824
cat("\nTheoretical mean: 0, Sample mean:", mean(X))
## 
## Theoretical mean: 0, Sample mean: -0.005456935
cat("\nTheoretical SD: 1, Sample SD:", sd(X))
## 
## Theoretical SD: 1, Sample SD: 0.9769824
cat("\n\nQ-Q Plot to verify normality:\n")
## 
## 
## Q-Q Plot to verify normality:
qqnorm(X, main = "Q-Q Plot: Generated vs Theoretical Normal")
qqline(X, col = "red")

#From the Q-Q plot, we can say generated normal and theoretical normal look pretty similar.