Pendahuluan

Return saham ekstrem adalah lonjakan atau penurunan harga saham yang berdampak besar pada portofolio investasi. Karena distribusi normal tidak cukup akurat dalam memprediksi pergerakan ekstrem ini, perlu dilakukan analis menggunakan distribusi campuran agar model lebih realistis. Selain itu, untuk mengukur risikonya digunakan metode Bootstrap dan Jackknife karena tidak bergantung pada asumsi distribusi tertentu. Dengan pendekatan ini, investor dapat mengelola risiko lebih baik dan membuat keputusan investasi yang lebih tepat. Oleh karena itu, evaluasi performa metode Bootstrap dan Jackknife ini sangat penting untuk memastikan keakuratan analisis risiko.

Tahapan Analisis

Tahapan analisis yang dilakukan untuk project ini adalah sebagai berikut.

1. Membangkitkan data dari distribusi normal dan distribusi Student-t dan menggabungkan keduanya.

2. Melakukan analisis statistika deskriptif, skewness, dan kurtosis.

3. Melakukan visualisasi data menggunakan histogram dan QQ-Plot.

4. Melakukan uji Kolmogorov-Smirnov pada data.

5. Tahap Fitting Distribution:

6. Tahap Resampling:

Hasil dan Pembahasan

1. Pembangkitan Data

dilakukan pembangkitan data secara simulasi untuk merepresentasikan return saham harian yang bersifat ekstrem. Data yang disimulasikan berjumlah 1000 observasi, dengan komposisi 90% berasal dari distribusi normal dan 10% berasal dari distribusi student-t dengan derajat kebebasan (df) sebesar 3.

set.seed(100) 
random_normal <- rnorm(900, mean = 0, sd = 0.01)
random_t <- rt(100, df = 3)
return_saham <- c(random_normal, random_t)
data <- data.frame(return_saham)

2. Statistika Deskriptif

Dilakukan analisis statistika deskriptif untuk memberikan gambaran umum mengenai karakteristik data return saham yang telah dibangkitkan

return_saham
Min. :-3.745834
1st Qu.:-0.006978
Median : 0.000509
Mean : 0.016533
3rd Qu.: 0.007937
Max. : 5.632550
Metric Value Skewness 2.743991 Kurtosis 51.653874

Minimum_Values 1 -3.745834 2 -3.507612 3 -2.719764 4 -2.290623 5 -1.934426

Maximum_Values 1 5.63255 2 3.865497 3 3.50379 4 3.214498 5 2.963102

3 Visualisasi Data

Data return saham divisualisasikan untuk mengetahui karakteristik dari datanya. Berikut merupakan hasil visualisasinya.

Dari boxplot yang terbentuk, terlihat bahwa banyak data return saham yang berada di sekitar nilai nol. Garis median juga berada di nilai nol. Hal ini menunjukkan bahwa secara umum return saham tidak terlalu besar ke arah positif atau negatif karena hampir seluruh datanya mendekati nol. Selain itu, dapat dilihat pula banyak terdapat outlier.

Dari histogram yang terbentuk, dapat dilihat puncak histogram sangat tinggi di sekitar nol. Hal ini juga menegaskan dari hasil boxplot bahwa mayoritas data di sekitar nol. Meskipun mayoritas data berada di sekitar nol, terlihat ekor panjang ke kiri dan ke kanan yang menunjukkan adanya beberapa nilai return saham ekstrem.Data return saham memiliki histogram dengan ekor panjang ke kanan yang artinya skewness positif. Hal ini sesuai dengan nilai skewness-nya yang positif. Selain itu, dari histogram juga dapat dilihat bahwa data return saham ini memiliki tipe kurtosis leptokurtik yakni memiliki puncak yang lebih runcing dibandingkan distribusi normal.

Dari Q-Q Plot yang terbentuk terlihat banyak data yang menyimpang dari garis normal.

