#Part 1 - A

## Generate 500 random numbers from U(0, 10) 
uniform_sample <- runif(500, min = 0, max = 10)

##Summary and visualization 
summary(uniform_sample) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01786 2.38480 4.99019 4.91288 7.37617 9.95796
hist(uniform_sample, main = "Uniform Distribution (0, 10)",xlab= "values", col="purple" )

#Part 1 - B

##CDF for uniform distribution: P(X \<= 4) 
p_uniform <- punif(4, min = 0, max = 10) 
print(p_uniform)
## [1] 0.4

#Part 2 - A

## Generate 500 random numbers from Exp(0.1)
exponential_sample <- rexp(500, rate = 0.1)

## Summary and visualization
summary(exponential_sample) 
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  0.01263  2.77188  6.66605  9.83055 13.30339 78.79131
hist(exponential_sample, main= "Exponential Distribution (rate = 0.1)", xlab = "Values", col="pink")

#Part 2 - B

## Survival function: P(X \> 7) 
p_exponential <- 1 - pexp(7, rate = 0.1) 
print(p_exponential)
## [1] 0.4965853

#Part 3 - A

## Generate 500 random numbers from Poisson 
poisson_sample <- rpois(500, lambda = 3) 

## Summary and visualization
summary(poisson_sample) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   2.000   3.000   2.844   4.000  10.000
hist(poisson_sample, main ="Poisson Distribution (lambda = 3)", xlab = "Values", col = "light blue")

#Part 3 - B

## Probability of exactly 4 events: P(X = 4) 
p_poisson <- dpois(4, lambda = 3) 
print(p_poisson)
## [1] 0.1680314

#Part 4 - A ## Generate 500 random numbers from Binomial(10, 0.5)

binomial_sample <- rbinom(500, size = 10, prob = 0.5)

##Summary and visualization 
summary(binomial_sample)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   4.000   5.000   4.944   6.000  10.000
hist(binomial_sample, main = "Binomial Distribution (n = 10, p = 0.5)",
xlab = "Values", col= "blue")

#Part 4 - B

## Probability of exactly 3 successes: P(X = 3) 
p_binomial <- dbinom(3, size = 10, prob = 0.5) 
print(p_binomial)
## [1] 0.1171875

#Part 5 - A

## Overlay histograms 
hist(uniform_sample, main ="Comparison of Distributions", xlab = "Values", col =rgb(0.2, 0.5, 0.7,0.5), xlim = c(0, 30), breaks= 15) 
hist(exponential_sample, col = rgb(0.3, 0.7, 0.3, 0.5), add = TRUE, breaks = 15) 
hist(poisson_sample, col = rgb(0.8, 0.3, 0.3, 0.5), add = TRUE, breaks = 15)
hist(binomial_sample, col = rgb(0.7, 0.7, 0.1, 0.5), add = TRUE, breaks= 15) 
legend("topright", legend = c("Uniform", "Exponential", "Poisson","Binomial"), fill = c(rgb(0.2, 0.5, 0.7, 0.5), rgb(0.3, 0.7, 0.3, 0.5), rgb(0.8, 0.3, 0.3, 0.5), rgb(0.7, 0.7, 0.1, 0.5)))

#Plot Density for Each Distribution 
#set up the plotting area
plot(density(uniform_sample), main= "Comparison of Distributions", xlab=
"Values", col = "blue", lwd = 2, xlim = c(0,30), ylim = c(0, 0.4))
lines(density(exponential_sample), col= "green", lwd = 2)
lines(density(poisson_sample), col = "red", lwd = 2)
lines(density(binomial_sample), col = "yellow", lwd = 2)

#Adding a Legend 
legend("topright", legend = c("Uniform", "Exponential", "Poisson", "Binomial"), col = c("blue", "green", "red","yellow"), lwd = 2)

library(ggplot2)
#create dataframe for each distribution 
uniform_df <- data.frame(values = uniform_sample, distribution = "Uniform") 
exponential_df <- data.frame(values = exponential_sample, distribution = "Exponential")
poisson_df <- data.frame(values = poisson_sample, distribution =
"Poisson")
binomial_df <- data.frame(values = binomial_sample, distribution = "Binomial")

#combine data frames into one 
combined_df <- rbind(uniform_df,exponential_df, poisson_df, binomial_df)
#create plot with ggplot2 
ggplot(combined_df, aes(x = values, fill = distribution)) +
  geom_histogram(alpha = 0.5, position = "identity", bins = 15) + 
  scale_fill_manual(values = c("lightblue", "lightgreen", "lightcoral", "lightyellow")) +
  labs(title = "Comparison of Distributions", x = "Values", y = "Frequency") +
  theme_minimal() +
  theme(legend.title = element_blank())