Melalui HTML ini, kami akan mengimplementasikan materi yang telah dipelajari dari mata kuliah KOMPUTASI STATISTIKA
\[
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \epsilon
\]
Di mana:
Source: BPS
Berikut ini merupakan data yang akan diolah. Data ini dibuat menggunakan data frame.
data_1 <- data.frame(
Provinsi = c("NAD", "Sumatera Utara", "Sumatera Selatan", "Sumatera Barat",
"Bengkulu", "Riau", "Kepulauan Riau", "Jambi", "Lampung", "Bangka
Belitung", "Kalimantan Barat", "Kalimantan Timur", "Kalimantan
Selatan", "Kalimantan Tengah", "Banten", "DKI Jakarta", "Jawa Barat",
"Jawa Tengah", "DI Yogyakarta", "Jawa Timur", "Bali", "NTT", "NTB",
"Gorontalo", "Sulawesi Barat", "Sulawesi Tengah", "Sulawesi Utara",
"Sulawesi Tenggara", "Sulawesi Selatan", "Maluku Utara", "Maluku",
"Papua Barat", "Papua"),
X1 = c(9.02, 9.13, 8.04, 8.63, 8.55, 8.78, 9.91, 8.37, 7.89, 8.15, 7.17, 9.39,
8.01, 8.17, 8.61, 11, 8.11, 7.43, 9.33, 7.53, 8.58, 7.16, 7.2, 7.52, 7.35,
8.22, 9.09, 8.44, 8.01, 8.72, 9.2, 8.53, 6.87),
X2 = c(856.9, 1416.4, 1104.6, 384.1, 323.5, 511.5, 119.1, 277.7, 1144.8, 119.4,
407.3, 248.7, 184.3, 149.4, 677.5, 371.7, 4375.2, 4811.3, 541.9, 4893,
182.8, 1006.9, 815.5, 198.5, 151.7, 400.4, 201.1, 330.8, 863.2, 85.6,
315.2, 226.2, 960.6),
Y = c(68.3, 68.36, 66.16, 68.91, 68.53, 69.21, 73.02, 67.7, 68.17, 71.19, 64.92,
73.21, 69.43, 67.41, 69.47, 78.08, 68.25, 68.02, 76.44, 67.55, 72.09, 61.68,
63.76, 64.7, 61.53, 65.79, 69.49, 67.55, 67.92, 64.78, 66.09, 60.91, 56.25)
)
data_1
## Provinsi X1 X2 Y
## 1 NAD 9.02 856.9 68.30
## 2 Sumatera Utara 9.13 1416.4 68.36
## 3 Sumatera Selatan 8.04 1104.6 66.16
## 4 Sumatera Barat 8.63 384.1 68.91
## 5 Bengkulu 8.55 323.5 68.53
## 6 Riau 8.78 511.5 69.21
## 7 Kepulauan Riau 9.91 119.1 73.02
## 8 Jambi 8.37 277.7 67.70
## 9 Lampung 7.89 1144.8 68.17
## 10 Bangka\n Belitung 8.15 119.4 71.19
## 11 Kalimantan Barat 7.17 407.3 64.92
## 12 Kalimantan Timur 9.39 248.7 73.21
## 13 Kalimantan\n Selatan 8.01 184.3 69.43
## 14 Kalimantan Tengah 8.17 149.4 67.41
## 15 Banten 8.61 677.5 69.47
## 16 DKI Jakarta 11.00 371.7 78.08
## 17 Jawa Barat 8.11 4375.2 68.25
## 18 Jawa Tengah 7.43 4811.3 68.02
## 19 DI Yogyakarta 9.33 541.9 76.44
## 20 Jawa Timur 7.53 4893.0 67.55
## 21 Bali 8.58 182.8 72.09
## 22 NTT 7.16 1006.9 61.68
## 23 NTB 7.20 815.5 63.76
## 24 Gorontalo 7.52 198.5 64.70
## 25 Sulawesi Barat 7.35 151.7 61.53
## 26 Sulawesi Tengah 8.22 400.4 65.79
## 27 Sulawesi Utara 9.09 201.1 69.49
## 28 Sulawesi Tenggara 8.44 330.8 67.55
## 29 Sulawesi Selatan 8.01 863.2 67.92
## 30 Maluku Utara 8.72 85.6 64.78
## 31 Maluku 9.20 315.2 66.09
## 32 Papua Barat 8.53 226.2 60.91
## 33 Papua 6.87 960.6 56.25
Berikut ini merupakan data yang akan diolah. Data ini dibuat menggunakan vector.
data_2 <- c(406.7, 245.3, 429.4, 582.9, 221.1, 223.9, 90.9, 136.4, 314.0, 461.7, 605.2, 555.0)
data_2
## [1] 406.7 245.3 429.4 582.9 221.1 223.9 90.9 136.4 314.0 461.7 605.2 555.0
Berikut ini merupakan data yang akan diolah. Data ini dibuat menggunakan data frame.
data_3 <- data.frame(
id_customer = 1:10,
transaksi = c(1500, 2000, 5600, 39000, 80000, 10200, 35200, 11000, 7000, 9900),
asal = c("Utara", "Selatan", "Timur", "Barat", "Utara", "Selatan", "Timur", "Barat", "Utara", "Selatan"),
kategori = c("A", "B", "A", "A", "B", "B", "A", "B", "A", "B"))
data_3
## id_customer transaksi asal kategori
## 1 1 1500 Utara A
## 2 2 2000 Selatan B
## 3 3 5600 Timur A
## 4 4 39000 Barat A
## 5 5 80000 Utara B
## 6 6 10200 Selatan B
## 7 7 35200 Timur A
## 8 8 11000 Barat B
## 9 9 7000 Utara A
## 10 10 9900 Selatan B
Berikut merupakan pembuatan fungsi statistik deskriptif menggunakan fungsi function
# Fungsi untuk mencari statistik deskriptif
statistik_deskriptif <- function(data)
{
# Periksa apakah data yang diinputkan adalah data frame
if (!is.data.frame(data)) {stop("Data harus berupa data frame")}
# Pilih kolom numerik
data_numerik <- data[sapply(data, is.numeric)]
# Jika tidak ada kolom numerik
if (ncol(data_numerik) == 0) {
stop("Tidak ada kolom numerik pada data")
}
# Hitung statistik deskriptif untuk setiap kolom yang numerik
statistik_deskriptif <- data.frame(
Mean = sapply(data_numerik, mean, na.rm = TRUE),
Median = sapply(data_numerik, median, na.rm = TRUE),
Standar_deviasi = sapply(data_numerik, sd, na.rm = TRUE),
Minimum = sapply(data_numerik, min, na.rm = TRUE),
Maksimum = sapply(data_numerik, max, na.rm = TRUE),
Q1 = sapply(data_numerik, function(x) quantile(x, probs = 0.25, na.rm = TRUE)),
Q3 = sapply(data_numerik, function(x) quantile(x, probs = 0.75, na.rm = TRUE))
)
return(statistik_deskriptif)
}
Selanjutnya hitung statistik deskriptif data 1 menggunakan fungsi yang telah dibuat sebelumnya kemudian lihat outptnya. Pada output dapat dilihat bahwa nilai statistik deskriptif yang muncul hanya kolom yang berisi data numerik.
## Mean Median Standar_deviasi Minimum Maksimum Q1 Q3
## X1 8.36697 8.37 0.8773628 6.87 11.00 7.89 8.78
## X2 868.38788 384.10 1278.7107689 85.60 4893.00 201.10 863.20
## Y 67.72333 68.02 4.2956982 56.25 78.08 65.79 69.43
Selanjutnya kita mencari model regresi untuk data 1
## Warning: package 'ggplot2' was built under R version 4.3.2
# Membuat model regresi linier berganda menggunakan pipe operator
model <- lm(Y ~ X2 + X1, data = data_1)
# Menampilkan ringkasan hasil regresi
summary(model)
##
## Call:
## lm(formula = Y ~ X2 + X1, data = data_1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.0272 -1.0304 0.3652 1.3550 5.1016
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.380e+01 5.085e+00 6.647 2.32e-07 ***
## X2 6.783e-04 4.054e-04 1.673 0.105
## X1 3.984e+00 5.909e-01 6.742 1.79e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.795 on 30 degrees of freedom
## Multiple R-squared: 0.6032, Adjusted R-squared: 0.5767
## F-statistic: 22.8 on 2 and 30 DF, p-value: 9.522e-07
# Membuat prediksi berdasarkan model
data_1$predicted_Y <- predict(model, newdata = data_1)
# Plot regresi berganda
ggplot(data_1, aes(x = X1, y = Y)) +
# Titik data dengan warna berdasarkan X2 dan ukuran berdasarkan Y
geom_point(aes(color = X2, size = Y), alpha = 0.7) +
# Garis regresi dengan warna biru dan garis putus-putus
geom_smooth(aes(y = predicted_Y), method = "lm", se = FALSE, color = "blue", linetype = "dashed") +
# Menambahkan label, judul, dan keterangan untuk skala warna dan ukuran
labs(
title = "Plot Regresi Berganda: X1 & X2 terhadap Y",
x = "X1",
y = "Y",
color = "X2 (Pengaruh)",
size = "Y (Target)"
) +
# Mengatur gradien warna untuk variabel X2
scale_color_gradient(low = "cyan", high = "magenta") +
# Tema minimalis dan elegan
theme_minimal() +
# Kustomisasi tampilan teks
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.title.x = element_text(size = 12, face = "bold"),
axis.title.y = element_text(size = 12, face = "bold"),
legend.position = "right"
)
## `geom_smooth()` using formula = 'y ~ x'
Berikut ini merupakan fungsi membuat data time series dari data 2.
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2005 406.7 245.3 429.4 582.9 221.1 223.9 90.9 136.4 314.0 461.7 605.2 555.0
# Plot time series
plot(data_ts, main = "Time Series Data 2", xlab = "Waktu (bulan)", ylab = "Nilai",
col = "magenta", lwd = 5, type = "s", pch = 19,)
Berikut merupakan fungsi untuk mengelompokkan data tanpa pipe operator dan menggunakan pipe operator, dapat dilihat keduanya memiliki output yang sama.
## Warning: package 'dplyr' was built under R version 4.3.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Warning: package 'magrittr' was built under R version 4.3.2
#fungsi mengelompokkan data (tanpa pipe)
result <- aggregate(transaksi ~ asal + kategori,
data = transform(data_3, besar_transaksi = ifelse(transaksi > 100, "Yes", "No")),
FUN = function(x) c(mean = mean(x), total = sum(x)))
#menampilkan output dengan tabel
hasil <- do.call(data.frame, result)
colnames(hasil)[3:4] <- c("mean_transaksi", "total_transaksi")
hasil
## asal kategori mean_transaksi total_transaksi
## 1 Barat A 39000.000 39000
## 2 Timur A 20400.000 40800
## 3 Utara A 4250.000 8500
## 4 Barat B 11000.000 11000
## 5 Selatan B 7366.667 22100
## 6 Utara B 80000.000 80000
#fungsi mengelompokkan data (dengan pipe)
hasil <- data_3 %>%
mutate(besar_transaksi = ifelse(transaksi > 100, "Yes", "No")) %>%
group_by(asal, kategori) %>%
summarise(
mean_transaksi = mean(transaksi),
total_transaksi = sum(transaksi)
) %>%
ungroup() %>%
arrange(kategori)
## `summarise()` has grouped output by 'asal'. You can override using the
## `.groups` argument.
## # A tibble: 6 × 4
## asal kategori mean_transaksi total_transaksi
## <chr> <chr> <dbl> <dbl>
## 1 Barat A 39000 39000
## 2 Timur A 20400 40800
## 3 Utara A 4250 8500
## 4 Barat B 11000 11000
## 5 Selatan B 7367. 22100
## 6 Utara B 80000 80000