【发布时间】:2020-06-26 20:42:45
【问题描述】:
我正在使用 R。我有以下问题:我需要对我的数据集的每个子组 k(大小相等)的线性模型进行 100 多次试验,然后我想将参数的估计值作为超过 100 次试验的每个亚组参数的平均值。 我开发了以下代码。我不确定我是否知道如何在两个循环中存储计算平均值所需的每次迭代的参数估计值。我使用了一个列表(“res”),但由于每次重复我都必须存储一个向量,这可能不是一个好的选择:
# Define var-cov matrix
rho <- 0.5
row1 <- rho^(c(0:18))
row2 <- rho^(c(1,0:17))
row3 <- rho^(c(2:1,0:16))
row4 <- rho^(c(3:1,0:15))
row5 <- rho^(c(4:1,0:14))
row6 <- rho^(c(5:1,0:13))
row7 <- rho^(c(6:1,0:12))
row8 <- rho^(c(7:1,0:11))
row9 <- rho^(c(8:1,0:10))
row10 <- rho^(c(9:1,0:9))
row11 <- rho^(c(10:1,0:8))
row12 <- rho^(c(11:1,0:7))
row13 <- rho^(c(12:1,0:6))
row14 <- rho^(c(13:1,0:5))
row15 <- rho^(c(14:1,0:4))
row16 <- rho^(c(15:1,0:3))
row17 <- rho^(c(16:1,0:2))
row18 <- rho^(c(17:1,0:1))
row19 <- rho^(c(18:1,0))
S = round(rbind(row1,row2,row3,row4,row5,row6,row7,row8,row9,row10,row11,row12,row13,row14,row15,row16,row17,row18,row19),4)
library(tidyr)
colnames(S) = c("X2","X3","X4","X5","X6","X7","X8","X9","X10","X11","X12","X13","X14","X15","X16","X17","X18","X19","X20")
rownames(S) = colnames(S)
# Make mean vector
mus = rep(1,19); names(mus) = colnames(S)
res <- list()
result <- list()
for(ii in 1:100){
df = mvrnorm(n = 1000, mu = mus, Sigma = S)
beta <- c(1, runif(19, min = -2.5, max = 2.5))
eps <- rnorm(1000, 0, 1)
sigma <- 0.2*(norm(df*beta, type = '2')/norm(eps, type = '2'))
y <- rowSums(df*beta + sigma*eps)
df <- data.frame(cbind(y, df))
ind = sample(rep(1:10,each = nrow(df)/10)) # split the dataset in k=10 subgroups
k <-lapply(split(1:nrow(df),ind), function(i) df[i,])
for(i in 1:10){
fit <-lm(formula = y ~ X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12+X13+X14+X15+X16+X17+X18+X19+X20,
data= k[[i]])
res[[i]] <- fit$coefficients
}
result[[ii]] <- mean(res[[i]])
}
有人可以帮我吗?提前谢谢你。
【问题讨论】:
-
欢迎来到 SO! “有问题”不是很有帮助。你可以说得更详细点吗?您收到错误消息吗?如果有,在哪里?它说什么?你没有得到你期望的输出吗?如果是这样,你会得到什么,你想要什么?请阅读this post 并编辑您的问题,使其成为一个最小的工作示例。
-
是的,你是对的!错误的意思是:“评估错误(predvars,data,env):找不到对象“X2””。在我看来,在第二个循环中,R 无法读取子组
-
k和result都是列表,因此您应该使用[[而不是[来访问单个元素。这将使您开始:您的代码运行,但不会产生任何结果。请阅读我在其他评论中链接到的帖子,然后修改您的问题,使其成为 MWE。
标签: r simulation lm