Syntaks Soal No 3

# Packages
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggpubr)
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Mengatur parameter awal
n_sim <- 1000
n_obs <- c(5, 15, 30, 50, 100, 500, 1000)
mu <- 10
stadev <- 2
true_variance <- stadev^2

# Mendefinisikan penduga
W1 <- function(x) { 
  sum((x - mean(x))^2) / (length(x) - 1)
}
W2 <- function(x) { 
  (median(abs(x - median(x))))^2
}

# Ukuran performa
bias <- function(estimate, parameter) {
  mean(estimate) - parameter
}
relative_bias <- function(estimate, parameter) {
  (mean(estimate) - parameter) / parameter
}
empirical_variance <- function(estimate) { var(estimate) }

# Pembangkitan data
set.seed(1082)
gen_data <- map(n_obs, function(i) {
  x <- replicate(n = n_sim,
                 expr = rnorm(i, mean = mu, sd = stadev)
  ) %>% as.data.frame()
  return(x)
})

# Fungsi untuk menambahkan pencilan
add_outliers <- function(data) {
  data_with_outliers <- data
  for (i in seq_along(data)) {
    median_data <- median(data[[i]])
    iqr_data <- IQR(data[[i]])
    medium <- median_data + 2 * iqr_data
    ekstrim <- median_data + 5 * iqr_data
    data_with_outliers[[i]][1] <- medium  # Menambahkan pencilan medium
    data_with_outliers[[i]][2] <- ekstrim  # Menambahkan pencilan ekstrim
  }
  return(data_with_outliers)
}

# Menambahkan pencilan pada setiap dataset
gen_data_with_outliers <- map(gen_data, add_outliers)

# Menghitung W1 dan W2 untuk setiap ukuran sampel setelah menambahkan pencilan
W1_results <- map(gen_data_with_outliers, function(data) {
  apply(data, 2, W1)
})

W2_results <- map(gen_data_with_outliers, function(data) {
  apply(data, 2, W2)
})

# Menghitung ukuran performa untuk W1 dan W2
W1_performance <- map(W1_results, function(estimate) {
  tibble(
    bias = bias(estimate, true_variance),
    relative_bias = relative_bias(estimate, true_variance),
    empirical_variance = empirical_variance(estimate)
  )
})

W2_performance <- map(W2_results, function(estimate) {
  tibble(
    bias = bias(estimate, true_variance),
    relative_bias = relative_bias(estimate, true_variance),
    empirical_variance = empirical_variance(estimate)
  )
})

# Menggabungkan hasil performa dalam satu data frame
performance_results_W1 <- map2_df(n_obs, W1_performance, ~ mutate(.y, n_obs = .x, estimator = "W1"))
performance_results_W2 <- map2_df(n_obs, W2_performance, ~ mutate(.y, n_obs = .x, estimator = "W2"))
performance_results <- bind_rows(performance_results_W1, performance_results_W2)

# Menampilkan hasil dalam bentuk tabel
kable(performance_results, caption = "Ukuran Performa Estimator W1 dan W2 dalam Pendugaan Ragam") %>% 
  kable_styling(full_width = FALSE)
Ukuran Performa Estimator W1 dan W2 dalam Pendugaan Ragam
bias relative_bias empirical_variance n_obs estimator
24.7740290 6.1935072 1027.5418658 5 W1
11.4645706 2.8661426 59.5891842 15 W1
6.1336539 1.5334135 10.4004846 30 W1
3.8190349 0.9547587 3.5302453 50 W1
2.0622689 0.5155672 0.8819524 100 W1
0.4008482 0.1002120 0.0808392 500 W1
0.1908640 0.0477160 0.0365599 1000 W1
3.8613382 0.9653346 82.0984459 5 W2
-1.2955102 -0.3238776 2.6835843 15 W2
-1.8454408 -0.4613602 0.7179872 30 W2
-2.0258780 -0.5064695 0.3907648 50 W2
-2.0846609 -0.5211652 0.1866237 100 W2
-2.1603259 -0.5400815 0.0369479 500 W2
-2.1787309 -0.5446827 0.0184469 1000 W2