模拟线性模型100次

时间:2013-01-28 00:36:24

标签: r

我需要模拟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一直告诉我有错误。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分: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()))

答案 1 :(得分: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