Simulação de Valores

Olá, pessoal. Tudo bem?

Estou com o seguinte código:

N = 100

X1 = rnorm(N, mean = 0, sd = 1)
Y1 = rnorm(N, mean = 0, sd = 1)

X2 = rnorm(N, mean = 0, sd = 1)
Y2 = rnorm(N, mean = 0, sd = 1)

for (i in 2:N){
  
  X[i] = X[i] + 0.5 * Y[i-1] + 0.3 * X[i-1]
  Y[i] = Y[i] + 0.5 * Y[i-1] - 0.5 * X[i-1]
  
  X2[i] = X2[i] + 0.5 * Y2[i-1] + 0.3 * X2[i-1]
  Y2[i] = Y2[i] + 0.5 * Y2[i-1] - 0.5 * X2[i-1]
  
}

id = array(1:(2*N))
id[1:N] = 1
id[(N + 1):(2*N)] = 2

year = array(1:N)
year = c(year, year)

Var1 = c(X1, X2)
Var2 = c(Y1, Y2)

data = data.frame(id = id, year = year, v1 = Var1, v2 = Var2)

Pois bem, esse código me gera um dataset no formato de painel, onde tenho as variáveis em coluna representadas por v1 e v2 e nas duas primeiras colunas tenho o indivíduo e o tempo. Nesse caso específico, possuo apenas 2 indíviduos, o que gostaria era de um código que pudesse incluir um número maior de indivíduos sem a necessidade de construir variáveis para cada um deles, isto é, as variáveis X1, X2, etc. Alguém vislumbra alguma ideia? Não consegui enxergar como poderia fazer.

Muito obrigado!

vetromille,

Tentando manter o máximo possível do seu código e sem adicionar nenhuma dependência, acho que esse é um possível caminho:

# Gera tabela para um indivíduo
gera_individuo <- function(id, n) {
  X1 = rnorm(n, mean = 0, sd = 1)
  Y1 = rnorm(n, mean = 0, sd = 1)
  
  for (i in 2:n){
    X1[i] = X1[i] + 0.5 * Y1[i-1] + 0.3 * X1[i-1]
    Y1[i] = Y1[i] + 0.5 * Y1[i-1] - 0.5 * X1[i-1]
  }

  year = array(1:n)
  
  data.frame(id = id, year = year, v1 = X1, v2 = Y1)
}

N = 100 # Linhas por indivíduo
I = 3   # Número de indivíduos

# Cria uma lista de tabelas
lista_individuos = Map(gera_individuo, id = 1:I, n = N)

# Transforma em uma tabela única
tabela_final <- Reduce(rbind2, lista_individuos)

Created on 2020-10-28 by the reprex package (v0.3.0)