यादृच्छिक ऑटो सहसंबद्ध बाइनरी टाइम श्रृंखला डेटा कैसे उत्पन्न करें?


15

मैं बाइनरी टाइम श्रृंखला कैसे उत्पन्न कर सकता हूं:

  1. 1 अवलोकन करने की औसत संभावना निर्दिष्ट है (5% कहो);
  2. समय में 1 अवलोकन की सशर्त संभावना पर मान दिया टी - 1 (कहते हैं कि 30% है, तो टी - 1 मान 1 था)?tt1t1

जवाबों:


17

दो-राज्य मार्कोव श्रृंखला का उपयोग करें।

राज्यों 0 और 1 कहा जाता है, तो श्रृंखला एक 2x2 मैट्रिक्स द्वारा दर्शाया जा सकता राज्यों के बीच संक्रमण संभावनाओं दे, जहां पी मैं j राज्य से हिलाने की संभावना है मैं राज्य के लिए जे । इस मैट्रिक्स में, प्रत्येक पंक्ति को 1.0 का योग करना चाहिए।PPijमैंजे

कथन 2 से, हमारे पास , और सरल संरक्षण तब P 10 = 0.7 कहता हैP11=0.3P10=0.7

कथन 1 से, आप दीर्घकालिक संभावना (जिसे संतुलन या स्थिर-अवस्था भी कहते हैं) । यह कहते हैं पी 1 = 0.05 = 0.3 पी 1 + पी 01 ( 1 - पी 1 ) सुलझाने देता पी 01 = .०३,६८,४२१ और एक संक्रमण मैट्रिक्स पी = ( .९,६३,१५८P1=0.05

P1=0.05=0.3P1+P01(1P1)
P01=0.0368421
P=(0.9631580.03684210.70.3)

(आप इसे उच्च शक्ति तक बढ़ाकर शुद्धता के लिए अपने ट्रांसस्टेशन मैट्रिक्स की जांच कर सकते हैं - इस मामले में 14 काम करता है - परिणाम की प्रत्येक पंक्ति समान स्थिर राज्य संभावनाएं देती है)

अब अपने यादृच्छिक संख्या कार्यक्रम में, बेतरतीब ढंग से राज्य 0 या 1 को चुनना शुरू करें; यह चयन करता है कि आप की किस पंक्ति का उपयोग कर रहे हैं। फिर अगले राज्य को निर्धारित करने के लिए एक समान यादृच्छिक संख्या का उपयोग करें। उस नंबर को बाहर थूकें, कुल्ला करें, आवश्यकतानुसार दोहराएं।P


दिलचस्प समाधान! आप शायद आर में कुछ नमूना कोड है? एंटोन और?
user333

@ माइक क्या आप अपना खाता पंजीकृत कर सकते हैं? आप काफी सक्रिय उपयोगकर्ता हैं और हमें इसे बार-बार मर्ज करना होगा। प्रक्रिया काफी आसान है; बस आँकड़े

धन्यवाद। मैं मार्कोव श्रृंखला (संक्रमण मैट्रिक्स) को कैसे डेटा दे सकता हूं? क्या ऐसा करने के लिए एक आर फ़ंक्शन है?
user333

6

मैंने R में कोडिंग @Mike Anderson जवाब पर एक दरार ले ली। मैं यह पता नहीं लगा सका कि इसे नीलमणि का उपयोग कैसे करना है, इसलिए मैंने एक लूप का उपयोग किया। मैंने अधिक दिलचस्प परिणाम प्राप्त करने के लिए थोड़ा और बदल दिया, और मैंने राज्यों का प्रतिनिधित्व करने के लिए 'ए' और 'बी' का इस्तेमाल किया। आप क्या सोचते हैं मुझे बताओ।

set.seed(1234)
TransitionMatrix <- data.frame(A=c(0.9,0.7),B=c(0.1,0.3),row.names=c('A','B'))
Series <- c('A',rep(NA,99))
i <- 2
while (i <= length(Series)) {
    Series[i] <- ifelse(TransitionMatrix[Series[i-1],'A']>=runif(1),'A','B')
    i <- i+1
}
Series <- ifelse(Series=='A',1,0)
> Series
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
 [38] 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [75] 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1

/ संपादित करें: पॉल की टिप्पणी के जवाब में, यहाँ एक और अधिक सुंदर सूत्रीकरण है

set.seed(1234)

createSeries <- function(n, TransitionMatrix){
  stopifnot(is.matrix(TransitionMatrix))
  stopifnot(n>0)

  Series <- c(1,rep(NA,n-1))
  random <- runif(n-1)
  for (i in 2:length(Series)){
    Series[i] <- TransitionMatrix[Series[i-1]+1,1] >= random[i-1]
  }

  return(Series)
}

createSeries(100, matrix(c(0.9,0.7,0.1,0.3), ncol=2))

मैंने मूल कोड लिखा था जब मैं आर सीख रहा था, इसलिए मुझे थोड़ा सुस्त कर दिया। ;-)

