如果我的问题看起来真的很简单或天真,我提前道歉,但我试图从概念上理解该函数的作用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简单的非技术术语解释/确认如何工作,我们将不胜感激。
它基本上执行帮助文件中所述的操作:“模拟与拟合模型对象相对应的分布的一个或多个响应。”
因此,对于每次模拟,都会从以协变量为条件的结果变量的条件分布中进行随机抽取。该条件分布在 中默认为正态分布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)
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |