如果我的问题看起来非常简单或天真,我会提前道歉,但我试图理解函数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
如何以简单的非技术术语运作,我们将不胜感激。
答案 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)