从概念上讲,“模拟”功能如何运作?

时间:2015-03-30 15:01:57

标签: r simulate

如果我的问题看起来非常简单或天真,我会提前道歉,但我试图理解函数simulate在概念上的作用(即,我对它的逻辑感兴趣,不管是否它适用于lm,lme等。)

假设我正在对以下数据进行简单的多元回归:

n <- 40

x1 <- rnorm(n, mean=3, sd=1)

x2 <- rnorm(n, mean=4, sd=1.25)

y <- 2*x1 + 3*x2 + rnorm(n, mean=2, sd=1)

mydata <- data.frame(x1, x2, y)

mod <- lm(y ~ x1 + x2, data=mydata)

应用于该案例时,simulate函数的作用是什么?所以,如果我这样做:

simulate(mod, nsim=2)

我获得的两个载体是什么?

本质上,它与做的相似:

replicate(2, y + rnorm(n=length(y), mean="some value", sd="some other value"))

如果它与那个逻辑类似,那么“某些价值”和“其他一些价值”会是什么?他们会mean(mod$residuals)sd(mod$residuals)吗?还是实际残差的排列?或完全不同的东西?

或者它是在做一些完全不同的事情?

如果有人能够解释/确认simulate如何以简单的非技术术语运作,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

它基本上执行帮助文件所说的内容:&#39;模拟来自与拟合模型对象相对应的分布的一个或多个响应。&#39;

因此,对于每个模拟,从协变量条件下的结果变量的条件分布中获取随机抽取。默认情况下,此条件分布是lm中的正态分布。此正态分布的标准偏差对应于mod的MSE的sqrt。

下面的代码复制输出(假设您使用相同的种子):

set.seed(1)
head(simulate(mod, nsim=2))

set.seed(1)
for(i in 1:nsim) {
  tmp <- predict(mod) + rnorm(length(predict(mod)), 0, summary(mod)$sigma)
  res <- if (i==1) tmp else cbind(res, tmp)
}
head(res)