Pendahuluan

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.

1. Contoh Data

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

2. Statistik Deskriptif (ringkasan dasar)

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

3. Tabel Frekuensi dan Proporsi (untuk data kategorikal)

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

4. Visualisasi (histogram, boxplot, densitas)

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")

5. Fungsi Distribusi (contoh Normal, Binomial, Poisson)

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

6. Contoh: Menguji apakah data mengikuti Normal (visual + tes)

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

7. Fungsi Bantuan: Laporan Cepat

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.