Statistik deskriptif adalah metode untuk merangkum, mendeskripsikan, dan memahami karakteristik utama dari suatu data secara kuantitatif. Melalui ukuran seperti mean, median, standar deviasi, dan sebaran nilai, kita dapat memperoleh gambaran umum mengenai pola data tanpa melakukan analisis lebih lanjut. Sementara itu, fungsi distribusi dalam R digunakan untuk memahami perilaku probabilistik suatu variabel acak, seperti peluang kejadian, nilai kuantil, serta simulasi data acak dari berbagai distribusi (normal, binomial, Poisson, dan lainnya). Kedua konsep ini merupakan dasar penting sebelum memasuki analisis statistik yang lebih kompleks.
Di bawah ini digunakan mtcars dan sebuah vektor contoh
x. Ganti dataset/vektor sesuai kebutuhan.
# contoh vektor
x <- c(12, 15, 14, 10, 9, 20, 18, 16, 11, 13)
# contoh data frame
df <- mtcars
Statistik deskriptif membantu kita memahami karakter dasar data, seperti nilai tengah, penyebaran, dan bentuk distribusi. Bagian ini menunjukkan cara menghitung ukuran-ukuran tersebut secara otomatis menggunakan R.
Bagian ini menunjukkan fungsi-fungsi untuk menghitung statistik deskriptif umum.
# Statistik dasar untuk vektor numeric
descriptive_summary <- function(vec) {
vec <- na.omit(as.numeric(vec))
n <- length(vec)
mean_v <- mean(vec)
median_v <- median(vec)
sd_v <- sd(vec)
var_v <- var(vec)
min_v <- min(vec)
max_v <- max(vec)
iqr_v <- IQR(vec)
skew_v <- moments::skewness(vec)
kurt_v <- moments::kurtosis(vec)
perc <- quantile(vec, probs = c(0.25, 0.5, 0.75))
tibble::tibble(
n = n,
mean = mean_v,
median = median_v,
sd = sd_v,
var = var_v,
min = min_v,
`25%` = perc[1],
`50%` = perc[2],
`75%` = perc[3],
max = max_v,
IQR = iqr_v,
skewness = skew_v,
kurtosis = kurt_v
)
}
# Contoh pemakaian
descriptive_summary(x)
## # A tibble: 1 × 13
## n mean median sd var min `25%` `50%` `75%` max IQR skewness
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 10 13.8 13.5 3.52 12.4 9 11.2 13.5 15.8 20 4.5 0.351
## # ℹ 1 more variable: kurtosis <dbl>
# Ringkasan cepat untuk data frame (per kolom numeric)
summary_numeric_df <- function(data){
nums <- data %>% dplyr::select(where(is.numeric))
stats <- lapply(nums, function(col) {
descriptive_summary(col)
})
# menggabungkan ke data.frame rapi
stats_df <- do.call(rbind, lapply(names(stats), function(nm){
cbind(variable = nm, stats[[nm]])
}))
as.data.frame(stats_df)
}
# contoh
summary_numeric_df(df)
## variable n mean median sd var min 25%
## 1 mpg 32 20.090625 19.200 6.0269481 3.632410e+01 10.400 15.42500
## 2 cyl 32 6.187500 6.000 1.7859216 3.189516e+00 4.000 4.00000
## 3 disp 32 230.721875 196.300 123.9386938 1.536080e+04 71.100 120.82500
## 4 hp 32 146.687500 123.000 68.5628685 4.700867e+03 52.000 96.50000
## 5 drat 32 3.596563 3.695 0.5346787 2.858814e-01 2.760 3.08000
## 6 wt 32 3.217250 3.325 0.9784574 9.573790e-01 1.513 2.58125
## 7 qsec 32 17.848750 17.710 1.7869432 3.193166e+00 14.500 16.89250
## 8 vs 32 0.437500 0.000 0.5040161 2.540323e-01 0.000 0.00000
## 9 am 32 0.406250 0.000 0.4989909 2.489919e-01 0.000 0.00000
## 10 gear 32 3.687500 4.000 0.7378041 5.443548e-01 3.000 3.00000
## 11 carb 32 2.812500 2.000 1.6152000 2.608871e+00 1.000 2.00000
## 50% 75% max IQR skewness kurtosis
## 1 19.200 22.80 33.900 7.37500 0.6404399 2.799467
## 2 6.000 8.00 8.000 4.00000 -0.1831287 1.319032
## 3 196.300 326.00 472.000 205.17500 0.4002724 1.910317
## 4 123.000 180.00 335.000 83.50000 0.7614356 3.052233
## 5 3.695 3.92 4.930 0.84000 0.2788734 2.435116
## 6 3.325 3.61 5.424 1.02875 0.4437855 3.172471
## 7 17.710 18.90 22.900 2.00750 0.3870456 3.553753
## 8 0.000 1.00 1.000 1.00000 0.2519763 1.063492
## 9 0.000 1.00 1.000 1.00000 0.3817709 1.145749
## 10 4.000 4.00 5.000 1.00000 0.5546495 2.056790
## 11 2.000 4.00 8.000 2.00000 1.1021304 4.536121
Bagian ini digunakan untuk menganalisis data kategori, seperti menghitung jumlah kemunculan setiap kategori serta proporsinya. Ini penting untuk memahami pola data non-numerik.
# contoh data kategorikal
cats <- sample(c("A","B","C"), size = 30, replace = TRUE)
freq_table <- table(cats)
prop_table <- prop.table(freq_table)
freq_table
## cats
## A B C
## 10 14 6
prop_table
## cats
## A B C
## 0.3333333 0.4666667 0.2000000
Visualisasi membantu melihat pola data secara lebih intuitif. Histogram menunjukkan distribusi nilai, boxplot menunjukkan penyebaran dan outlier, dan grafik densitas memperlihatkan bentuk distribusi secara halus.
# Histogram
ggplot(data = data.frame(x = x), aes(x = x)) +
geom_histogram(bins = 6) +
ggtitle("Histogram: x")
# Boxplot
ggplot(data = data.frame(x = x), aes(y = x, x = "")) +
geom_boxplot() +
ggtitle("Boxplot: x")
# Densitas
ggplot(data = data.frame(x = x), aes(x = x)) +
geom_density() +
ggtitle("Densitas: x")
Fungsi distribusi digunakan untuk menghitung peluang, densitas, kuantil, serta menghasilkan data acak dari berbagai distribusi. Bagian ini memuat contoh penggunaan fungsi distribusi di R.
Bagian ini memperlihatkan penggunaan d, p,
q, dan r untuk distribusi.
# Normal: dnorm (densitas), pnorm (CDF), qnorm (quantile), rnorm (random)
xvals <- seq(-4, 4, length.out = 200)
dens_norm <- dnorm(xvals, mean = 0, sd = 1)
area_up_to_1 <- pnorm(1, mean = 0, sd = 1) # P(Z <= 1)
quantile_975 <- qnorm(0.975, mean = 0, sd = 1) # quantile 97.5%
random_norm <- rnorm(10, mean = 0, sd = 1)
# Binomial (contoh: n = 10, p = 0.3)
prob_k_3 <- dbinom(3, size = 10, prob = 0.3)
cumprob_up_to_3 <- pbinom(3, size = 10, prob = 0.3)
quantile_binom_95 <- qbinom(0.95, size = 10, prob = 0.3)
random_binom <- rbinom(10, size = 10, prob = 0.3)
# Poisson (contoh: lambda = 2)
prob_2 <- dpois(2, lambda = 2)
cumprob_up_to_2 <- ppois(2, lambda = 2)
quantile_pois_95 <- qpois(0.95, lambda = 2)
random_pois <- rpois(10, lambda = 2)
list(
normal = list(dens = head(dens_norm), p_up_to_1 = area_up_to_1, q_97.5 = quantile_975, rnd = random_norm),
binomial = list(p_k3 = prob_k_3, cdf_up_to3 = cumprob_up_to_3, q95 = quantile_binom_95, rnd = random_binom),
poisson = list(p_k2 = prob_2, cdf_up_to2 = cumprob_up_to_2, q95 = quantile_pois_95, rnd = random_pois)
)
## $normal
## $normal$dens
## [1] 0.0001338302 0.0001570506 0.0001840022 0.0002152309 0.0002513532
## [6] 0.0002930639
##
## $normal$p_up_to_1
## [1] 0.8413447
##
## $normal$q_97.5
## [1] 1.959964
##
## $normal$rnd
## [1] 0.9443401 0.4521686 -0.7740355 -1.0086873 0.5698380 0.6094313
## [7] 0.8479188 -0.1452515 1.7045207 -0.9736884
##
##
## $binomial
## $binomial$p_k3
## [1] 0.2668279
##
## $binomial$cdf_up_to3
## [1] 0.6496107
##
## $binomial$q95
## [1] 5
##
## $binomial$rnd
## [1] 5 4 6 2 2 2 3 3 4 2
##
##
## $poisson
## $poisson$p_k2
## [1] 0.2706706
##
## $poisson$cdf_up_to2
## [1] 0.6766764
##
## $poisson$q95
## [1] 5
##
## $poisson$rnd
## [1] 3 3 2 2 6 1 3 4 0 5
Pengujian normalitas penting untuk menentukan apakah data memenuhi asumsi distribusi normal. Di sini digunakan QQ-plot dan uji Shapiro-Wilk untuk memeriksa kesesuaian data terhadap distribusi normal.
# visual: QQ-plot
qqnorm(x); qqline(x)
# tes: Shapiro-Wilk (untuk n <= 5000)
shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.97343, p-value = 0.9207
Bagian ini menyediakan fungsi ringkas untuk menghasilkan laporan cepat statistik deskriptif beserta visualisasi dasar secara otomatis.
quick_report <- function(vec){
cat("Laporan singkat:\n")
print(descriptive_summary(vec))
cat("\nHistogram dan boxplot akan ditampilkan pada output grafis.\n")
}
# pakai
quick_report(x)
## Laporan singkat:
## # A tibble: 1 × 13
## n mean median sd var min `25%` `50%` `75%` max IQR skewness
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 10 13.8 13.5 3.52 12.4 9 11.2 13.5 15.8 20 4.5 0.351
## # ℹ 1 more variable: kurtosis <dbl>
##
## Histogram dan boxplot akan ditampilkan pada output grafis.
Catatan: - Ganti x atau df
pada bagian atas dengan data Anda. - Untuk distribusi lain (t,
chi-squared, exponential, uniform) gunakan fungsi dt,
pt, qt, rt (t-distribution),
dchisq, pchisq, qchisq,
rchisq, dexp, dsb. - Jika ingin laporan yang
lebih lengkap, bisa digabungkan dengan paket
rmarkdown::render() atau flexdashboard.