4. Uji Kolmogorov-Smirnov

Uji Kolmogorov-Smirnov dilakukan untuk menguji apakah data berdistribusi normal atau tidak. Adapun hipotesis yang digunakan adalah sebagai berikut.

H0 : Data berdistribusi normal

H1 : Data tidak berdistribusi normal

# Uji Kolmogorov-Smirnov
cat("Uji Normalitas Kolmogorov-Smirnov\n\n")

# Calculate parameters
mu <- mean(data$return_saham)
sigma <- sd(data$return_saham)

# Perform KS test
ks_result <- ks.test(data$return_saham, "pnorm", mean = mu, sd = sigma)

# Display results in a more readable format
cat("Hasil Uji KS:\n")
cat("Statistik D:", round(ks_result$statistic, 4), "\n")
cat("p-value:", format.pval(ks_result$p.value, digits = 4), "\n\n")

# Interpretation
cat("Interpretasi:\n")
if(ks_result$p.value < 0.05) {
  cat("Berdasarkan hasil uji Kolmogorov-Smirnov:\n")
  cat("- p-value < 0.05 (signifikan)\n")
  cat("- Tolak H0: Data TIDAK berdistribusi normal\n")
} else {
  cat("Berdasarkan hasil uji Kolmogorov-Smirnov:\n")
  cat("- p-value ≥ 0.05 (tidak signifikan)\n")
  cat("- Gagal tolak H0: Data berdistribusi normal\n")
}
## Uji Normalitas Kolmogorov-Smirnov
## 
## Hasil Uji KS:
## Statistik D: 0.4367 
## p-value: < 2.2e-16 
## 
## Interpretasi:
## Berdasarkan hasil uji Kolmogorov-Smirnov:
## - p-value < 0.05 (signifikan)
## - Tolak H0: Data TIDAK berdistribusi normal

5. Fitting Distribution

Fitting distribution dilakukan untuk menduga distribusi dari return saham. Dari hasil visualisasi dan uji Kolmogorov-Smirnov didapatkan bahwa data return saham tidak berdistribusi normal. akan dilakukan fitting distribution menggunakan distribusi Student-t dan GPD.

## ### 1. Analisis Plot Deskriptif
## summary statistics
## ------
## min:  -3.745834   max:  5.63255 
## median:  0.0005086287 
## mean:  0.01653336 
## estimated sd:  0.4591689 
## estimated skewness:  2.748115 
## estimated kurtosis:  51.90405
## 2. Fitting Beberapa Distribusi
## 
##  Student-t Distribution
## Parameter Estimates:
##            m            s           df 
## 0.0004801844 0.0068121009 0.8006201686
## 
## Log-Likelihood: 2183.96 
## AIC: -4361.91 
## BIC: -4347.19
## 
##  Generalized Pareto Distribution (GPD) Analysis
## 
##  Mean Excess Plot

## 
## #### Best GPD Model (Minimum AIC)
## Threshold: 0.0166 
## AIC: -90.42 
## BIC: -85.21 
## Log-Likelihood: 47.21
## 
## ### 4. Model Comparison
##     Distribution         AIC         BIC     LogLik
##        Student-t -4361.91094 -4347.18767 2183.95547
## aic          GPD   -90.41782   -85.20748   47.20891

Dari hasil model selection yang melibatkan perbandingan nilai log-likelihood, AIC, dan BIC, diperoleh bahwa distribusi Student-t merupakan model yang paling sesuai dalam merepresentasikan pola data return saham.

6. Resampling

Dalam analisis ini, digunakan metode resampling untuk mengestimasi ketidakpastian parameter statistik dari data return saham. Dua metode yang digunakan adalah Bootstrap dan Jackknife.

Bootsrap

Bootstrap dilakukan dengan mengambil sampel acak dari data asli dengan pengembalian (with replacement), lalu menghitung kembali statistik seperti mean, variance, dan skewness dari setiap sampel. Proses ini diulang sebanyak 1.000 kali untuk membentuk distribusi bootstrap dari parameter-parameter tersebut.

