【问题标题】:How does the function "simulate" work, conceptually?从概念上讲,“模拟”功能如何工作?
【发布时间】:2023-03-22 18:42:01
【问题描述】:

如果我的问题看起来很简单或幼稚,我提前道歉,但我试图从概念上理解函数 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 的工作原理,将不胜感激。

【问题讨论】:

  • 您可以使用stats:::simulate.lm查看源代码。但由于这更多是关于统计概念,我可能会推荐 Cross Validated 而不是 Stack Overflow。

标签: r simulate


【解决方案1】:

它基本上完成了帮助文件中所说的:“从对应于拟合模型对象的分布中模拟一个或多个响应。”

因此,对于每个模拟,都会从以协变量为条件的结果变量的条件分布中随机抽取。此条件分布在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)

【讨论】:

  • family = 'poisson'的情况下过程是否与四舍五入相同?
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2015-05-23
相关资源
最近更新 更多