Penduga dikatakan tidak bias jika nilai harapan dari penduga tersebut sama dengan parameter populasi yang diestimasi.
Namun, penduga \(s^2\) dapat menjadi penduga bisa saja menjadi penduga berbias bagi \(\sigma^2\) jika salah menggunakan rumus untuk menghitung varians sample atau populasi. Oleh karena itu, kita harus membedakan perhitungan varians untuk sampel dan populasi.
set.seed(123)
n = 10 # ukuran sampel
k = 1000 # jumlah ulangan
populasi = rnorm(10000, 25, sqrt(5)) # populasi menyebar normal
miu = mean(populasi) # nilai rata-rata 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: 24.9947
cat("E(x̄) dari Sampel:", E.xbar, "\n")
## E(x̄) dari Sampel: 24.97598
set.seed(123)
n = 10 # ukuran sampel
k = 1000 # jumlah ulangan
populasi = rnorm(10000, 25, sqrt(5)) # populasi normal dengan mean=25, varians=5
sigma2 = var(populasi) * (length(populasi) - 1) / length(populasi) # varians populasi
# Mengambil sampel dan menghitung varians tanpa koreksi (bias)
sampel = matrix(NA, k, n)
for (i in 1:k) sampel[i,] = sample(populasi, n)
s2_biased = apply(sampel, 1, function(x) var(x) * (length(x) - 1) / length(x)) # Varians menggunakan rumus varians populasi
E.s2_biased = mean(s2_biased) # Ekspektasi varians tanpa koreksi
# Mengambil sampel dan menghitung varians dengan koreksi (tak bias)
s2_unbiased = apply(sampel, 1, var) # Varians dengan koreksi (n-1)
E.s2_unbiased = mean(s2_unbiased) # Ekspektasi varians dengan koreksi
# Output hasil
cat("Varians Populasi:", sigma2, "\n")
## Varians Populasi: 4.985877
cat("E(s^2) (bias):", E.s2_biased, "\n")
## E(s^2) (bias): 4.535246
cat("E(s^2) dengan koreksi (tak bias):", E.s2_unbiased, "\n")
## E(s^2) dengan koreksi (tak bias): 5.039162
Dari hasil di atas, kita bisa melihat bahwa:
\(\bar{x}\) tetap merupakan penduga tak bias bagi \(\mu\).
\(s^2\), yaitu varians sampel tanpa penyesuaian, memiliki nilai harapan lebih kecil dari \(\sigma^2\), yang berarti penduga ini bias.
\(s^2_{koreksi}\), yaitu varians sampel dengan penyesuaian \(n-1\) di penyebutnya, memiliki nilai harapan yang lebih mendekati \(\sigma^2\), sehingga merupakan penduga tak bias bagi varians populasi.
Kesimpulan
Penduga \(s^2\) yang dihitung dengan penyebut \(n\) merupakan penduga bias bagi varians populasi, karena \(E(s^2) < \sigma^2\). Oleh karena itu, kita menggunakan penyesuaian dengan penyebut \(n-1\) dalam perhitungan \(s^2_{koreksi}\), yang menjadikannya penduga tak bias bagi varians populasi.
Penduga \(b = (X'X)^{-1} X'y\) adalah penduga tak bias bagi \(\beta\) jika \(E(\varepsilon) = 0\).
set.seed(123)
n = 50 # ukuran sampel
k = 1000 # ulangan
beta = c(8,20) # beta_0 = 8 dan beta_1 = 20
varerror = 3
betaduga = matrix(NA,k,2)
for (i in 1:k){
x = runif(n)*100 #membangkitan n bilangan seragam yang meneybar uniform [0,100]
epsilon = rnorm(n,0,sqrt(varerror))
X = cbind(1,x)
y = X %*% beta + epsilon
betaduga[i,] = solve (t(X) %*% X) %*% (t(X) %*% y)
}
rataanbetaduga = apply(betaduga,2,mean)
names(rataanbetaduga) = c("b0","b1")
rataanbetaduga
## b0 b1
## 8.022609 19.999690
Dari hasil di atas, nilai harapan dari \(b_0\) dan \(b_1\) sudah mendekati nilai parameter \(\beta_0\) dan \(\beta_1\), sehingga dapat dikatakan bahwa:
Selang kepercayaan 95% untuk \(\theta\) berarti kita percaya 95% bahwa selang \(a\) sampai \(b\) memuat nilai parameter \(\theta\) yang sebenarnya.
Jika kita melakukan 100 kali percontohan acak dan setiap percontohan acak dibuat selang kepercayaannya, maka dari 100 SK yang terbentuk, ada 95 SK yang mencakup parameter, sedangkan sisanya sebanyak 5 SK tidak mencakup parameter.
n = 60 # Ukuran sampel dalam setiap ulangan
k = 100 # Jumlah ulangan atau simulasi
alpha = 0.05 # Taraf signifikansi (α) untuk selang kepercayaan
mu = 50 # Rata-rata populasi
std = 10 # Standar deviasi populasi
sampel = matrix(rnorm(n*k, mu, std), k) # Membuat matriks berisi k baris, dengan n kolom dari distribusi normal(µ, σ)
xbar = apply(sampel, 1, mean) # Menghitung rata-rata sampel untuk setiap baris (setiap ulangan)
s = apply(sampel, 1, sd) # Menghitung standar deviasi sampel untuk setiap ulangan
SE = s / sqrt(n) # Menghitung Standard Error (SE) dari rata-rata sampel
z = qnorm(1 - alpha / 2) # Nilai kritis distribusi normal untuk taraf signifikansi alpha
SK = (xbar - z * SE < mu & mu < xbar + z * SE) # Menghitung apakah µ termasuk dalam selang kepercayaan
sum(SK)/k # proporsi banyaknya SK yang memuat mu
## [1] 0.96
# Membuat selang kepercayaan dari setiap iterasi simulasi
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)
Hasil simulasi menunjukkan bahwa sekitar 95% selang kepercayaan yang dibentuk dari sampel acak berhasil mencakup nilai rata-rata populasi \((\mu)\). Hal ini sesuai dengan konsep selang kepercayaan, di mana dalam jangka panjang, sekitar \(( (1 - \alpha) \times 100\% )\) dari selang yang dibentuk seharusnya memuat parameter populasi yang sebenarnya. Perbedaan kecil antara hasil empiris dan nilai teoritis dapat disebabkan oleh variasi acak dalam pengambilan sampel, namun secara umum, metode ini telah menunjukkan validitasnya dalam estimasi parameter populasi
Pada bagian ini, kita akan melihat bagaimana pengaruh perubahan probabilitas \(p\) terhadap sebaran Binomial, dengan ukuran sampel \(n\) tetap.
rbinom() di
R.par(mfrow) untuk
menampilkan plot dalam satu tampilan.# Set seed untuk hasil yang dapat direproduksi
set.seed(123)
# Tentukan ukuran sampel (n) yang tetap
n = 50
# Tentukan berbagai nilai p
p_values = c(0.2, 0.4, 0.6, 0.8)
Penjelasan:
Kita menetapkan \(n = 50\) untuk ukuran sampel yang tetap.
Nilai \(p\) akan divariasikan, dimulai dari 0.2 hingga 0.8.
# Simulasikan data binomial untuk setiap nilai p
simulations = list()
for (p in p_values) {
simulations[[as.character(p)]] = rbinom(1000, size = n, prob = p)
}
Penjelasan:
Menggunakan rbinom(), kita menghasilkan 1000 data
acak untuk setiap nilai \(p\).
Hasil simulasi ini disimpan dalam list
simulations.
# Mengatur agar plot ditampilkan dalam beberapa area (4 plot dalam 1 tampilan)
par(mfrow=c(2,2))
# Menampilkan histogram untuk setiap nilai p
for (i in 1:length(p_values)) {
hist(simulations[[as.character(p_values[i])]],
probability = TRUE,
col=rgb(1,0,0,0.5),
xlim=c(0, n),
main=paste("Sebaran Binomial (p = ", p_values[i], ")", sep=""),
xlab="Jumlah Keberhasilan",
ylab="Kepadatan",
xaxp=c(0, n, n/5),
ylim=c(0, 0.2))
# Menambahkan garis density
lines(density(simulations[[as.character(p_values[i])]]), col="blue", lwd=2)
}
Penjelasan:
Fungsi par(mfrow=c(2,2)) digunakan untuk membuat 4
plot dalam satu tampilan (2 baris dan 2 kolom).
Untuk setiap nilai \(p\), kita menggambar histogram dengan menambahkan garis density yang menunjukkan distribusi data.
Histogram menunjukkan frekuensi, sementara kurva density menggambarkan distribusi data secara lebih halus.
Sekarang kita akan melihat bagaimana perubahan ukuran sampel \(n\) mempengaruhi sebaran Binomial, dengan nilai \(p\) tetap. Misalnya kita akan menggunakan \(p = 0.5\) dan mengubah ukuran sampel dari \(n = 20\) hingga \(n = 100\).
rbinom() di
R.par(mfrow).# Set seed untuk hasil yang dapat direproduksi
set.seed(123)
# Tentukan nilai p yang tetap
p = 0.5
# Tentukan berbagai nilai n
n_values = c(20, 50, 100)
Penjelasan:
Kita menetapkan \(p = 0.5\) yang tetap.
Ukuran sampel \(n\) akan divariasikan, dengan nilai \(n = 20, 50, 100\).
# Simulasikan data binomial untuk setiap nilai n
simulations_n = list()
for (n in n_values) {
simulations_n[[as.character(n)]] = rbinom(1000, size = n, prob = p)
}
Penjelasan:
Menggunakan rbinom(), kita menghasilkan 1000 data
acak untuk setiap ukuran sampel \(n\).
Hasil simulasi ini disimpan dalam list
simulations_n.
# Mengatur agar plot ditampilkan dalam beberapa area (3 plot dalam 1 tampilan)
par(mfrow=c(1,3))
# Menampilkan histogram untuk setiap nilai n
for (i in 1:length(n_values)) {
hist(simulations_n[[as.character(n_values[i])]],
probability = TRUE,
col=rgb(1,0,0,0.5),
xlim=c(0, max(n_values)),
main=paste("Sebaran Binomial (n = ", n_values[i], ")", sep=""),
xlab="Jumlah Keberhasilan",
ylab="Kepadatan",
xaxp=c(0, max(n_values), max(n_values)/5),
ylim=c(0, 0.2))
# Menambahkan garis density
lines(density(simulations_n[[as.character(n_values[i])]]), col="blue", lwd=2)
}
Penjelasan:
Dengan par(mfrow=c(1,3)), kita mengatur agar ada 3
plot dalam satu baris (tiga kolom).
Untuk setiap ukuran sampel \(n\), kita menggambar histogram dan kurva density yang menunjukkan distribusi data.
Di bagian ini, kita akan melihat bagaimana perubahan probabilitas \(p\) mempengaruhi distribusi Binomial Negatif, dengan \(r\) tetap.
rnbinom().par(mfrow).# Set seed untuk hasil yang dapat direproduksi
set.seed(123)
# Tentukan nilai r tetap
r = 10
# Tentukan berbagai nilai p
p_values_neg = c(0.2, 0.4, 0.6, 0.8)
# Simulasikan data binomial negatif untuk setiap nilai p
simulations_p = list()
for (p in p_values_neg) {
simulations_p[[as.character(p)]] = rnbinom(1000, size = r, prob = p)
}
Penjelasan:
Kita tetap menetapkan \(r = 10\) dan memvariasikan nilai \(p\) pada nilai \(0.2, 0.4, 0.6, 0.8\).
Menggunakan rnbinom(), kita mensimulasikan 1000 data
acak untuk setiap nilai \(p\).
# Mengatur agar plot ditampilkan dalam beberapa area (4 plot dalam 1 tampilan)
par(mfrow=c(2,2))
# Menampilkan histogram untuk setiap nilai p
for (i in 1:length(p_values_neg)) {
hist(simulations_p[[as.character(p_values_neg[i])]],
probability = TRUE,
col=rgb(1,0,0,0.5),
xlim=c(0, 100),
main=paste("Sebaran Binomial Negatif (p = ", p_values_neg[i], ")", sep=""),
xlab="Jumlah Percobaan",
ylab="Kepadatan",
xaxp=c(0, 100, 20),
ylim=c(0, 0.2))
# Menambahkan garis density
lines(density(simulations_p[[as.character(p_values_neg[i])]]), col="blue", lwd=2)
}
Penjelasan:
Fungsi par(mfrow=c(2,2)) digunakan untuk menampilkan
4 plot dalam satu tampilan (2 baris dan 2 kolom).
Setiap plot menggambarkan distribusi Binomial Negatif untuk nilai \(p = 0.2, 0.4, 0.6, 0.8\), dengan histogram dan kurva density.
Di bagian ini, kita akan melihat bagaimana perubahan jumlah keberhasilan \(r\) mempengaruhi distribusi Binomial Negatif, dengan \(p\) tetap.
rnbinom().par(mfrow).# Set seed untuk hasil yang dapat direproduksi
set.seed(123)
# Tetapkan nilai p tetap
p = 0.5
# Tentukan berbagai nilai r
r_values = c(2, 19, 49)
# Simulasikan data binomial negatif untuk setiap nilai r
simulations_r = list()
for (r in r_values) {
simulations_r[[as.character(r)]] = rnbinom(1000, size = r, prob = p)
}
Penjelasan:
Kita menetapkan \(p = 0.5\) yang tetap dan memvariasikan nilai \(r\) pada nilai \(5, 10, 20\).
Menggunakan rnbinom(), kita mensimulasikan 1000 data
acak untuk setiap nilai \(r\).
# Mengatur agar plot ditampilkan dalam beberapa area (3 plot dalam 1 tampilan)
par(mfrow=c(1,3))
# Menampilkan histogram untuk setiap nilai r
for (i in 1:length(r_values)) {
hist(simulations_r[[as.character(r_values[i])]],
probability = TRUE,
col=rgb(1,0,0,0.5),
xlim=c(0, 100),
main=paste("Sebaran Binomial Negatif (r = ", r_values[i], ")", sep=""),
xlab="Jumlah Percobaan",
ylab="Kepadatan",
xaxp=c(0, 100, 20),
ylim=c(0, 0.2))
# Menambahkan garis density
lines(density(simulations_r[[as.character(r_values[i])]]), col="blue", lwd=2)
}
Penjelasan:
Dengan par(mfrow=c(1,3)), kita mengatur tampilan
untuk menampilkan 3 plot dalam satu baris (tiga kolom).
Setiap plot menggambarkan distribusi Binomial Negatif untuk nilai \(r = 5, 10, 20\), dengan histogram dan kurva density.