首页 > 解决方案 > 如何在子数据集中完成重复计算和绘图?

问题描述

我有一个这样创建的模拟数据:

average_vector = c(0,0,25)
sigma_matrix = matrix(c(4,1,0,1,8,0,0,0,9),nrow=3,ncol=3) 
set.seed(12345)
data0 = as.data.frame(mvrnorm(n =20000, mu = average_vector, Sigma=sigma_matrix))
names(data0)=c("hard","smartness","age")

set.seed(13579)
data0$final=0.5*data0$hard+0.2*data0$smartness+(-0.1)*data0$age+rnorm(n=dim(data0)[1],mean=90,sd=6)

现在,我想对 50 名学生进行 1000 次随机抽样(1000 组 50 人),我使用了以下代码:

datsub<-(replicate(1000, sample(1:nrow(data0),50)))

在这一步之后,我遇到了一个问题:我想问我是否想用 50 个选定的人(1000 次)运行回归模型,并记录/存储模型 4 中“hard”的点估计,其中给出如下这个:model4 = lm(formula = final ~ hard + smartness + age, data = data0),并绘制围绕 0.5 线的变化(真实值),有什么办法可以实现吗?非常感谢!

标签: r

解决方案


如果您刚刚进入 R 建模,我强烈建议您研究任何一个caret或更新的(并且仍在维护) 。TidyModels一旦你习惯了类似dplyr的语法,这些中的任何一个都会让你的生活更轻松。

你想要做的是引导。这是仅使用基本功能的手动方法。

n <- nrow(data0)
k <- 1000
ns <- 50
samples <- replicate(k, sample(seq_len(n), ns))
params <- vector('list', k)
for(i in seq_len(n)){
   params[[i]] <- coef( lm(formula = final ~ hard + smartness + age, data = data0[samples[, i],]) )
}
# merge params into columns
params <- do.call(rbind, params)
# Create plot from here. 
plot(x = seq_len(n), y = params[, "hard"])
abline(h = 0.5)

请注意,上面可能有一些拼写错误,因为您的示例不可重现。


推荐阅读