R 模拟一个简单的线性模型

R 模拟一个简单的线性模型,r,linear-regression,simulation,R,Linear Regression,Simulation,我试图模拟一个简单的线性模型100次,并从线性模型中找到B1的LS估计 set.seed(123498) x<-rnorm(z, 0, 1) e<-rnorm(z, 0 ,2) y<-0.5 + 2*x + e model<- lm(y~x) simulaten=100 z=10 for (i in 1:simulaten){ e<-rnorm(n, 0 ,2) x<-rnorm(n, 0, 1) y<-0.5 + 2*x + e mo

我试图模拟一个简单的线性模型100次,并从线性模型中找到B1的LS估计

set.seed(123498)
x<-rnorm(z, 0, 1)
e<-rnorm(z, 0 ,2)
y<-0.5 + 2*x + e
model<- lm(y~x)
simulaten=100
z=10

for (i in 1:simulaten){
  e<-rnorm(n, 0 ,2)
  x<-rnorm(n, 0, 1)
  y<-0.5 + 2*x + e
  model<- lm(y~x)}
  summary(model)
set.seed(123498)

x在每次迭代中更新
模型
。因此,
摘要
返回最后一个“模型”的摘要输出。我们可以将其存储在
列表中

# // initialize empty list of length equals length of simulaten
modellst <- vector('list', simulaten)
 for(i in seq_len(simulaten)) {
      e <- rnorm(n, 0 ,2)
      x <- rnorm(n, 0, 1)
      y <- 0.5 + 2*x + e
      # // assign the model output to the corresponding list element
      modellst[[i]] <- lm(y~x)  
 }
#//初始化长度等于模拟长度的空列表

modellst这里是一个
复制
解决方案。我已将
n
(在问题中被遗忘)和
simulaten
设置为较小的值

n <- 100
simulaten <- 4

set.seed(123498)

model_list <- replicate(simulaten, {
      e <- rnorm(n, 0, 2)
      x <- rnorm(n, 0, 1)
      y <- 0.5 + 2*x + e
      lm(y ~ x)
}, simplify = FALSE)

model_list
至于图表,这里是一个例子。请注意,为了使x轴达到所有x值,在对
hist
参数的第一次调用中,
xlim
被设置为
range(betas)


lgd您正在每个迭代中更新
模型
。因此,
summary(model)
来自上一次迭代如果我想将其存储为向量,我应该使用replicate函数吗?是的,
replicate
也很有用。然后可以避免
for
循环。i、 e.
replicate(simulaten,yourcode,simplify=FALSE)
感谢您的澄清!鲁伊巴拉达斯展示了一个复制选项。你可以检查这个解决方案。但是bug:使用
seq_len(simulaten)
,或者
seq_along(modellst)
。迭代的结果会存储在向量中吗?很抱歉问了一些基本的问题。我是个新手R@NeilsonsMilk模型对象是一个具有许多属性的复杂对象。
列表
可以很好地将其容器化,而不是向量。因为
vector
只能有一种类型,有没有办法从系数汇总中提取b0_hat和b1_hat的值,并将它们放入一个向量中,这样我就可以制作一个直方图?谢谢你简洁明了的回答!非常感谢你的帮助!
betas <- sapply(model_list, coef)

str(betas)
# num [1:2, 1:1000] 0.671 1.875 0.374 2.019 0.758 ...
# - attr(*, "dimnames")=List of 2
#  ..$ : chr [1:2] "(Intercept)" "x"
#  ..$ : NULL
lgd <- c(expression(beta[0]), expression(beta[1]))
hist(betas[1, ], freq = FALSE, col = "lightblue", xlim = range(betas), ylim = c(0, 2.5), xlab = "betas", main = "")
hist(betas[2, ], freq = FALSE, col = "blue", add = TRUE)
legend("top", legend = lgd, fill = c("lightblue", "blue"), horiz = TRUE)