normal_baku <- function(n) {
mu = 0
sigma =1
u1 <- runif(n, 0, 1)
u2 <- runif(n, 0, 1)
z1 <- (sqrt(-2 * log(u1))) * cos(2 * pi * u2)
z2 <- (sqrt(-2 * log(u1))) * sin(2 * pi * u2)
z <- c(z1, z2)
x=mu+(sigma*z)
return(x)
}
stat <- function(data) {
z_mean <- mean(data)
z_var <- var(data)
return(list(mean = z_mean, variance = z_var))
}
plot_histogram <- function(data) {
hist(data, breaks = 30, col = "pink", main = "Histogram of Generated N(0,1)",
xlab = "Generated Values", border = "white")
}
library(moments)
## Warning: package 'moments' was built under R version 4.3.1
set.seed(100)
# 1. Bangkitkan data normal baku
data <- rnorm(1000, mean = 0, sd = 1)
data[1:50]
## [1] -0.50219235 0.13153117 -0.07891709 0.88678481 0.11697127 0.31863009
## [7] -0.58179068 0.71453271 -0.82525943 -0.35986213 0.08988614 0.09627446
## [13] -0.20163395 0.73984050 0.12337950 -0.02931671 -0.38885425 0.51085626
## [19] -0.91381419 2.31029682 -0.43808998 0.76406062 0.26196129 0.77340460
## [25] -0.81437912 -0.43845057 -0.72022155 0.23094453 -1.15772946 0.24707599
## [31] -0.09111356 1.75737562 -0.13792961 -0.11119350 -0.69001432 -0.22179423
## [37] 0.18290768 0.41732329 1.06540233 0.97020202 -0.10162924 1.40320349
## [43] -1.77677563 0.62286739 -0.52228335 1.32223096 -0.36344033 1.31906574
## [49] 0.04377907 -1.87865588
# 2. Definisikan fungsi hitung mean & varian
calculate_statistics <- function(x) {
data.frame(
mean = mean(x),
variance = var(x)
)
}
# 3. Hitung mean dan varian
stats <- calculate_statistics(data)
cat("Mean:", stats$mean, "\n")
## Mean: 0.01680509
cat("Variance:", stats$variance, "\n")
## Variance: 1.062112
# 4. Fungsi buat histogram
plot_histogram <- function(x) {
hist(x, main = "Histogram", xlab = "Value", col = "pink", border = "white")
}
# 5. Plot histogram
plot_histogram(data)

normal_baku <- function(n) {
mu = 10
sigma = 2
u1 <- 0.5
u2 <- 0.7
z1 <- (sqrt(-2 * log(u1))) * cos(2 * pi * u2)
z2 <- (sqrt(-2 * log(u1))) * sin(2 * pi * u2)
z <- c(z1, z2)
x = mu+(sigma*z)
return(x)
}
calculate_statistics <- function(data) {
z_mean <- mean(data)
z_var <- var(data)
return(list(mean = z_mean, variance = z_var))
}
plot_histogram <- function(data) {
hist(data, breaks = 30, col = "pink", main = "Histogram of Generated N(0,1)",
xlab = "Generated Values", border = "white")
}
# Contoh penggunaan
set.seed(1)
# 1. Bangkitkan data
data <- normal_baku(1)
data
## [1] 9.272321 7.760433
# 2. Hitung mean dan varian
stats <- calculate_statistics(data)
cat("Mean:", stats$mean, "\n")
## Mean: 8.516377
cat("Variance:", stats$variance, "\n")
## Variance: 1.142902
# 3. Buat histogram
plot_histogram(data)

