Tugas Pertemuan 10

Mata Kuliah Pemodelan dan Teori Risiko

Valensius Jimy

April 26, 2024

Kontak \(\downarrow\)
Email
Instagram https://www.instagram.com/valjimy_/
RPubs https://rpubs.com/valensiusjimy/

1 Pendahuluan

  Value at Risk (VaR) merupakan sebuah ukuran statistik yang digunakan untuk mengkuantifikasi tingkat risiko keuangan dalam sebuah portofolio, investasi, atau organisasi dalam jangka waktu tertentu. VaR mewakili kerugian potensial maksimum dalam nilai suatu portofolio, atau investasi tertentu, dalam tingkat kepercayaan yang diberikan dan dalam rentang waktu tertentu. VaR umumnya dinyatakan sebagai jumlah dolar atau persentase, menunjukkan kerugian maksimum yang dapat diharapkan dalam periode waktu tertentu dengan tingkat kepercayaan tertentu (misalnya, tingkat kepercayaan 95% selama satu hari). Sebagai contoh, jika sebuah portofolio memiliki VaR satu hari pada tingkat kepercayaan 95% sebesar 1 juta, itu berarti ada kemungkinan 5% (atau 1 dari 20 kemungkinan) bahwa portofolio tersebut bisa kehilangan lebih dari 1 juta dalam satu hari perdagangan.


  Pada kesempatan kali ini, kita akan mengulik perhitungan VaR menggunakan bahasa pemrograman dengan beberapa metode, salah satunya adalah metode Copula. Dimana, metode Copula digunakan untuk memodelkan ketergantungan antara aset-aset dalam portofolio VaR dengan memilih fungsi Copula yang tepat, mengestimasi parameter Copula, dan memodelkan distribusi marginal dari masing-masing aset. Ini memungkinkan untuk menghasilkan simulasi yang memperhitungkan struktur ketergantungan antara aset-aset, yang dapat menghasilkan estimasi VaR yang lebih akurat. Di sisi lain, metode standar tanpa Copula hanya mempertimbangkan distribusi marginal aset tanpa memperhitungkan ketergantungan antara aset-aset tersebut, sehingga dapat menghasilkan estimasi VaR yang lebih konservatif. Pilihan antara kedua metode tergantung pada kompleksitas dan karakteristik spesifik dari portofolio investasi yang sedang dianalisis.


  Dalam kasus ini, kita menggunakan data historis dari tiga saham Indonesia yang berbeda untuk menganalisis risiko dalam sebuah portofolio investasi. Tujuan analisisnya adalah untuk mengukur tingkat risiko (dinyatakan dalam bentuk Value at Risk atau VaR) dari portofolio yang terdiri dari saham-saham tersebut. Dengan memperhitungkan ketergantungan antara saham-saham tersebut menggunakan metode Copula, kita berharap dapat memberikan estimasi yang lebih akurat tentang potensi kerugian maksimum yang mungkin terjadi dalam portofolio tersebut dengan tingkat kepercayaan tertentu. Hasil akhir yang diharapkan adalah estimasi VaR pada tingkat kepercayaan tertentu, yang akan memberikan pemahaman yang lebih baik tentang risiko investasi dalam portofolio saham Indonesia yang dipilih.

2 Library

  Berikut ini adalah paket dalam pemrograman R yang digunakan dalam melakukan analisis perhitungan pada kesempatan kali ini:

pacman::p_load(quantmod,
               copula,
               ggplot2,
               reshape2,
               tidyr,
               MASS,
               fPortfolio,
               PerfomanceAnalytics)

3 Import Data Saham

  Pada analisis kali ini, 3 saham Indonesia yang dipilih adalah PT Gudang Garam Indonesia, PT Unilever Indonesia dan PT Semen Padang Indonesia yang mana ketiga saham memilih kategori yang berbeda dalam bursa efek. Setelah memanggil data historis saham yang menggunakan fungsi dari paket quantmod yang mengambil data dari Yahoo Finance, nantinya akan diproses lanjutan dengan memilih harga closing atau penutupan di pasar saja.

