जवाबों:
दो-राज्य मार्कोव श्रृंखला का उपयोग करें।
राज्यों 0 और 1 कहा जाता है, तो श्रृंखला एक 2x2 मैट्रिक्स द्वारा दर्शाया जा सकता राज्यों के बीच संक्रमण संभावनाओं दे, जहां पी मैं j राज्य से हिलाने की संभावना है मैं राज्य के लिए जे । इस मैट्रिक्स में, प्रत्येक पंक्ति को 1.0 का योग करना चाहिए।
कथन 2 से, हमारे पास , और सरल संरक्षण तब P 10 = 0.7 कहता है ।
कथन 1 से, आप दीर्घकालिक संभावना (जिसे संतुलन या स्थिर-अवस्था भी कहते हैं) । यह कहते हैं पी 1 = 0.05 = 0.3 पी 1 + पी 01 ( 1 - पी 1 ) सुलझाने देता पी 01 = .०३,६८,४२१ और एक संक्रमण मैट्रिक्स पी = ( .९,६३,१५८
(आप इसे उच्च शक्ति तक बढ़ाकर शुद्धता के लिए अपने ट्रांसस्टेशन मैट्रिक्स की जांच कर सकते हैं - इस मामले में 14 काम करता है - परिणाम की प्रत्येक पंक्ति समान स्थिर राज्य संभावनाएं देती है)
अब अपने यादृच्छिक संख्या कार्यक्रम में, बेतरतीब ढंग से राज्य 0 या 1 को चुनना शुरू करें; यह चयन करता है कि आप की किस पंक्ति का उपयोग कर रहे हैं। फिर अगले राज्य को निर्धारित करने के लिए एक समान यादृच्छिक संख्या का उपयोग करें। उस नंबर को बाहर थूकें, कुल्ला करें, आवश्यकतानुसार दोहराएं।
मैंने 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
आदेश को मेरे मूल संक्रमण मैट्रिक्स बनाम स्वैप किया जाता है, लेकिन इसे सही संभावनाएं मिलती हैं।
for
लूप थोड़ा क्लीनर होगा, आप की लंबाई जानते हैं Series
, इसलिए बस उपयोग करें for(i in 2:length(Series))
। इससे जरूरत खत्म हो जाती है i = i + 1
। इसके अलावा, पहले नमूना क्यों A
, और फिर में परिवर्तित करें 0,1
? आप सीधे नमूना है 0
और कर सकते हैं 1
।
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 ऑटोकैरेलेशन के लिए अनुमति दी जा सके
यहां 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)
यह आपको देता है:
मैंने उस कागज का ट्रैक खो दिया है जहाँ इस दृष्टिकोण का वर्णन किया गया था, लेकिन यहाँ जाता है।
संक्रमण मैट्रिक्स में विघटित करें
जो, सहजता से, इस विचार से मेल खाता है कि कुछ संभावना है यह प्रणाली एक ही स्थिति में रहती है, और एक संभावना कि राज्य यादृच्छिक हो जाता है, जहां यादृच्छिक का मतलब है कि अगले राज्य के लिए संतुलन वितरण से एक स्वतंत्र ड्रा ( पहले राज्य में होने के लिए संतुलन संभावना है)।
ध्यान दें कि आपके द्वारा निर्दिष्ट डेटा से आपको हल करने की आवश्यकता है निर्दिष्ट से के जरिए ।
इस अपघटन की उपयोगी विशेषताओं में से एक यह है कि यह उच्च आयामी समस्याओं में सहसंबद्ध मार्कोव मॉडल के वर्ग के लिए सामान्य रूप से सामान्य है।