উত্তর:
দ্বি-রাষ্ট্রের মার্কভ চেইন ব্যবহার করুন।
যদি রাজ্যগুলিকে 0 এবং 1 বলা হয়, তবে চেইনটিকে 2x2 ম্যাট্রিক্স দ্বারা প্রতিনিধিত্ব করা যেতে পারে রাষ্ট্রগুলির মধ্যে রূপান্তর সম্ভাবনা দেয়, যেখানে রাজ্য থেকে রাষ্ট্র যাওয়ার সম্ভাবনা থাকে । এই ম্যাট্রিক্সে, প্রতিটি সারি 1.0 এর সমষ্টি হওয়া উচিত।
বিবৃতি 2 থেকে, আমাদের কাছে , এবং সাধারণ সংরক্ষণ রয়েছে তখন পি 10 = 0.7 বলে ।
বিবৃতি 1 থেকে আপনি দীর্ঘমেয়াদী সম্ভাবনা (যাকে ভারসাম্যহীন বা অবিচলিত রাষ্ট্রও বলা হয়) । এটি পি 1 = 0.05 = 0.3 পি 1 + পি 01 ( 1 - পি 1 ) সলভিং পি 01 = 0.0368421 এবং একটি ট্রানজিশন ম্যাট্রিক্স পি = ( 0.963158 0.0368421 0.7 0.3 ) দেয়
(আপনি আপনার ট্রানজিশন ম্যাট্রিক্সটিকে উচ্চ শক্তিতে উত্থাপন করে সঠিকতার জন্য পরীক্ষা করতে পারেন - এই ক্ষেত্রে 14 কাজ করে - ফলাফলের প্রতিটি সারি একই ধরণের স্থির রাষ্ট্রীয় সম্ভাবনা দেয়)
এখন আপনার এলোমেলো সংখ্যা প্রোগ্রামে, এলোমেলোভাবে 0 বা 1 রাষ্ট্র নির্বাচন করে শুরু করুন; আপনি কোন সারিটি ব্যবহার করছেন তা এটি নির্বাচন করে। তারপরে পরবর্তী অবস্থা নির্ধারণ করতে অভিন্ন র্যান্ডম নম্বর ব্যবহার করুন। নম্বরটি থুথু করুন, ধুয়ে ফেলুন, প্রয়োজনীয় হিসাবে পুনরাবৃত্তি করুন।
আমি আর মাইকে অ্যান্ডারসন উত্তর কোডিংয়ে ক্র্যাক করেছিলাম sa এটি কীভাবে সপলি ব্যবহার করে করব তা বুঝতে পারি না, তাই আমি একটি লুপ ব্যবহার করেছি। আরও আকর্ষণীয় ফলাফল পেতে আমি প্রবগুলি কিছুটা পরিবর্তন করেছি এবং আমি রাজ্যগুলির প্রতিনিধিত্ব করতে 'এ' এবং 'বি' ব্যবহার করি। আমার সম্পর্কে আপনি কী মনে করেন জানি।
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)
এটি আপনাকে দেয়:
এই কাগজটির বর্ণনা দেওয়া হয়েছে এমন কাগজের ট্র্যাকটি আমি হারিয়ে ফেলেছি, তবে এখানে রয়েছে।
রূপান্তর ম্যাট্রিক্সকে বিভক্ত করুন
।
এই পচনের অন্যতম কার্যকর বৈশিষ্ট্য হ'ল এটি উচ্চতর মাত্রিক সমস্যাগুলিতে পারস্পরিক সম্পর্কযুক্ত মার্কভ মডেলগুলির শ্রেণিতে বেশ সরলরূপে সাধারণীকরণ করে।