2

我需要模拟 n=100 次线性模型,但会迷失在 R 命令中。

我还在学习统计和 R 的基础知识,我对这个练习有点困惑:

我需要使用 OLS 复制基本线性模型 100 次并收集 N 个估计值,以便执行一致性和效率测试。我试图以这种方式解决问题:

a <- 3
B <- 0.5
C <- -0.7

for (i in 1:100){
   x1[i] <- rnorm(200, mean=0, sd=1)
   x2[i] <- rnorm(200, mean=0, sd=1) 
   e[i] <- rnorm(200, mean=0, sd=1)
   y1[i] <- a+(B*x1[i])+(C*x2[i])+e[i] 

   y<- lm(y1[i]~x1[i]+x2[i]))
   results <-data.frame(coef(y))
}

但 R 一直告诉我有错误。有人可以帮我解决这个问题吗?

4

2 回答 2

7

就像是:

a <- 3
B <- 0.5
C <- -0.7

results <- matrix(nrow=100,ncol=3)
for (i in 1:100){
   x1 <- rnorm(200, mean=0, sd=1)
   x2 <- rnorm(200, mean=0, sd=1) 
   e <- rnorm(200, mean=0, sd=1)
   y1 <- a+B*x1+C*x2+e 

   y<- lm(y1~x1+x2)
   results[i,] <- coef(y)
}

这假设您只需要保存每次运行的系数。一个更优雅的解决方案是这样的:

simfun <- function(a=3,B=0.5,C=-0.7,n=200,x1.sd=1,x2.sd=1,e.sd=1) {
   x1 <- rnorm(n, mean=0, sd=x1.sd)
   x2 <- rnorm(n, mean=0, sd=x2.sd) 
   e <-  rnorm(n, mean=0, sd=e.sd)
   y1 <- a+B*x1+C*x2+e 
   data.frame(x1,x2,y1)
}

statfun <- function(d) {
    coef(lm(y1~x1+x2,data=d))
}

library(plyr)
raply(100,statfun(simfun()))
于 2013-01-28T02:31:02.793 回答
0
    a <- 3
    B <- 0.5
    C <- -0.7
    sims <- 100

    #initialize a data frame to collect results
    df <- data.frame(matrix(ncol = 3, nrow = sims))
    colnames(df) <- c('a', 'B' , 'C')

    for(i in 1:sims){
    ##vectors each  200 long 
    x1 <- rnorm(200)
    x2 <- rnorm(200)
    e <- rnorm(200)

    y <- a + B*x1 + C*x2 +e
    #collect results for each itter
    df[i,] <- data.frame(t(lm(y ~x1 + x2)$coeff))
    }

    #results
    df
于 2013-01-28T02:34:07.930 回答