diperoleh estimasi parameter statistik yang mencerminkan ketidakpastian dan stabilitas dari data return saham.

## Original estimates
mean_asli <- mean(x)
var_asli <- var(x)
skew_asli <- skewness(x)

## Calculate statistics
bias_mean <- mean(mean_boot) - mean_asli
bias_var <- mean(var_boot) - var_asli
bias_skew <- mean(skew_boot) - skew_asli

se_mean <- sd(mean_boot)
se_var <- sd(var_boot)
se_skew <- sd(skew_boot)

ci_mean <- quantile(mean_boot, c(0.025, 0.975))
ci_var <- quantile(var_boot, c(0.025, 0.975))
ci_skew <- quantile(skew_boot, c(0.025, 0.975))

## Create result tables
result_table <- data.frame(
  Statistic = c("Mean", "Variance", "Skewness"),
  Estimate = c(mean_asli, var_asli, skew_asli),
  Bias = c(bias_mean, bias_var, bias_skew),
  SE = c(se_mean, se_var, se_skew),
  CI_Lower = c(ci_mean[1], ci_var[1], ci_skew[1]),
  CI_Upper = c(ci_mean[2], ci_var[2], ci_skew[2])
)

## Display results
print(knitr::kable(result_table, digits = 6, 
                   caption = "Bootstrap Results for Return Saham",
                   col.names = c("Statistic", "Estimate", "Bias", 
                                "Std.Error", "CI Lower", "CI Upper")))
## 
## 
## Table: Bootstrap Results for Return Saham
## 
## |Statistic | Estimate|      Bias| Std.Error|  CI Lower| CI Upper|
## |:---------|--------:|---------:|---------:|---------:|--------:|
## |Mean      | 0.016533|  0.000424|  0.014449| -0.010062| 0.046829|
## |Variance  | 0.210836| -0.000810|  0.048611|  0.126863| 0.316147|
## |Skewness  | 2.743991| -0.149956|  1.725205| -0.973925| 5.750084|
## Visualizations
par(mfrow = c(1, 3), mar = c(4, 4, 3, 1))

# Mean
hist(mean_boot, breaks = 30, col = "lightblue", 
     main = "Bootstrap Distribution of Mean",
     xlab = "Mean", freq = FALSE)
abline(v = mean_asli, col = "red", lwd = 2)
abline(v = ci_mean, col = "blue", lty = 2)
legend("topright", legend = c("Original", "95% CI"), 
       col = c("red", "blue"), lty = c(1, 2), cex = 0.8)

# Variance
hist(var_boot, breaks = 30, col = "lightgreen", 
     main = "Bootstrap Distribution of Variance",
     xlab = "Variance", freq = FALSE)
abline(v = var_asli, col = "red", lwd = 2)
abline(v = ci_var, col = "blue", lty = 2)

# Skewness
hist(skew_boot, breaks = 30, col = "lightpink", 
     main = "Bootstrap Distribution of Skewness",
     xlab = "Skewness", freq = FALSE)
abline(v = skew_asli, col = "red", lwd = 2)
abline(v = ci_skew, col = "blue", lty = 2)

par(mfrow = c(1, 1))

## Detailed CI information
cat("\n### Confidence Intervals (Percentile Method)\n")
## 
## ### Confidence Intervals (Percentile Method)
cat("- Mean: [", round(ci_mean[1], 6), ", ", round(ci_mean[2], 6), "]\n")
## - Mean: [ -0.010062 ,  0.046829 ]
cat("- Variance: [", round(ci_var[1], 6), ", ", round(ci_var[2], 6), "]\n")
## - Variance: [ 0.126863 ,  0.316147 ]
cat("- Skewness: [", round(ci_skew[1], 6), ", ", round(ci_skew[2], 6), "]\n")
## - Skewness: [ -0.973925 ,  5.750084 ]