saham <- c('GGRM.JK', 'UNVR.JK', 'SMGR.JK')
getSymbols(saham, from = "2020-01-01", to = Sys.Date())
## [1] "GGRM.JK" "UNVR.JK" "SMGR.JK"
close_prices <- na.omit(merge(Cl(GGRM.JK), Cl(UNVR.JK), Cl(SMGR.JK)))

head(close_prices)
##            GGRM.JK.Close UNVR.JK.Close SMGR.JK.Close
## 2020-01-02         53350          8550      12166.15
## 2020-01-03         54100          8575      12290.80
## 2020-01-06         54375          8475      12240.94
## 2020-01-07         56000          8450      12265.87
## 2020-01-08         57400          8325      11966.71
## 2020-01-09         57200          8350      12166.15

  Selanjutnya, dilakukan analisis menggunakan line chart untuk melihat pergerakan harga ketiga saham. Hal ini bertujuan untuk melihat bagaimana harga saham bergerak dan menganalisis apakah terjadi tren dari ketiga saham tersebut. Adapun untuk hasilnya adalah sebagai berikut:

ggplot(close_prices, aes(x = index(close_prices), y = GGRM.JK.Close, color = "GGRM")) +
  geom_line() +
  geom_line(aes(y = UNVR.JK.Close, color = "UNVR")) +
  geom_line(aes(y = SMGR.JK.Close, color = "SMGR")) +
  labs(title = "Pergerakan Harga Saham",
       x = "Waktu",
       y = "Harga",
       color = "Saham") +
  theme_minimal()

  Berdasarkan grafik tersebut dapat diketahui bahwa saham GGRM mengalami tren turun yang mana pada tahun 2020 harganya terus mengalami penurunan hingga tahun 2024 dan penurunan tersebut sangat signifikan. Kedua saham lainnya memiliki pergerakan harga yang stabil atau biasa disebut sideways dalam trading. Berdasarkan grafik tersebut dapat menimbulkan hipotesis bahwa saham UNVR dengan SMGR memiliki korelasi yang tinggi karena terlihat dari grafik yang serupa.


  Kemudian, dilakukan analisis nilai korelasi dari ketiga saham tersebut untuk melihat bagimana hubungan saham dan menjawab hipotesis terkait saham UNVR dengan SMGR memiliki korelasi yang tinggi. Berikut adalah langkah dan hasilnya:

correlation <- cor(close_prices)
cor_df <- as.data.frame(correlation)
cor_df <- cbind(Var1 = rownames(cor_df), cor_df)
cor_melted <- melt(cor_df, id.vars = "Var1")

ggplot(cor_melted, aes(Var1, variable, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(value, 2)), color = "black") +
  scale_fill_gradient(low = "white", high = "steelblue") +
  labs(title = "Heatmap Korelasi Antara Saham",
       x = "Saham",
       y = "Saham",
       fill = "Korelasi") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5))

  Berdasarkan hasil di atas, dapat disimpulkan bahwa ternyata saham GGRM dan UNVR yang memiliki korelasi kuat dibandingkan dengan pembanding saham SMGR yang artinya ketika posisi kita sebagai trader atau investor lebih baik tidak memilih GGRM dan UNVR dalam portofolio secara bersamaan karena korelasinya cukup tinggi.

4 Metode Copula

  Dalam metode Copula untuk analisis portofolio yang terdiri dari tiga saham Indonesia, nantinya akan mengadopsi pendekatan yang memungkinkan untuk memodelkan hubungan antara aset-aset tersebut dengan lebih akurat. Dengan menggunakan data historis saham-saham tersebut, kita akan memilih dan mengestimasi parameter Copula yang sesuai untuk merepresentasikan struktur ketergantungan antara ketiga saham tersebut. Melalui pendekatan ini, kita bertujuan untuk menyediakan estimasi VaR yang lebih tepat dan informatif, yang dapat membantu dalam pengambilan keputusan investasi dengan memperhitungkan interaksi antara saham-saham tersebut dalam portofolio. Dengan demikian, pendekatan Copula memberikan kesempatan untuk memahami lebih dalam tentang bagaimana fluktuasi harga aset-aset tersebut berhubungan satu sama lain dan dampaknya terhadap risiko portofolio secara keseluruhan.


  Metode copula adalah alat statistik yang memungkinkan kita untuk memahami dan memodelkan hubungan antara dua atau lebih variabel secara terpisah dari distribusi individu dari setiap variabel tersebut. Dengan menggunakan copula, kita dapat mengidentifikasi dan mengukur ketergantungan antara variabel-variabel ini tanpa memperhatikan bentuk distribusi masing-masing variabel. Hal ini memungkinkan kita untuk membuat prediksi yang lebih akurat tentang hubungan antara variabel dalam berbagai konteks, dari keuangan hingga ilmu lingkungan, sehingga memfasilitasi pengambilan keputusan yang lebih baik.

4.1 Menghitung Nilai Return

  Proses di bawah ini dilakukan untuk menghitung return harian dari setiap saham dalam portofolio, kemudian menggabungkan hasilnya ke dalam sebuah data frame. Proses ini bertujuan untuk menganalisis kinerja historis dari setiap saham dalam portofolio, serta hubungannya dengan portofolio secara keseluruhan. Dengan memperoleh data return harian, investor dapat mengevaluasi tingkat risiko dan pengembalian yang terkait dengan masing-masing saham dan portofolio secara keseluruhan. Hal ini penting untuk menginformasikan pengambilan keputusan investasi yang lebih baik, termasuk alokasi aset dan manajemen risiko.

returns <- NULL
for (i in 1:length(saham)) {
  returns <- cbind(returns, (Cl(get(saham[i])) / lag(Cl(get(saham[i]))) - 1))
}

returns_df <- data.frame(date = index(returns), returns)
rownames(returns_df) <- NULL

4.2 Missing Values

  Missing values atau nilai yang hilang adalah nilai yang absen atau tidak tercatat untuk suatu variabel dalam data. Ketika melakukan analisis data, penting untuk menangani missing values karena mereka dapat menyebabkan bias atau kesalahan dalam hasil analisis. Misalnya, jika missing values dibiarkan tanpa penanganan yang tepat, dapat mengganggu statistik deskriptif seperti mean atau standard deviation, serta menghasilkan kesalahan dalam model prediktif. Oleh karena itu, untuk memperoleh hasil analisis yang akurat dan dapat diandalkan, penting untuk menangani missing values dengan cara menghapusnya, menggantinya dengan nilai yang sesuai (misalnya, mean atau median), atau menggunakan metode imputasi yang lebih canggih. Dengan demikian, penanganan missing values memungkinkan analisis data dilakukan dengan lebih konsisten dan dapat diandalkan, sehingga hasilnya dapat memberikan wawasan yang lebih baik dan mendukung pengambilan keputusan yang lebih baik pula.

returns_df <- na.omit(returns_df)

4.3 Menghitung Portofolio

  Dalam langkah selanjutnya akan dilakukan proses perhitungan kinerja portofolio investasi. Pertama, dilakukan pengasumsian bahwa bobot (weights) untuk setiap saham dalam portofolio sama. Hal ini dilakukan untuk memperoleh distribusi risiko yang seimbang di antara saham-saham tersebut. Kemudian, kalkulasi return portofolio dilakukan dengan mengalikan masing-masing return harian dari saham-saham dalam portofolio dengan bobotnya masing-masing, kemudian menjumlahkan hasilnya. Ini memberikan gambaran tentang kinerja portofolio secara keseluruhan. Selanjutnya, nilai portofolio dihitung dengan mengalikan nilai portofolio awal (initial_portfolio) dengan kumulatif dari return portofolio. Langkah ini memberikan perkiraan tentang nilai portofolio dari waktu ke waktu berdasarkan return yang diperoleh. Akhirnya, return portofolio diurutkan (sorted) untuk memfasilitasi perhitungan Value at Risk (VaR) atau untuk analisis lainnya yang memerlukan rangking dari nilai-nilai portofolio tersebut. Proses ini dilakukan untuk memahami dan mengukur kinerja portofolio investasi, serta untuk menginformasikan pengambilan keputusan investasi yang lebih baik.

#Menentukan Bobot
weights <- rep(1/length(saham), length(saham))

portfolio_returns <- rowSums(returns_df[, -1] * weights)

initial_portfolio <- 1000000
portfolio_value <- initial_portfolio * cumprod(1 + portfolio_returns)

