Rasgele otomatik korelasyonlu ikili zaman serisi verileri nasıl oluşturulur?


15

Nasıl ikili zaman serisi oluşturabilirim ki:

  1. Ortalama gözlemleme olasılığı 1 belirtilir (örneğin% 5);
  2. T - 1'de verilen değer göz önüne alındığında, zamanında 1 gözlemin koşullu olasılığı ( t - 1 değeri 1 ise% 30 diyelim )?tt1t1

Yanıtlar:


17

İki durumlu bir Markov zinciri kullanın.

Durumları 0, 1 olarak adlandırılır, o zaman zincir 2x2 matris ile temsil edilebilir durumlar arasındaki geçiş olasılıkları verir burada p i j durumundan hareket ait olasılığı i durumu için j . Bu matriste, her satır 1.0'a eşit olmalıdır.PPijbenj

İfade 2'den ve basit koruma P 10 = 0.7 diyor .P11=0.3P10=0.7

1. ifadeden, uzun vadeli olasılığın (denge veya kararlı durum olarak da bilinir) olmasını istiyorsunuz . Bu der p 1 = 0.05 = 0.3 p 1 + p 01 ( 1 - p 1 ) Çözme veren P 01 = 0,0368421 ve bir geçiş matrisi , P = ( 0,963158 0,0368421 0.7 0.3 )P1=0.05

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

(Transtion matrisinizi yüksek bir güce yükselterek doğruluğunu kontrol edebilirsiniz - bu durumda 14 işi yapar - sonucun her satırı aynı kararlı durum olasılıklarını verir)

Şimdi rastgele sayı programınızda, rasgele 0 veya 1 durumunu seçerek başlayın; bu, hangi satırını kullandığınızı seçer . Ardından bir sonraki durumu belirlemek için tek tip rastgele bir sayı kullanın. Bu numarayı tükür, durula, gerektiği kadar tekrarla.P


İlginç bir çözüm! R'de bazı örnek kodlarınız var mı? Başka antone?
user333

@Mike Lütfen hesabınızı kaydedebilir misiniz? Oldukça aktif bir kullanıcısınız ve manuel olarak tekrar tekrar birleştirmemiz gerekiyor. İşlem oldukça kolaydır; sadece stats.stackexchange.com/login

Teşekkürler. Veriler verildiğinde Markov zincirini (geçiş matrisi) nasıl tahmin edebilirim? Bunu yapmak için bir R işlevi var mı?
user333

6

R'deki @Mike Anderson cevabını kodlarken bir çatlak aldım. Bunu aptal kullanarak nasıl yapacağımı anlayamadım, bu yüzden bir döngü kullandım. Daha ilginç bir sonuç elde etmek için probları biraz değiştirdim ve devletleri temsil etmek için 'A' ve 'B' kullandım. Ne düşündüğü söyle.

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

/ edit: Paul'un yorumuna yanıt olarak, daha zarif bir formülasyon

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))

Orijinal kodu sadece R öğrenirken yazdım, bu yüzden beni biraz gevşetin. ;-)

Seri verildiğinde geçiş matrisini nasıl tahmin edeceğiniz aşağıda açıklanmıştır:

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

Sipariş, orijinal geçiş matrisime göre değiştirildi, ancak doğru olasılıkları elde etti.


Harika! En kısa sürede öfkeleneceğim ... Yeterince iyi görünüyor ....
user333

Tersini yapmak mümkün mü? Seriler matrisi tahmin eder mi?
user333

Pr(Xt=ben|Xt-1=j)

+1, ama aynı zamanda bazı yorumlarım var: Bir fordöngü burada biraz daha temiz olurdu, uzunluğunu biliyorsunuz Series, bu yüzden sadece kullanın for(i in 2:length(Series)). Bu, ihtiyacı ortadan kaldırır i = i + 1. Ayrıca, neden ilk örnekleme Ave daha sonra dönüştürmek 0,1? Doğrudan örnek 0's ve 1' s.
Paul Hiemstra

2
Daha genel olarak 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);, keyfi, önceden belirlenmiş gecikme 1 otokorelasyonuna izin vermek için yeni bir işlevle
sarabilirsiniz

1

İşte markovchaindaha karmaşık bağımlılık yapılarına genelleştirilebilen pakete dayanan bir cevap .

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)

Bu size şunları sağlar:

resim açıklamasını buraya girin


0

Bu yaklaşımın anlatıldığı makaleyi kaybettim, ama işte gidiyor.

Geçiş matrisini

T=(1-pt)[1001]+pt[p0p0(1-p0)(1-p0)]=(1-pt)ben+ptE

sezgisel olarak, bazı olasılıklar olduğu fikrine karşılık gelir. 1-pt sistemin aynı durumda kalması ve bir olasılık pt durumun rastgele hale geldiği, burada rastgele durumun bir sonraki durum için denge dağılımından bağımsız bir çekim yapma anlamına geldiği (p0 birinci durumda olma olasılığıdır).

Belirttiğiniz verilerden çözmeniz gerektiğini unutmayın. pt belirtilen T11 üzerinden T11=(1-pt)+pt(1-p0).

Bu ayrışmanın yararlı özelliklerinden biri, yüksek boyutlu problemlerde ilişkili Markov modellerinin sınıfına oldukça basit bir şekilde genellemesidir.


Bu temsili geliştiren makaleyi kimse gördüyse, lütfen bana bildirin.
Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.