การคำนวณ VaR และ ES สำหรับการแจกแจงปกติ
ฟังก์ชันมาตรฐาน qnorm() ใช้คำนวณควอนไทล์ของการแจกแจงปกติจากความน่าจะเป็น p ค่าเฉลี่ย และส่วนเบี่ยงเบนมาตรฐาน จึงสามารถนำมาคำนวณ value-at-risk (VaR) ได้ ส่วนฟังก์ชัน ESnorm() จากแพ็กเกจ QRM ใช้คำนวณ expected shortfall (ES) สำหรับการแจกแจงปกติจากความน่าจะเป็น p พารามิเตอร์ตำแหน่ง mu และพารามิเตอร์สเกล sd:
qnorm(p, mean = 0, sd = 1)
ESnorm(p, mu = 0, sd = 1)
ค่า p ที่นิยมใช้ ได้แก่ 0.95 และ 0.99 ซึ่งสอดคล้องกับระดับความเชื่อมั่น 95% และ 99% ตามลำดับ
ในแบบฝึกหัดนี้ จะคำนวณและแสดงผล VaR และ ES สำหรับการแจกแจงปกติ \(N(\mu, \sigma^2)\) ที่มีค่าเฉลี่ย \(\mu\) และส่วนเบี่ยงเบนมาตรฐาน \(\sigma\) พร้อมกันนี้จะได้ใช้ฟังก์ชันใหม่สำหรับการสร้างลำดับค่าและการเพิ่มเส้นตรงลงในกราฟ อ่านรายละเอียดอาร์กิวเมนต์ได้โดยพิมพ์ ?seq และ ?abline ในคอนโซล
ตัวแปร mu และ sigma เก็บค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานโดยประมาณของผลตอบแทนดัชนี Dow Jones ในช่วงปี 2008-2009 ซึ่งอยู่ใน djx โดยทั้งสามออบเจกต์นี้พร้อมใช้งานใน workspace แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Quantitative Risk Management in R
คำแนะนำการฝึกหัด
- กำหนดค่าใน
seq()เพื่อสร้างลำดับค่า x จำนวน 100 ค่า ตั้งแต่ \(-4\sigma\) ถึง \(4\sigma\) แล้วกำหนดให้กับxvals - กำหนดค่าใน
dnorm()เพื่อคำนวณความหนาแน่นของการแจกแจง \(N(\mu, \sigma^2)\) ที่xvalsแล้วกำหนดให้กับndens - พล็อต
ndensเทียบกับxvalsโดยใช้type = "l" - ใช้
qnorm()และESnorm()คำนวณ VaR 99% และ ES 99% ของการแจกแจง แล้วกำหนดให้กับVaR99และES99ตามลำดับ - กำหนดค่าใน
abline()เพื่อสร้างเส้นแนวตั้งสำหรับVaR99และES99ในสีแดงและสีเขียว ตามลำดับ
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Make a sequence of 100 x-values going from -4*sigma to 4*sigma
___ <- seq(from = -4*sigma, to = 4*sigma, length.out = ___)
# Compute the density of a N(mu, sigma^2) distribution at xvals
___ <- dnorm(___, mean = ___, sd = ___)
# Plot ndens against xvals
# Compute the 99% VaR and 99% ES of a N(mu, sigma^2) distribution
___ <- qnorm(___, mean = ___, sd = ___)
___ <- ESnorm(___, mu = ___, sd = ___)
# Draw vertical lines at VaR99 and ES99 in red and green
abline(v = ___, col = "red")
abline(v = ___, col = "green")