sorted_returns <- sort(portfolio_value)

4.4 Menghitung Value at Risk

  Value at Risk (VaR) adalah suatu metode statistik yang digunakan untuk mengukur risiko keuangan dengan memperkirakan kerugian maksimum yang mungkin terjadi pada suatu portofolio investasi atau bisnis dalam suatu periode waktu tertentu, dengan tingkat kepercayaan tertentu. Proses perhitungan VaR melibatkan analisis data historis tentang fluktuasi harga aset atau variabel keuangan lainnya, serta tingkat korelasinya, untuk mengidentifikasi tingkat risiko yang mungkin dihadapi. Dengan menggunakan VaR, investor dapat memahami dan mengukur seberapa besar risiko yang mereka ambil dalam portofolio mereka, serta membuat keputusan investasi yang lebih baik berdasarkan informasi tentang potensi kerugian. VaR juga sering digunakan oleh lembaga keuangan dan regulator untuk mengevaluasi tingkat risiko dalam sistem keuangan secara keseluruhan dan untuk mengukur kecukupan modal. Dengan demikian, perhitungan VaR merupakan alat penting dalam manajemen risiko dan pengambilan keputusan keuangan.

confidence_level <- 0.95
var_percentile <- 1 - confidence_level
var_index <- round(var_percentile * length(sorted_returns))
VaR <- sorted_returns[var_index]

VaR
##      993 
## 466652.2

  Berdasarkan hasil tersebut diketahui bahwa nilai dari VaR adalah sebesar 467311.9 yang berarti dengan tingkat kepercayaan 95%, portofolio investasi memiliki kemungkinan sebesar 5% untuk mengalami kerugian melebihi jumlah tersebut dalam satu periode waktu tertentu, biasanya satu hari. Artinya, dalam situasi normal, kemungkinan kerugian portofolio tidak akan melebihi nilai tersebut. Namun, perlu dicatat bahwa VaR memiliki asumsi dan keterbatasan, sehingga hasil ini sebaiknya digunakan bersama dengan metode pengukuran risiko lainnya untuk mendapatkan gambaran yang lebih lengkap tentang risiko portofolio investasi.

5 Perhitungan VaR Dengan Metode Lain

  Dalam kasus selanjutnya, kita melakukan analisis portofolio investasi yang terdiri dari beberapa aset keuangan, termasuk saham (AAPL, GOOG, MSFT), obligasi (^TNX), dan komoditas (GLD). Langkah-langkah yang telah dilakukan antara lain mengambil data historis harga menggunakan fungsi getSymbols dari paket quantmod, mengekstrak harga penutupan disesuaikan (adjusted closing prices) untuk setiap aset, menginterpolasi nilai yang hilang, dan menghitung return harian untuk setiap aset.


Kemudian, kita telah menentukan bobot portofolio dan menghitung return portofolio menggunakan bobot tersebut. Sekarang, untuk melengkapi analisis risiko portofolio, kita akan melanjutkan dengan menghitung Value at Risk (VaR) untuk portofolio. Langkah pertama yang perlu dilakukan adalah menghitung volatilitas portofolio menggunakan standar deviasi dari return portofolio. Ini memberikan kita gambaran tentang seberapa bervariasi return portofolio dari waktu ke waktu.

5.1 Import Data

  Dalam proses awal, kita menggunakan paket quantmod dalam bahasa R untuk mengambil data historis harga dari berbagai instrumen keuangan seperti saham, obligasi, dan komoditas. Kita menentukan daftar simbol ticker untuk aset-aset yang ingin kita ambil datanya, termasuk saham-saham seperti AAPL (Apple), GOOG (Google), dan MSFT (Microsoft), serta instrumen lain seperti obligasi (^TNX) dan komoditas (GLD). Selanjutnya, kita menentukan rentang tanggal (start_date dan end_date) untuk mendefinisikan periode waktu dari mana kita ingin mengambil data historis harga. Setelah itu, menggunakan fungsi getSymbols, kita mengambil data historis harga untuk setiap simbol ticker dari sumber data Yahoo Finance, mulai dari tanggal awal hingga tanggal terakhir yang ditentukan. Prosedur ini memberikan kita akses ke data historis harga yang diperlukan untuk analisis lebih lanjut terkait investasi dan risiko keuangan.