Jackknife

Jackknife adalah metode resampling sistematis yang dilakukan dengan menghilangkan satu observasi pada setiap iterasi, lalu menghitung ulang statistik yang sama.

# Jackknife Analysis
if (!requireNamespace("moments", quietly = TRUE)) install.packages("moments")
library(moments)

## 1. Data Preparation
set.seed(1)
x <- rnorm(100, mean = 0.05, sd = 0.1)  # Simulated returns
n <- length(x)

## 2. Initialize Storage
jack_est <- matrix(nrow = n, ncol = 3, 
                  dimnames = list(NULL, c("Mean", "Variance", "Skewness")))

## 3. Jackknife Process (silent version)
for (i in 1:n) {
  sample_jack <- x[-i]
  jack_est[i,] <- c(mean(sample_jack), var(sample_jack), skewness(sample_jack))
}

## 4. Compute Statistics
results <- data.frame(
  Statistic = c("Mean", "Variance", "Skewness"),
  Original = c(mean(x), var(x), skewness(x)),
  Jackknife = colMeans(jack_est),
  Bias = (n-1)*(colMeans(jack_est) - c(mean(x), var(x), skewness(x))),
  Std_Error = sqrt((n-1)/n * apply(jack_est, 2, var)),
  CI_Lower = colMeans(jack_est) - qnorm(0.975)*sqrt((n-1)/n * apply(jack_est, 2, var)),
  CI_Upper = colMeans(jack_est) + qnorm(0.975)*sqrt((n-1)/n * apply(jack_est, 2, var))
)

## 5. Display Results
knitr::kable(results, digits = 4,
             caption = "Jackknife Estimation Results",
             col.names = c("Statistic", "Original", "Jackknife", 
                          "Bias", "SE", "CI Lower", "CI Upper"))
Jackknife Estimation Results
Statistic Original Jackknife Bias SE CI Lower CI Upper
Mean Mean 0.0609 0.0609 0e+00 0.0009 0.0591 0.0627
Variance Variance 0.0081 0.0081 0e+00 0.0001 0.0078 0.0083
Skewness Skewness -0.0722 -0.0722 2e-04 0.0230 -0.1173 -0.0271
## 6. Compact Visualization
par(mfrow = c(1, 3), mar = c(4, 4, 2, 1), cex.main = 0.9)
for (i in 1:3) {
  hist(jack_est[,i], breaks = 15, col = c("lightblue", "lightgreen", "lightpink")[i],
       main = paste("Jackknife", colnames(jack_est)[i]),
       xlab = "Estimates")
  abline(v = results$Original[i], col = "red", lwd = 1.5)
  abline(v = c(results$CI_Lower[i], results$CI_Upper[i]), 
         col = "blue", lty = 2)
}

par(mfrow = c(1, 1))

Hasil perbandingan menunjukkan bahwa baik Bootstrap maupun Jackknife mampu memberikan estimasi yang mendekati data asli. Namun, Jackknife cenderung lebih stabil, ditunjukkan oleh bias nol, standard error yang sebanding, dan interval kepercayaan yang lebih sempit. Untuk parameter skewness, Bootstrap memiliki bias yang lebih besar, namun standard error-nya lebih rendah dan interval kepercayaan yang lebih sempit dibandingkan Jackknife.

Selain itu, Bootstrap sangat bergantung pada proses pengambilan sampel secara acak, sehingga hasil estimasi dapat bervariasi setiap kali dijalankan. Ketidakstabilan ini menjadi kelemahan ketika analisis. Oleh karena itu, metode Jackknife lebih cocok digunakan untuk data return saham yang bersifat ekstrem.

Kesimpulan

Berdasarkan hasil simulasi data return saham ekstrem dan analisis distribusi probabilitas yang dilakukan, diperoleh beberapa kesimpulan sebagai berikut: