=============================================================================
ETS KOMPUTASI STATISTIKA - SEMESTER GENAP 2025/2026
Soal 1 - Dataset: AirPassengers
—————————————————————————–
Petunjuk umum:
1. Kerjakan menggunakan bahasa pemrograman R.
2. Setiap nomor dikerjakan dalam file R script terpisah.
3. Format penamaan file: Nomor_NRP_Nama.R (mis.
1_5003221001_Budi.R)
4. Ikuti ketentuan penggunaan fungsi built-in pada masing-masing
sub-soal.
—————————————————————————–
Nama : Ancova Wilcah Diawara Amar
NRP : 5003251041
Kelas : D
=============================================================================
—————————————————————————–
Persiapan data
—————————————————————————–
AirPassengers: jumlah penumpang bulanan 1949-1960 (dalam
ribuan).
Restruktur sebagai matriks: tiap kolom = 1 tahun, tiap baris = 1
bulan.
df <- matrix(AirPassengers, nrow = 12, ncol = 12)
colnames(df) <- 1949:1960
rownames(df) <- month.abb
=============================================================================
(a) Fungsi arith_mean() - TANPA fungsi built-in mean() dan
sum()
=============================================================================
Rumus: Y_bar = (1/n) * sum_{i=1}^n Y_i
Terapkan ke tiap kolom (tahun) -> simpan ke vektor Y_bar (panjang
12).
arith_mean <- function(x) {
total <- 0
n <- length(x)
for(i in 1:n){
total <- total + x[i]
}
total / n
}
TODO: gunakan arith_mean() untuk menghitung rata-rata tiap kolom
df
Y_bar <- c()
for(i in 1:ncol(df)){
Y_bar[i] <- arith_mean(df[, i])
}
Tampilkan hasil
names(Y_bar) <- 1949:1960
print(Y_bar)
## 1949 1950 1951 1952 1953 1954 1955 1956
## 126.6667 139.6667 170.1667 197.0000 225.0000 238.9167 284.0000 328.2500
## 1957 1958 1959 1960
## 368.4167 381.0000 428.3333 476.1667
Validasi jawaban
print(colMeans(df) == Y_bar)
## 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960
## TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
=============================================================================
(b) Fungsi geo_mean_growth() - Geometric Mean Growth
=============================================================================
Langkah:
(i) Hitung faktor pertumbuhan r_t = Y_t / Y_{t-1}, untuk t =
2..n
(ii) GM = (r_2 * r_3 * … * r_n)^(1/(n-1))
(iii) g_bar = (GM - 1) * 100%
geo_mean_growth <- function(y) {
n <- length(y)
r <- c()
for(i in 2:n){
r[i - 1] <- y[i] / y[i - 1]
}
hasil <- 1
for(i in 1:length(r)){
hasil <- hasil * r[i]
}
GM <- hasil^(1 / (n - 1))
g_bar <- (GM - 1) * 100
list(r = r, GM = GM, g_bar = g_bar)
}
Hitung geometric mean growth
results_GM <- geo_mean_growth(Y_bar)
print(results_GM$g_bar)
## [1] 12.79284
=============================================================================
(c) Arithmetic Mean dari faktor pertumbuhan r_t
=============================================================================
AM = (1/(n-1)) * sum(r_t), t = 2..n -> gunakan arith_mean()
g_AM = (AM - 1) * 100%
AM <- arith_mean(results_GM$r)
g_bar_AM <- (AM - 1) * 100
print(g_bar_AM)
## [1] 12.90563
=============================================================================
(d) Prediksi Y_bar_1960 dan perbandingan
=============================================================================
Y_hat_1960 = Y_bar_1949 * (1 + g_bar)^11
Hitung untuk g_bar dari GM (b) dan dari AM (c).
Lalu hitung selisih absolut terhadap nilai aktual Y_bar_1960.
Y_1949 <- Y_bar[1]
Y_1960 <- Y_bar[12]
Y_hat_GM <- Y_1949 * (1 + results_GM$g_bar / 100)^11
Y_hat_AM <- Y_1949 * (1 + g_bar_AM / 100)^11
err_GM <- abs(Y_hat_GM - Y_1960)
err_AM <- abs(Y_hat_AM - Y_1960)
{
cat(sprintf("Y_hat_GM : %10.3f \n", Y_hat_GM))
cat(sprintf("Y_hat_AM : %10.3f", Y_hat_AM))
cat("\n\n")
cat(sprintf("err_GM : %10.3f \n", err_GM ))
cat(sprintf("err_AM : %10.3f", err_AM))
}
## Y_hat_GM : 476.167
## Y_hat_AM : 481.431
##
## err_GM : 0.000
## err_AM : 5.264