# Define a list of ticker symbols for the datasets you want to fetch
symbols <- c("AAPL", # stock market
             "GOOG", # stock market
             "MSFT", # stock market
             "^TNX", # bond
             "GLD")  # commodity

# Set the start and end dates for historical data retrieval
start_date <- "2023-01-01"
end_date <- Sys.Date()  # Current date

# Fetch historical price data
getSymbols(symbols, src = "yahoo", from = start_date, to = end_date)
## Warning: ^TNX contains missing values. Some functions will not work if objects
## contain missing values in the middle of the series. Consider using na.omit(),
## na.approx(), na.fill(), etc to remove or replace them.
## [1] "AAPL" "GOOG" "MSFT" "TNX"  "GLD"
# Extract adjusted closing prices for each asset
prices <- merge(Ad(AAPL), Ad(MSFT), Ad(GOOG), Ad(TNX),Ad(GLD))

# rename column names
colnames(prices) <- symbols

# Interpolate missing values
prices <- na.approx(prices)

# print the result
head(prices)
##                AAPL     GOOG  MSFT  ^TNX    GLD
## 2023-01-03 124.2163 237.0360 89.70 3.793 171.06
## 2023-01-04 125.4975 226.6673 88.71 3.709 172.67
## 2023-01-05 124.1666 219.9494 86.77 3.720 170.52
## 2023-01-06 128.7352 222.5416 88.16 3.569 173.71
## 2023-01-09 129.2616 224.7083 88.80 3.517 174.10
## 2023-01-10 129.8377 226.4200 89.24 3.621 174.74

5.2 Menghitung Keuntungan Harian

  Selanjutnya dilakukan perhitungan return harian untuk setiap aset keuangan dalam portofolio. Pertama, menggunakan fungsi ROC (Rate of Change) dari paket quantmod, kita menghitung perubahan persentase dalam harga aset dari hari ke hari. Parameter type = “discrete” menunjukkan bahwa kita ingin menghitung return secara diskrit, yaitu perubahan harga dari hari ke hari. Setelah itu, menggunakan fungsi na.omit, kita menghapus baris yang mengandung nilai yang hilang dari data return. Hal ini penting karena data return yang hilang dapat mengganggu analisis kita. Akhirnya, kita menampilkan beberapa baris pertama dari data return tersebut untuk memberikan gambaran awal tentang kinerja historis setiap aset keuangan dalam portofolio. Dengan memperoleh data return harian ini, investor dapat menganalisis kinerja relatif dari setiap aset, serta mengukur dan mengelola risiko portofolio mereka dengan lebih baik.

# Calculate daily returns for each asset
asset_returns <- na.omit(ROC(prices, type = "discrete"))

# Display the first few rows of the returns data
head(asset_returns, 5)
##                    AAPL         GOOG         MSFT         ^TNX          GLD
## 2023-01-04  0.010314239 -0.043743199 -0.011036766 -0.022146025  0.009411906
## 2023-01-05 -0.010604644 -0.029637692 -0.021869039  0.002965737 -0.012451462
## 2023-01-06  0.036794130  0.011785270  0.016019443 -0.040591404  0.018707497
## 2023-01-09  0.004088994  0.009736237  0.007259521 -0.014569920  0.002245118
## 2023-01-10  0.004456228  0.007617298  0.004954896  0.029570683  0.003676045

5.3 Bobot Aset

  Dalam proses selanjutnya, kita menggunakan paket fPortfolio dalam bahasa R untuk melakukan analisis portofolio investasi. Pertama, kita memuat library tersebut ke dalam lingkungan kerja menggunakan fungsi library(fPortfolio). Selanjutnya, kita menentukan bobot portofolio yang akan diterapkan pada masing-masing aset keuangan dalam portofolio. Bobot portofolio menggambarkan proporsi relatif dari setiap aset dalam portofolio, dan dalam kasus ini, kita memberikan bobot yang sama (0.2 atau 20%) untuk setiap aset. Penting untuk dicatat bahwa bobot portofolio harus berjumlah satu (sums to 1) untuk memastikan bahwa total alokasi portofolio adalah 100%. Dengan menentukan bobot portofolio, investor dapat merancang strategi alokasi aset yang sesuai dengan tujuan investasi dan toleransi risiko mereka.

