在R

时间:2018-10-13 15:34:56

标签: r

我一般是R和程序设计的初学者,并且在此循环方面遇到一些问题。 基本上我想在n = 10时生成10,000个beta_2的估计,并将它们存储在一个向量中,该向量的估计式由公式(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 :(得分:0)

您必须在循环内模拟向量XY

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