यहां बताया गया है कि आप श्रृंखला को देखते हुए ट्रांज़िशन मैट्रिक्स का अनुमान कैसे लगाएंगे:

Series <- createSeries(100000, matrix(c(0.9,0.7,0.1,0.3), ncol=2))
estimateTransMatrix <- function(Series){
  require(quantmod)
  out <- table(Lag(Series), Series)
  return(out/rowSums(out))
}
estimateTransMatrix(Series)

   Series
            0         1
  0 0.1005085 0.8994915
  1 0.2994029 0.7005971

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


महान! मैं जल्द से जल्द बेचैन हो जाऊंगा ... काफी अच्छा लग रहा है ....
user333

क्या उलटा करना संभव है? श्रृंखला को देखते हुए मैट्रिक्स का अनुमान लगाएं?
user333

पीआर(एक्सटी=मैं|एक्सटी-1=जे)

+1, लेकिन मेरे पास कुछ टिप्पणियां भी हैं: यहां एक forलूप थोड़ा क्लीनर होगा, आप की लंबाई जानते हैं Series, इसलिए बस उपयोग करें for(i in 2:length(Series))। इससे जरूरत खत्म हो जाती है i = i + 1। इसके अलावा, पहले नमूना क्यों A, और फिर में परिवर्तित करें 0,1? आप सीधे नमूना है 0और कर सकते हैं 1
पॉल हैमस्ट्रा

2
अधिक आम तौर पर आप इसे एक नए कार्य में लपेट सकते हैं createAutocorBinSeries = function(n=100,mean=0.5,corr=0) { p01=corr*(1-mean)/mean createSeries(n,matrix(c(1-p01,p01,corr,1-corr),nrow=2,byrow=T)) };createAutocorBinSeries(n=100,mean=0.5,corr=0.9);createAutocorBinSeries(n=100,mean=0.5,corr=0.1);ताकि मनमानी, पूर्व-निर्दिष्ट अंतराल 1 ऑटोकैरेलेशन के लिए अनुमति दी जा सके
ऑटोकॉर्लेशन के टॉम वेन्सलेर्स

1

यहां markovchainपैकेज पर आधारित एक उत्तर दिया गया है जिसे अधिक जटिल निर्भरता संरचनाओं के लिए सामान्यीकृत किया जा सकता है।

library(markovchain)
library(dplyr)

# define the states
states_excitation = c("steady", "excited")

# transition probability matrix
tpm_excitation = matrix(
  data = c(0.2, 0.8, 0.2, 0.8), 
  byrow = TRUE, 
  nrow = 2,
  dimnames = list(states_excitation, states_excitation)
)

# markovchain object
mc_excitation = new(
  "markovchain",
  states = states_excitation,
  transitionMatrix = tpm_excitation,
  name = "Excitation Transition Model"
)

# simulate
df_excitation = data_frame(
  datetime = seq.POSIXt(as.POSIXct("01-01-2016 00:00:00", 
                                   format = "%d-%m-%Y %H:%M:%S", 
                                   tz = "UTC"), 
                        as.POSIXct("01-01-2016 23:59:00", 
                                   format = "%d-%m-%Y %H:%M:%S", 
                                   tz = "UTC"), by = "min"),
  excitation = rmarkovchain(n = 1440, mc_excitation))

# plot
df_excitation %>% 
  ggplot(aes(x = datetime, y = as.numeric(factor(excitation)))) + 
  geom_step(stat = "identity") + 
  theme_bw() + 
  scale_y_discrete(name = "State", breaks = c(1, 2), 
                   labels = states_excitation)

यह आपको देता है:

यहाँ छवि विवरण दर्ज करें


0

मैंने उस कागज का ट्रैक खो दिया है जहाँ इस दृष्टिकोण का वर्णन किया गया था, लेकिन यहाँ जाता है।

संक्रमण मैट्रिक्स में विघटित करें

टी=(1-पीटी)[1001]+पीटी[पी0पी0(1-पी0)(1-पी0)]=(1-पीटी)मैं+पीटी

जो, सहजता से, इस विचार से मेल खाता है कि कुछ संभावना है 1-पीटी यह प्रणाली एक ही स्थिति में रहती है, और एक संभावना पीटी कि राज्य यादृच्छिक हो जाता है, जहां यादृच्छिक का मतलब है कि अगले राज्य के लिए संतुलन वितरण से एक स्वतंत्र ड्रा (पी0 पहले राज्य में होने के लिए संतुलन संभावना है)।

ध्यान दें कि आपके द्वारा निर्दिष्ट डेटा से आपको हल करने की आवश्यकता है पीटी निर्दिष्ट से टी1 1 के जरिए टी1 1=(1-पीटी)+पीटी(1-पी0)

इस अपघटन की उपयोगी विशेषताओं में से एक यह है कि यह उच्च आयामी समस्याओं में सहसंबद्ध मार्कोव मॉडल के वर्ग के लिए सामान्य रूप से सामान्य है।


यदि किसी ने इस प्रतिनिधित्व को विकसित करने वाले कागज को देखा है, तो कृपया मुझे बताएं।
डेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.