अनुभवजन्य डेटा से यादृच्छिक बहुभिन्नरूपी मान उत्पन्न करें


10

मैं आंशिक रूप से सहसंबद्ध रिटर्न के साथ कई संपत्तियों के मूल्यांकन के लिए मोंटे कार्लो फ़ंक्शन पर काम कर रहा हूं। वर्तमान में, मैं सिर्फ rmvnorm()आर में फ़ंक्शन के लिए एक सहसंयोजक मैट्रिक्स उत्पन्न करता हूं और उत्पन्न करता हूं (यादृच्छिक मूल्यों को सहसंबद्ध बनाता है ।)

हालांकि, किसी परिसंपत्ति के रिटर्न के वितरण को देखते हुए, इसे सामान्य रूप से वितरित नहीं किया जाता है।

यह वास्तव में एक दो भाग का प्रश्न है:
1) मैं किसी प्रकार के पीडीएफ या सीडीएफ का अनुमान कैसे लगा सकता हूं जब मेरे पास सभी ज्ञात वितरण के बिना कुछ वास्तविक दुनिया डेटा है?

2) मैं rmvnorm जैसे सहसंबद्ध मूल्य कैसे उत्पन्न कर सकता हूं, लेकिन इस अज्ञात (और गैर-सामान्य) वितरण के लिए?

धन्यवाद!


वितरण किसी भी ज्ञात वितरण के लायक नहीं दिखाई देते हैं। मुझे लगता है कि एक पैरामीट्रिक मान लेना और फिर मोंटे कार्लो अनुमान के लिए इसका उपयोग करना बहुत खतरनाक होगा।

क्या कुछ प्रकार के बूटस्ट्रैप या "अनुभवजन्य मोंटे कार्लो" विधि नहीं है जो मैं देख सकता हूं?

जवाबों:


2

(1) यह सीडीएफ है जिसे आपको अपनी सिम्युलेटेड टाइम-सीरीज़ जेनरेट करनी होगी। इसे बनाने के लिए, पहले अपने मूल्य परिवर्तन / रिटर्न को हिस्टोग्राम करें। अपने बाएं सबसे अधिक आबादी वाले बिन के साथ शुरू होने वाली बिन आबादी का संचयी योग लें। कुल बिन आबादी द्वारा विभाजित करके अपने नए कार्य को सामान्य करें। आपके पास जो कुछ बचा है वह सीडीएफ है। यहाँ कुछ संख्यात्मक कोड है जो चाल करता है:

# 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

(२) सहसंबद्ध उठा-पटक उत्पन्न करने के लिए, एक कोपला का उपयोग करें। सहसंबद्ध समय श्रृंखला बनाने पर मेरे पिछले प्रश्न का यह उत्तर देखें ।


4

पहले प्रश्न के संबंध में, आप अपने डेटा को फिर से शुरू करने पर विचार कर सकते हैं। आपके डेटा को समय के साथ सहसंबद्ध (समकालीन रूप से सहसंबद्ध के बजाय) के मामले में एक समस्या होगी, उस स्थिति में आपको ब्लॉक बूटस्ट्रैप जैसी किसी चीज़ की आवश्यकता होगी। लेकिन रिटर्न डेटा के लिए, एक साधारण बूटस्ट्रैप शायद ठीक है।

मुझे लगता है कि दूसरे प्रश्न का उत्तर लक्ष्य वितरण पर बहुत निर्भर है।


3

पहले प्रश्न का उत्तर यह है कि आप एक मॉडल बनाते हैं। आपके मामले में इसका मतलब है कि वितरण चुनना और उसके मापदंडों का अनुमान लगाना।

जब आपके पास वितरण होता है तो आप गिब्स या मेट्रोपोलिस एल्गोरिदम का उपयोग करके इसका नमूना ले सकते हैं।

साइड नोट पर, क्या आपको वास्तव में इस वितरण से नमूना लेने की आवश्यकता है? आमतौर पर ब्याज वितरण की कुछ विशेषता में होता है। आप इसे बूटस्ट्रैप के माध्यम से अनुभवजन्य वितरण का उपयोग करके अनुमान लगा सकते हैं, या फिर इस विशेषता के लिए एक मॉडल बना सकते हैं।


मैं दी गई संपत्ति के लिए संभावित रिटर्न का नमूना लेने में दिलचस्पी रखता हूं। चूंकि वितरण सामान्य नहीं है और परिसंपत्तियां समय के साथ सहसंबद्ध हैं, जिससे वितरण चुनने में एक चुनौती पैदा होती है। मैं पोर्टफोलियो अनुकूलन के लिए मोंटे कार्लो विधियों की खोज कर रहा हूं।
नूह

1
@ नोहा, क्या आपने विभिन्न स्टोचस्टिक अस्थिरता मॉडल, जैसे कि GARCH पर विचार किया है?
mpiktas

मैंने GARCH मॉडल्स को देखा है। हालाँकि, GARCH इस समस्या का समाधान नहीं करेगा। मैं कई समय श्रृंखला से सहसंबद्ध यादृच्छिक नमूने उत्पन्न कर रहा हूँ। रैंडम मल्टी-वैरिएट नॉर्मल सैंपल काम करते हैं, लेकिन उन्हें इस धारणा की आवश्यकता होती है कि रिटर्न सामान्य रूप से वितरित किया जाता है और इस मामले में, वे नहीं हैं।
नूह

1
@ नो, कैसे बहुभिन्नरूपी GARCH के बारे में? प्रत्येक व्यक्तिगत श्रृंखला गैर-विकर्ण सहसंयोजक मैट्रिक्स के साथ बहुभिन्नरूपी नवाचारों के साथ GARCH है। फिर रिटर्न का सामान्य वितरण नहीं होगा, लेकिन वे सहसंबद्ध होंगे।
mpiktas

3

मैं @mpiktas के साथ हूं, मुझे भी लगता है कि आपको एक मॉडल की जरूरत है।

मुझे लगता है कि यहां की मानक विधि विभिन्न संपत्तियों के बीच निर्भरता संरचना को पकड़ने और विभिन्न संपत्तियों के लिए तिरछा-सामान्य- या टी-वितरित सीमांत वितरण का उपयोग करने के लिए एक कोपुला का अनुमान लगाने के लिए होगी। यह आपको एक बहुत ही सामान्य मॉडल वर्ग देता है (अधिक सामान्य है कि उदाहरण के लिए एक बहुभिन्नरूपी टी-वितरण) जो कि आपके कार्य के लिए बहुत मानक है (जैसे मुझे लगता है कि बेसल II को वित्तीय संस्थानों को अपने वीएआर का अनुमान लगाने के लिए कोप्युला-विधियों का उपयोग करने की आवश्यकता है) । copulaआर के लिए एक पैकेज है।


1

ecdf()फ़ंक्शन का उपयोग करके R ... का उपयोग करते हुए प्रश्न के पहले भाग का संभावित उत्तर

# 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
यह केवल डेटा पर लागू नहीं होता है।
स्टीफन लॉरेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.