Предположим, что я хочу сгенерировать условия X и Y предыдущего объекта X и вероятности (F). Мой алгоритм: в определенный день один человек имеет статус 1/0. Если статус 0, то состояние следующего дня будет rbinom(1,1,0.5)
; если статус 1, то staus следующего дня будет rbinom(1,1,F[this day])
. Здесь я хочу генерировать эти данные для N человек и дней.Создание данных на основе условия с использованием кода R
Мой код:
N <- 10 # number of individual
d <- 10 # days
F <- c(0.9,0.8, 0.7, 0.6, 0.5, 0.4) # Probabilities
for(j in 1:N){
x <- NULL
x[1] <- rbinom(1,1,0.5)
y <- NULL
y[1] <- ifelse(x[1]==1, 1, 0)
for(i in 2:d){
if(x[i-1]==0)
{
y[i] <- x[i-1]
x[i] <- rbinom(1,1,0.05)
}
if(x[i-1]==1)
{
y[i] <- y[i-1]+x[i-1]
x[i] <- rbinom(1,1,F[y[i]])
}
}
}
Этот код производит данные, такие как,
> x
[1] 1 1 0 0 0 0 0 0 0 1
> y
[1] 1 2 3 0 0 0 0 0 0 0
Но я хочу, чтобы генерировать X и Y, как это:
> x
[1] 1 1 0 0 0 0 0 0 0 1
> y
[1] 1 2 0 0 0 0 0 0 0 1
Я не найти какая часть кода является неправильной. Может ли кто-нибудь помочь?
Если вы используете 'rbinom', то выход будет в некоторой степени ...« random ». Таким образом, возникает вопрос: в каком смысле вы получаете результат не так, как вы ожидаете? Вы еще не объяснили, что этот процесс должен делать, и только создали код, который, по вашему мнению, является ошибочным, поэтому кажется мало смысла пытаться объединить «Fortran-mind», чтобы создать эффективный R-код. –
Спасибо. Я изменил свой вопрос выше. – Rudro88
Первое, что нужно понять, состоит в том, что внешний цикл выполняет этот процесс 10 раз, но только оставляет последний, который нужно изучить. Вы можете удалить внешний контур, и ничего не должно измениться. Я внесу несколько изменений в код, и вы увидите, действительно ли вы уже делаете то, что планируете. –