Двумерная случайная прогрессия в R - PullRequest
0 голосов
/ 23 декабря 2018

Это мой первый вопрос в StackOverflow, и я надеюсь, что это первый из многих.Я сомневаюсь в особой функции, которую я пытаюсь выполнить в R, языке программирования, который я изучаю в этом году.Функция состоит из выполнения двумерной случайной прогрессии, определенной следующим образом:

  • Для t = 1 прогрессия равна (a1, a2).

  • В каждый последующий момент позиция рассчитывается с применением следующего правила:

    • с вероятностью 5%, x_n = x_ {n-1} +1 и y_n = y_ {n-1} -1
    • с вероятностью 15%, x_n = 2x_ {n-1} и y_n = y_ {n-1} + 1
    • с вероятностью 80%, x_n = x_ {n-1} +1 и y_n = 2y_ {n-1}

То, что я сделал, - это использование выборочной функции с двумя прогрессиями, потому что яЯ пытался адаптировать его к одному без выхода.Я хотел бы использовать вероятности в кортеже, а не отдельно.Не могли бы вы помочь мне с этим?Я бы поблагодарил вас.

         simulate <- function(n,a1,a2){
             x <- a1
             y <- a2

             for(t in 2:n){
               print(paste("(",x,",",y,")"))
               x <- sample(c(x+1,2*x,x+1),size=1,prob=c(0.05,0.15,0.8))
               y <- sample(c(y-1,y+1,2*y),size=1,prob=c(0.05,0.15,0.8))
               }

             print(paste("Final tuple is: (",x,",",y,")"))
         }

1 Ответ

0 голосов
/ 23 декабря 2018

Ваша функция не соответствует описанию, которое вы дали.Вы описываете три результата, но функция учитывает девять.
Моим первым инстинктом было сделать что-то подобное.Является ли вектор z, на который вы ссылаетесь, «вероятностями в кортеже»?

sim <- function(n, a1, a2) {

    x <- vector(length=n)
    y <- vector(length=n)

    x[1] <- a1
    y[1] <- a2

    z <- sample(1:100, n, replace=TRUE)

    for (i in 2:n) {
        if (z[i] <= 5) {
            x[i] <- x[i-1] + 1
            y[i] <- y[i-1] - 1
            next
        }
        if (z[i] <= 20) {
            x[i] <- x[i-1] * 2
            y[i] <- y[i-1] + 1
            next
        } 
        x[i] <- x[i-1] + 1
        y[i] <- y[i-1] * 2
    }
    cbind(x, y, z)
}

set.seed(9)
sim(6, 20, 10)
#       x   y  z
# [1,] 20  10 23
# [2,] 21   9  3
# [3,] 22  18 21
# [4,] 23  36 22
# [5,] 24  72 45
# [6,] 48  73 14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...