## Distribusi Gamma
generate_gamma <- function(alpha) {
b <- (exp(1) + alpha) / exp(1) # Langkah pertama: hitung b
repeat {
U1 <- runif(1) # Langkah pertama: bangkitkan U1
P <- b * U1 # Hitung P
if (P <= 1) {
# Langkah kedua
Y <- P^(1 / alpha) # Hitung Y
U2 <- runif(1) # Bangkitkan U2
if (U2 <= exp(-Y)) { # Kondisi U2 <= exp(-Y)
return(Y) # Kembalikan Y
}
} else {
# Langkah ketiga
Y <- -log((b - P) / alpha) # Hitung Y
U2 <- runif(1) # Bangkitkan U2
if (U2 <= Y^(alpha - 1)) { # Kondisi U2 <= Y^(alpha - 1)
return(Y) # Kembalikan Y
}
}
}
}
## Fungsi untuk menghasilkan n sampel
generate_gamma_samples <- function(alpha, n_samples) {
samples <- numeric(n_samples)
for (i in 1:n_samples) {
samples[i] <- generate_gamma(alpha) # Panggil generate_gamma untuk setiap sampel
}
return(samples)
}
## Parameter
set.seed(100) # Untuk reproduktifitas
alpha <- 2
n_samples <- 10000
## Bangkitkan sampel distribusi Gamma
gamma_samples <- generate_gamma_samples(alpha, n_samples)
cat("Bangkitan data distribusi gamma:","\n")
## Bangkitan data distribusi gamma:
gamma_samples[1:100]
## [1] 0.7308952 0.9791315 1.8151597 0.9740092 1.1225223 0.6975863 1.5795052
## [8] 0.5959508 0.8539291 1.6126906 0.9762681 1.3300452 4.7042095 1.6449102
## [15] 1.0663388 1.6574611 0.6004509 0.7574431 0.6396159 1.0365279 0.4629731
## [22] 1.0519497 3.3750092 0.8790163 0.8458984 1.2257583 2.0841898 1.9376332
## [29] 2.6639610 0.2561565 1.4633864 2.5163678 0.7884423 2.5107098 0.9477264
## [36] 0.2287482 0.7538658 0.2669413 3.6861958 0.1415635 1.9530819 0.3748060
## [43] 3.5227991 2.6234912 0.8297651 0.7820864 5.4577633 0.9785364 1.4821110
## [50] 1.0090152 0.9052644 1.2602602 3.1450069 0.1844442 0.4901346 1.0747004
## [57] 1.9956430 0.1817021 1.8296054 0.9128381 0.3936081 0.2153930 1.5730703
## [64] 0.8711992 1.0227455 1.7174118 3.3101690 2.7108273 0.5681083 0.4630336
## [71] 5.0713700 1.2216513 0.4549840 2.5901999 1.7528969 0.3545499 0.6161977
## [78] 2.3722559 0.8908579 1.0592051 0.3643290 0.8017520 0.9780281 2.0104911
## [85] 0.8323526 3.0766274 1.2329955 1.2232869 0.3257712 0.8225760 1.9941199
## [92] 0.7445011 1.1017077 1.5465800 0.7484037 2.5630762 1.2538346 0.8739356
## [99] 1.2676123 0.9165594
mean_random_gamma <- mean(gamma_samples)
var_random_gamma <- var (gamma_samples)
cat ("Mean dari bilangan acak distribusi gamma:", mean_random_gamma, "\n")
## Mean dari bilangan acak distribusi gamma: 1.406124
cat ("varian dari bilangan acak distribusi gamma:", var_random_gamma, "\n")
## varian dari bilangan acak distribusi gamma: 1.069416
## Visualisasi histogram
hist(
gamma_samples,
breaks = 40,
probability = TRUE,
main = paste("Histogram Sampel Distribusi Gamma (alpha =", alpha, ")"),
xlab = "Nilai",
ylab = "Probabilitas",
col = "pink",
border = "black"
)
## Tambahkan kurva distribusi Gamma teoritis
curve(
dgamma(x, shape = alpha, scale = 1),
add = TRUE,
col = "red",
lwd = 2
)

# Fungsi untuk membangkitkan satu bilangan acak Poisson
generate_poisson <- function(lambda) {
# Langkah 1: Hitung F
F <- exp(-lambda)
# Inisialisasi
k <- 1
Pk <- 1
repeat {
# Langkah 4: Bangkitkan bilangan random U
U <- runif(1)
# Langkah 5: Hitung Pk
if (k == 1) {
Pk <- U
} else {
Pk <- Pk * U
}
# Langkah 6: Periksa apakah Pk < F
if (Pk < F) {
# Jika ya, hitung X = k - 1
return(k - 1)
} else {
# Jika tidak, tingkatkan k dan ulangi
k <- k + 1
}
}
}
# Fungsi untuk membangkitkan n bilangan acak Poisson
generate_poisson_samples <- function(lambda, n_samples) {
samples <- numeric(n_samples)
for (i in 1:n_samples) {
samples[i] <- generate_poisson(lambda)
}
return(samples)
}
# Parameter lambda
lambda <- 10
n_samples <- 100000
# Bangkitkan data sampel
set.seed(123) # Untuk hasil yang dapat direproduksi
poisson_samples <- generate_poisson_samples(lambda, n_samples)
# Lihat beberapa hasil sampel
cat("Contoh Data Poisson:\n", poisson_samples[1:100], "\n")
## Contoh Data Poisson:
## 14 14 10 7 7 16 10 12 14 13 14 5 9 11 15 14 10 12 11 14 15 4 10 4 9 8 10 8 14 10 12 10 11 8 12 7 14 8 9 11 11 10 8 9 10 8 13 13 7 13 13 7 9 9 12 12 12 9 4 15 7 9 8 8 12 3 9 7 13 8 8 9 9 12 4 13 5 10 8 9 14 9 5 12 14 9 8 12 7 10 11 10 11 10 10 15 13 8 6 16
# Statistik deskriptif
cat("Rata-rata Sampel:", mean(poisson_samples), "\n")
## Rata-rata Sampel: 9.98604
cat("Variansi Sampel:", var(poisson_samples), "\n")
## Variansi Sampel: 9.979425
# Visualisasi histogram
hist(
poisson_samples,
breaks = max(poisson_samples) - min(poisson_samples) + 1,
main = paste("Histogram Sampel Distribusi Poisson (lambda =", lambda, ")"),
xlab = "Nilai",
ylab = "Frekuensi",
col = "pink",
border = "black",
probability = TRUE
)
# Tambahkan garis distribusi teoritis
x_vals <- 0:max(poisson_samples)
lines(
x_vals,
dpois(x_vals, lambda = lambda),
type = "h",
col = "red",
lwd = 2
)
