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