portfolio_weights <- c(0.2, 0.2, 0.2,0.2,0.2)  # Example weights (sums to 1)

5.4 Menghitung Return Portfolio

  Pada tahap ini, kita melakukan perhitungan return portofolio dengan menggunakan data return harian untuk setiap aset keuangan yang telah kita hitung sebelumnya. Pertama, kita menghapus indeks kolom dari data return harian menggunakan perintah colnames(asset_returns) <- NULL. Langkah ini dilakukan untuk menghilangkan indeks yang mungkin telah ada sebelumnya, sehingga kita dapat melakukan perhitungan dengan lebih efisien. Selanjutnya, kita menghitung return portofolio dengan cara mengalikan data return harian untuk setiap aset dengan bobot portofolio yang telah ditentukan sebelumnya, kemudian menjumlahkan hasilnya. Hal ini memberikan kita return portofolio yang dihitung berdasarkan bobot yang telah ditentukan, yang mencerminkan kinerja keseluruhan portofolio dengan mempertimbangkan kontribusi masing-masing aset. Dengan memperoleh return portofolio ini, investor dapat memperoleh gambaran tentang kinerja portofolio investasi mereka.

colnames(asset_returns) <- NULL
# Calculate portfolio returns
portfolio_returns <- colSums(asset_returns* portfolio_weights) / sum(portfolio_weights)

5.5 Estimasi Voltalitas

  Kemudian digunakanpaket PerformanceAnalytics dalam bahasa R untuk menghitung volatilitas portofolio. Volatilitas portofolio mengukur tingkat fluktuasi atau variabilitas dari return portofolio dari waktu ke waktu. Dengan memperoleh nilai volatilitas, investor dapat memahami seberapa besar risiko yang terkait dengan investasi mereka. Dalam kasus ini, kita menggunakan fungsi StdDev dari paket PerformanceAnalytics untuk menghitung standar deviasi dari return portofolio yang telah dihitung sebelumnya. Standar deviasi adalah ukuran statistik yang mengukur sebaran atau penyebaran data dari nilai rata-rata. Dalam konteks ini, standar deviasi return portofolio memberikan gambaran tentang seberapa fluktuatif kinerja portofolio tersebut. Semakin tinggi nilai standar deviasi, semakin tinggi volatilitas dan risiko portofolio. Dengan demikian, nilai portfolio_volatility yang dihasilkan memberikan informasi kunci bagi investor untuk mengukur dan mengelola risiko portofolio mereka.

portfolio_volatility <- sd(portfolio_returns)
portfolio_volatility
## [1] 0.03459949

5.6 Menghitung Nilai VaR

sigma <- portfolio_volatility

confidence_level <- 0.95

if (confidence_level == 0.95) {
  z_score <- qnorm(1 - confidence_level)
} else if (confidence_level == 0.99) {
  z_score <- qnorm(1 - confidence_level)
} else {
  stop("Tingkat kepercayaan tidak valid. Harus 0.95 atau 0.99.")
}

portfolio_value <- 1000000

VaR <- z_score * sigma * portfolio_value

VaR
## [1] -56911.09

  Berdasarkan hasil analisis perhitungan VaR, nilai yang didapatkan sebesar -28965.61 menunjukkan jumlah kerugian maksimum yang mungkin dialami oleh portofolio investasi dengan tingkat kepercayaan tertentu, dalam satuan yang sama dengan standar deviasi return portofolio. Dalam konteks ini, nilai negatif menandakan bahwa terdapat kemungkinan kerugian yang signifikan dalam portofolio, yang menunjukkan bahwa portofolio memiliki risiko yang tinggi. Dengan kata lain, hasil VaR ini mengindikasikan bahwa pada tingkat kepercayaan yang dipilih, portofolio memiliki potensi kerugian yang cukup besar. Oleh karena itu, investor perlu memperhitungkan tingkat risiko ini dalam pengambilan keputusan investasi dan mempertimbangkan strategi pengelolaan risiko yang sesuai.