Jenis Penduga : Nilai tengah -> rataan, median Ragam -> ragam contoh (n-1), ragam contoh(n-1)
set.seed(117)
n = 10 # ukuran sampel
k = 1000 # jumlah ulangan
N = 20 # ukuran populasi
populasi = rnorm(N, 4, sqrt(16)) # rnorm(n, mean, sd)
hist(populasi)
miu = mean(populasi)
# Mengambil sampel dan menghitung rata-rata sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
xbar = apply(sampel, 1, mean)
E.xbar = mean(xbar) # estimasi harapan dari xbar
# Output hasil
cat("Mean Populasi:", miu, "\n")
## Mean Populasi: 3.389474
cat("E(x̄) dari Sampel:", E.xbar, "\n")
## E(x̄) dari Sampel: 3.379834
Terlihat bahwa nilai E(Xbar) mendekati nilai miu yaitu nilai rata rat populasi sehingga pada kasus ini menyatakan E(xbar) tidak bias terhadapa nilai miu.
sigma2 = var(populasi) * (length(populasi) - 1) / length(populasi) # varians populasi
# Mengambil sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
# Menghitung ragam (n)
s2_biased = apply(sampel, 1, function(x) var(x) * (length(x) - 1) / length(x))
E.s2_biased = mean(s2_biased)
# Mengambil sampel dan menghitung varians dengan koreksi (tak bias)
s2_unbiased = apply(sampel, 1, var) # Ragam dengan koreksi (n-1)
E.s2_unbiased = mean(s2_unbiased) # Ekspektasi varians dengan koreksi
# Output hasil
cat("Varians Populasi:", sigma2, "\n")
## Varians Populasi: 17.16209
cat("E(s^2) tanpa koreksi (bias):", E.s2_biased, "\n")
## E(s^2) tanpa koreksi (bias): 16.19388
cat("E(s^2) dengan koreksi (tak bias):", E.s2_unbiased, "\n")
## E(s^2) dengan koreksi (tak bias): 17.9932
Karena populasinya hanya 20 angka, maka varians populasi (sigma²) yang rentan terhadap fluktuasi (noise). maka terlihat hasilnya tidak terlalu jauh
set.seed(121)
n = 10 # ukuran sampel
k = 1000 # jumlah ulangan
N = 20 # ukuran populasi
populasi = runif(N, 5, 10) # runif(n,min,max)
hist(populasi)
miu = mean(populasi)
# Mengambil sampel dan menghitung rata-rata sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
xbar = apply(sampel, 1, mean)
E.xbar = mean(xbar) # estimasi harapan dari xbar
# Output hasil
cat("Mean Populasi:", miu, "\n")
## Mean Populasi: 7.691463
cat("E(x̄) dari Sampel:", E.xbar, "\n")
## E(x̄) dari Sampel: 7.69513
Terlihat bahwa nilai E(Xbar) mendekati nilai miu yaitu nilai rata rat populasi sehingga pada kasus ini menyatakan E(xbar) tidak bias terhadapa nilai miu.
E(X) untuk sebaran seragam adalah (b+a)/2 yaitu (15)/2 = 7.5
sigma2 = var(populasi) * (length(populasi) - 1) / length(populasi) # varians populasi
# Mengambil sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
# Menghitung ragam (n)
s2_biased = apply(sampel, 1, function(x) var(x) * (length(x) - 1) / length(x))
E.s2_biased = mean(s2_biased)
# Mengambil sampel dan menghitung varians dengan koreksi (tak bias)
s2_unbiased = apply(sampel, 1, var) # Ragam dengan koreksi (n-1)
E.s2_unbiased = mean(s2_unbiased) # Ekspektasi varians dengan koreksi
# Output hasil
cat("Varians Populasi:", sigma2, "\n")
## Varians Populasi: 1.501897
cat("E(s^2) tanpa koreksi (bias):", E.s2_biased, "\n")
## E(s^2) tanpa koreksi (bias): 1.419181
cat("E(s^2) dengan koreksi (tak bias):", E.s2_unbiased, "\n")
## E(s^2) dengan koreksi (tak bias): 1.576868
Var(X) untuk sebaran seragam adalah (b-a)^2/12 = 25/12 = 2.0833
Tidak seperti distribusi normal, distribusi uniform tidak punya “bentuk simetris tajam” di tengah.
Untuk distribusi yang tidak normal, performa estimator unbiased bisa lebih fluktuatif, terutama jika n kecil (sampel = 10).
Kesimpulan based on gpt : 1. Populasi kecil → varians populasi acak & tidak stabil.
Distribusi uniform → varians data lebih merata & tidak terpusat.
Estimator unbiased memang bisa lebih variatif dalam kasus kecil & non-normal.
set.seed(121)
n = 10 # ukuran sampel
k = 1000 # jumlah ulangan
N = 20 # ukuran populasi
populasi = rexp(N,1)
hist(populasi)
Terlihat bahwa nilai E(Xbar) mendekati nilai miu yaitu nilai rata rat
populasi sehingga pada kasus ini menyatakan E(xbar) tidak bias terhadapa
nilai miu.
miu = mean(populasi)
# Mengambil sampel dan menghitung rata-rata sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
xbar = apply(sampel, 1, mean)
E.xbar = mean(xbar) # estimasi harapan dari xbar
# Output hasil
cat("Mean Populasi:", miu, "\n")
## Mean Populasi: 0.8305081
cat("E(x̄) dari Sampel:", E.xbar, "\n")
## E(x̄) dari Sampel: 0.8298502
E(X) untuk sebaran eksponensial adalah 1/lambda = 1
sigma2 = var(populasi) * (length(populasi) - 1) / length(populasi) # varians populasi
# Mengambil sampel
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
# Menghitung ragam (n)
s2_biased = apply(sampel, 1, function(x) var(x) * (length(x) - 1) / length(x))
E.s2_biased = mean(s2_biased)
# Mengambil sampel dan menghitung varians dengan koreksi (tak bias)
s2_unbiased = apply(sampel, 1, var) # Ragam dengan koreksi (n-1)
E.s2_unbiased = mean(s2_unbiased) # Ekspektasi varians dengan koreksi
# Output hasil
cat("Varians Populasi:", sigma2, "\n")
## Varians Populasi: 0.4810118
cat("E(s^2) tanpa koreksi (bias):", E.s2_biased, "\n")
## E(s^2) tanpa koreksi (bias): 0.4607114
cat("E(s^2) dengan koreksi (tak bias):", E.s2_unbiased, "\n")
## E(s^2) dengan koreksi (tak bias): 0.5119016
E(X) untuk sebaran eksponensial adalah 1/lambda^2 = 1
Estimator tak bias s²_unbiased seharusnya menuju ke varian distribusi sebenarnya (1), bukan ke varian dari 20 angka acak itu.
n = 10
k = 100 # ulangan
alpha = 0.05
mu = 50
std = 10
set.seed(111)
sampel = matrix(rnorm(n*k,mu,std),k)
xbar = apply(sampel,1,mean)
s = apply(sampel,1,sd)
SE = s/sqrt(n)
z = qnorm(1-alpha/2)
SK = (xbar-z*SE < mu & mu < xbar+z*SE)
propz = sum(SK)/k # proporsi banyaknya SK yang memuat mu
propz
## [1] 0.93
matplot(rbind(xbar-z*SE, xbar+z*SE), rbind(1:k,1:k), col=ifelse(SK,"blue","red"), type = "l", lty = 1,
main='Selang Kepercayaan', xlab='SK', ylab='Banyak Ulangan')
abline(v=mu)
cat("Proporsi SK yang memuat mu (σ diketahui, pakai Z):", propz, "\n")
## Proporsi SK yang memuat mu (σ diketahui, pakai Z): 0.93
# --- 2. Selang kepercayaan saat σ TIDAK diketahui (pakai s dan distribusi t)
s <- apply(sampel, 1, sd)
SE_unknown <- s / sqrt(n)
t <- qt(1 - alpha/2, df = n - 1)
SK_t <- (xbar - t * SE_unknown < mu) & (mu < xbar + t * SE_unknown)
prop_t <- mean(SK_t)
matplot(rbind(xbar - t * SE_unknown,xbar + t * SE_unknown), rbind(1:k,1:k), col=ifelse(SK,"blue","red"), type = "l", lty = 1,
main='Selang Kepercayaan', xlab='SK', ylab='Banyak Ulangan')
abline(v=mu)
cat("Proporsi SK yang memuat mu (σ tidak diketahui, pakai t):", round(prop_t, 4), "\n")
## Proporsi SK yang memuat mu (σ tidak diketahui, pakai t): 0.94
n = 30
k = 100 # ulangan
alpha = 0.05
mu = 0
std = 1
set.seed(111)
sampel = matrix(rnorm(n*k,mu,std),k)
xbar = apply(sampel,1,mean)
s = apply(sampel,1,sd)
SE = s/sqrt(n)
z = qnorm(1-alpha/2)
SK = (xbar-z*SE < mu & mu < xbar+z*SE)
sum(SK)/k # proporsi banyaknya SK yang memuat mu
## [1] 0.94
## [1] 0.94
matplot(rbind(xbar-z*SE, xbar+z*SE), rbind(1:k,1:k), col=ifelse(SK,"blue","red"), type = "l", lty = 1,
main='Selang Kepercayaan', xlab='SK', ylab='Banyak Ulangan')
abline(v=mu)
n = 100
k = 100 # ulangan
alpha = 0.05
mu = 0
std = 1
set.seed(111)
sampel = matrix(rnorm(n*k,mu,std),k)
xbar = apply(sampel,1,mean)
s = apply(sampel,1,sd)
SE = s/sqrt(n)
z = qnorm(1-alpha/2)
SK = (xbar-z*SE < mu & mu < xbar+z*SE)
sum(SK)/k # proporsi banyaknya SK yang memuat mu
## [1] 0.95
## [1] 0.94
matplot(rbind(xbar-z*SE, xbar+z*SE), rbind(1:k,1:k), col=ifelse(SK,"blue","red"), type = "l", lty = 1,
main='Selang Kepercayaan', xlab='SK', ylab='Banyak Ulangan')
abline(v=mu)
Uniform <- function(n, reps = 1000) {
means <- replicate(reps, mean(runif(n, 0, 1)))
return(means)
}
Membuat fungsi untuk membangkitkan data dengan distribusi uniform(0,1) yang dilakukan dengan pengulangan 1000x dan diambil rataannya
set.seed(123)
sample_sizes <- c(10, 30, 100)
par(mfrow = c(1, 3), mar = c(4, 4, 2, 1))
for (n in sample_sizes) {
means <- Uniform(n)
hist(
means,
breaks = 30,
probability = TRUE,
col = "lightgreen",
main = paste("Uniform (n=", n, ")", sep = ""),
xlab = "Rata-rata Sampel",
ylab = "Kerapatan"
)
}
set.seed(123)
n <- 10
k <- 100
B <- 1000
mu <- 0.5 # nilai tengah dari sebaran uni(0,1)
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- runif(n, 0,1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Plot CI menggunakan matplot
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Visualisasi Selang Kepercayaan Bootstrap")
abline(v = mu, col = "black", lty = 2) # garis vertikal di mu
# Proporsi CI yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.9
set.seed(123)
n <- 30
k <- 100
B <- 1000
mu <- 0.5
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- runif(n, 0,1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Plot CI menggunakan matplot
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Visualisasi Selang Kepercayaan Bootstrap")
abline(v = mu, col = "black", lty = 2) # garis vertikal di mu
# Proporsi CI yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.95
set.seed(123)
n <- 100
k <- 100
B <- 1000
mu <- 0.5
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- runif(n, 0,1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Plot CI menggunakan matplot
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Visualisasi Selang Kepercayaan Bootstrap")
abline(v = mu, col = "black", lty = 2) # garis vertikal di mu
# Proporsi CI yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.95
Expo <- function(n, reps = 1000) {
means <- replicate(reps, mean(rexp(n, rate = 1)))
return(means)
}
set.seed(123)
par(mfrow = c(1, 3), mar = c(4, 4, 2, 1))
for (n in sample_sizes) {
means <- Expo(n)
hist(
means,
breaks = 30,
probability = TRUE,
col = "lightblue",
main = paste("Eksponensial (n=", n, ")", sep = ""),
xlab = "Rata-rata Sampel",
ylab = "Kerapatan"
)
}
set.seed(123)
n <- 10
k <- 100 # jumlah simulasi
B <- 1000 # jumlah bootstrap
mu <- 0.5 # mean dari Uniform(0,1)
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- runif(n, min = 0, max = 1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Visualisasi selang kepercayaan
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Selang Kepercayaan Bootstrap - Uniform(0,1)")
abline(v = mu, col = "black", lty = 2)
# Proporsi yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.9
set.seed(123)
n <- 30
k <- 100
B <- 1000
mu <- 1
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- rexp(n, rate = 1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Plot CI menggunakan matplot
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Visualisasi Selang Kepercayaan Bootstrap")
abline(v = mu, col = "black", lty = 2) # garis vertikal di mu
# Proporsi CI yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.91
set.seed(123)
n <- 100
k <- 100
B <- 1000
mu <- 1
alpha <- 0.05
CI_lower <- numeric(k)
CI_upper <- numeric(k)
contains_mu <- logical(k)
for (i in 1:k) {
sampel <- rexp(n, rate = 1)
boots <- replicate(B, mean(sample(sampel, n, replace = TRUE)))
CI <- quantile(boots, probs = c(alpha/2, 1 - alpha/2))
CI_lower[i] <- CI[1]
CI_upper[i] <- CI[2]
contains_mu[i] <- CI[1] < mu && mu < CI[2]
}
# Plot CI menggunakan matplot
matplot(rbind(CI_lower, CI_upper),
rbind(1:k, 1:k),
type = "l", lty = 1,
col = ifelse(contains_mu, "blue", "red"),
xlab = "Interval", ylab = "Simulasi ke-",
main = "Selang Kepercayaan Bootstrap Exp(1)")
abline(v = mu, col = "black", lty = 2) # garis vertikal di mu
# Proporsi CI yang memuat mu
prop <- mean(contains_mu)
cat("Proporsi Bootstrap CI yang memuat mu =", round(prop, 4), "\n")
## Proporsi Bootstrap CI yang memuat mu = 0.98
# Parameter awal
mu <- 50
sigma <- 10
n <- 100
se <- sigma / sqrt(n)
alpha <- 0.05
z_crit <- qnorm(1 - alpha/2)
# Jumlah simulasi
N <- 100
# Vektor untuk menyimpan hasil
lower_sym <- numeric(N)
upper_sym <- numeric(N)
contains_mu <- logical(N)
set.seed(123)
for (i in 1:N) {
x <- rnorm(n, mean = mu, sd = sigma)
x_bar <- mean(x)
lower <- x_bar - z_crit * se
upper <- x_bar + z_crit * se
lower_sym[i] <- lower
upper_sym[i] <- upper
contains_mu[i] <- (mu >= lower & mu <= upper)
}
# Hitung proporsi selang yang mengandung mu
coverage_rate <- mean(contains_mu)
cat("Proporsi selang yang mengandung mu:", coverage_rate, "\n")
## Proporsi selang yang mengandung mu: 0.97
cat("Selang simetris : [", lower, ",", upper, "]\n")
## Selang simetris : [ 47.69487 , 51.6148 ]
cat("Jarak ke bawah :", x_bar - lower, "\n")
## Jarak ke bawah : 1.959964
cat("Jarak ke atas :", upper - x_bar, "\n\n")
## Jarak ke atas : 1.959964
# Parameter awal
mu <- 50
sigma <- 10
n <- 100
se <- sigma / sqrt(n)
alpha_lower <- 0.01
alpha_upper <- 0.04
# Hitung z-score untuk batas bawah dan atas
z_lower <- qnorm(alpha_lower)
z_upper <- qnorm(1 - alpha_upper)
# Jumlah simulasi
N <- 100
# Vektor untuk menyimpan hasil
lower_bounds <- numeric(N)
upper_bounds <- numeric(N)
contains_mu <- logical(N)
set.seed(123)
for (i in 1:N) {
x <- rnorm(n, mean = mu, sd = sigma)
x_bar <- mean(x)
lower <- x_bar + z_lower * se
upper <- x_bar + z_upper * se
lower_bounds[i] <- lower
upper_bounds[i] <- upper
contains_mu[i] <- (mu >= lower & mu <= upper)
}
# Hitung proporsi selang yang mengandung mu
coverage_rate <- mean(contains_mu)
cat("Proporsi selang yang mengandung mu (tidak simetris):", coverage_rate, "\n")
## Proporsi selang yang mengandung mu (tidak simetris): 0.96
cat("Selang simetris : [", lower, ",", upper, "]\n")
## Selang simetris : [ 47.32849 , 51.40552 ]
cat("Jarak ke bawah :", x_bar - lower, "\n")
## Jarak ke bawah : 2.326348
cat("Jarak ke atas :", upper - x_bar, "\n\n")
## Jarak ke atas : 1.750686