Генерация данных и сохранение оценок в цикле в R - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в R и программировании в целом, и у меня возникли некоторые проблемы с этим циклом.По сути, я хочу сгенерировать 10000 оценок beta_2, когда n = 10, и сохранить их в векторе, где рассматриваемая оценка дается формулой (cov (x, y) / var (x)).Я пробовал следующий код, но он только правильно выдает первую оценку и заполняет другие позиции в векторе как NA.Любые советы, чтобы решить эту проблему?

X <- rlnorm(n, X_meanlog, X_sdlog)
u <- rnorm(n, u_mean, u_sd)
Y <- beta_1 + beta_2 * X + u
rep <- 10000
vect <- vector(mode="numeric", length=rep)
for(i in 1:rep){vect[i] <-(cov(X,Y) / var(X))[i]}

1 Ответ

0 голосов
/ 13 октября 2018

Вы должны симулировать векторы X и Y внутри цикла.

n <- 10
X_meanlog <- 0
X_sdlog <- 1
u_mean <- 0
u_sd <- 1

beta_1 <- 2
beta_2 <- 3

set.seed(5276)    # Make the results reproducible

rept <- 10000
vect <- vector(mode="numeric", length=rept)
for(i in 1:rept){
  X <- rlnorm(n, X_meanlog, X_sdlog)
  u <- rnorm(n, u_mean, u_sd)
  Y <- beta_1 + beta_2 * X + u
  vect[i] <- (cov(X, Y) / var(X))
}

mean(vect)
#[1] 3.002527

Вы также можете запустить следующую более простую симуляцию.

set.seed(5276)    # Make the results reproducible

X <- replicate(rept, rlnorm(n, X_meanlog, X_sdlog))
u <- replicate(rept, rnorm(n, u_mean, u_sd))
Y <- beta_1 + beta_2 * X + u

vect2 <- sapply(seq_len(rept), function(i)
  cov(X[, i], Y[, i]) / var(X[, i])
  )

mean(vect2)
#[1] 3.001131
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...