Hasilkan nilai multivarian acak dari data empiris


10

Saya sedang mengerjakan fungsi Monte Carlo untuk menilai beberapa aset dengan pengembalian sebagian berkorelasi. Saat ini, saya hanya menghasilkan matriks kovarians dan memberi makan rmvnorm()fungsi dalam R. (Menghasilkan nilai acak berkorelasi.)

Namun, melihat distribusi pengembalian suatu aset, biasanya tidak didistribusikan.

Ini benar-benar pertanyaan dua bagian:
1) Bagaimana saya bisa memperkirakan beberapa jenis PDF atau CDF ketika semua yang saya miliki adalah beberapa data dunia nyata tanpa distribusi yang diketahui?

2) Bagaimana saya bisa menghasilkan nilai berkorelasi seperti rmvnorm, tetapi untuk distribusi yang tidak diketahui ini (dan tidak normal)?

Terima kasih!


Distribusi tampaknya tidak sesuai dengan distribusi yang dikenal. Saya pikir akan sangat berbahaya untuk mengasumsikan parametrik dan kemudian menggunakannya untuk estimasi monte carlo.

Apakah tidak ada semacam metode bootstrap atau "empirical monte carlo" yang bisa saya lihat?

Jawaban:


2

(1) Ini adalah CDF yang Anda perlukan untuk menghasilkan rangkaian waktu yang disimulasikan. Untuk membangunnya, pertama histogram perubahan / pengembalian harga Anda. Ambil jumlah kumulatif populasi bin yang dimulai dengan nampan terpakai paling kiri. Normalisasi fungsi baru Anda dengan membaginya dengan total populasi bin. Yang tersisa hanyalah CDF. Berikut adalah beberapa kode numpy yang melakukan trik:

# Make a histogram of price changes

counts,bin_edges = np.histogram(deltas,numbins,normed=False) # numpy histogram

# Make a CDF of the price changes

n_counts,bin_edges2 = np.histogram(deltas,numbins,normed=True)
cdf = np.cumsum(n_counts)  # cdf not normalized, despite above
scale = 1.0/cdf[-1]
ncdf = scale * cdf

(2) Untuk menghasilkan pick berkorelasi, gunakan copula. Lihat jawaban ini untuk pertanyaan saya sebelumnya tentang menghasilkan deret waktu yang berkorelasi.


4

Mengenai pertanyaan pertama, Anda dapat mempertimbangkan melakukan resampling data Anda. Akan ada masalah jika data Anda berkorelasi dari waktu ke waktu (bukan berkorelasi serentak), dalam hal ini Anda akan membutuhkan sesuatu seperti blok bootstrap. Tetapi untuk mengembalikan data, bootstrap sederhana mungkin baik-baik saja.

Saya kira jawaban untuk pertanyaan kedua sangat tergantung pada target distribusi.


3

Jawaban untuk pertanyaan pertama adalah Anda membuat model. Dalam kasus Anda ini berarti memilih distribusi dan memperkirakan parameternya.

Ketika Anda memiliki distribusi, Anda dapat mengambil sampelnya menggunakan algoritma Gibbs atau Metropolis.

Di samping catatan, apakah Anda benar-benar perlu mengambil sampel dari distribusi ini? Biasanya bunga dalam beberapa karakteristik distribusi. Anda dapat memperkirakannya menggunakan distribusi empiris melalui bootstrap, atau sekali lagi membangun model untuk karakteristik ini.


Saya tertarik untuk mengambil sampel kemungkinan pengembalian untuk aset tertentu. Karena distribusi tidak normal DAN aset berkorelasi dari waktu ke waktu, itu menciptakan tantangan dalam memilih distribusi. Saya sedang mengeksplorasi metode monte carlo untuk optimasi portofolio.
Noah

1
@Noah, sudahkah Anda mempertimbangkan berbagai model volatilitas stokastik, seperti GARCH?
mpiktas

Saya telah melihat model GARCH. Namun, GARCH tidak akan menyelesaikan masalah ini. Saya sedang melihat pembuatan sampel acak berkorelasi dari beberapa seri waktu. Sampel norma multi-variate acak berfungsi, tetapi mereka memerlukan asumsi bahwa pengembalian didistribusikan secara normal dan dalam kasus ini, tidak.
Noah

1
@Noah, bagaimana dengan GARCH multivarian? Setiap seri individual adalah GARCH dengan inovasi dari multivariate normal dengan matriks kovarians non-diagonal. Maka pengembalian tidak akan memiliki distribusi normal, tetapi mereka akan dikorelasikan.
mpiktas

3

Saya dengan @mpikta karena saya juga berpikir Anda memerlukan model.

Saya pikir metode standar di sini adalah untuk memperkirakan kopula untuk menangkap struktur ketergantungan antara aset yang berbeda dan menggunakan misalnya distribusi marjinal skew-normal-atau t-didistribusikan untuk aset yang berbeda. Itu memberi Anda kelas model yang sangat umum (lebih umum yang mengasumsikan misalnya multivariat t-distribusi) yang cukup banyak standar untuk jenis tugas Anda (misalnya saya pikir Basel II membutuhkan lembaga keuangan untuk menggunakan metode kopula untuk memperkirakan VaR mereka) . Ada copulapaket untuk R.


1

Sebuah kemungkinan jawaban untuk bagian pertama dari pertanyaan menggunakan R ... menggunakan ecdf()fungsi

# simulate some data...
N <- 1000
fdata <- c( rnorm(N %/% 2, mean=14), rnorm(N %/% 2, mean=35))

# here's the Empirical CDF of that data...
E1 <- ecdf(fdata)
plot(E1)

# now simulate 1000 numbers from this ECDF...
ns <- 1000
ans <- as.numeric(quantile(E1, runif(ns)))
hist(ans,pro=T,nclass=113,col='wheat2')

1
Ini hanya berlaku untuk data univariat.
Stéphane Laurent
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.