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

mso*_*ain 6 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)
Run Code Online (Sandbox Code Playgroud)

当该函数simulate应用于这种情况时会做什么?所以如果我这样做:

simulate(mod, nsim=2)
Run Code Online (Sandbox Code Playgroud)

我得到的两个向量是什么?

本质上,它类似于这样做:

replicate(2, y + rnorm(n=length(y), mean="some value", sd="some other value"))
Run Code Online (Sandbox Code Playgroud)

如果类似这样的逻辑,那么“某个值”和“某个其他值”会是什么?他们会是mean(mod$residuals)sd(mod$residuals)吗?或者实际残差的排列?或者完全是别的什么?

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

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

joh*_*een 5

它基本上执行帮助文件中所述的操作:“模拟与拟合模型对象相对应的分布的一个或多个响应。”

因此,对于每次模拟,都会从以协变量为条件的结果变量的条件分布中进行随机抽取。该条件分布在 中默认为正态分布lm。该正态分布的标准差对应于 的 MSE 的 sqrt mod

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

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)
Run Code Online (Sandbox Code Playgroud)