R中列表的输出列表

Output list of list in R

目标说明:

有人可以帮我解决这个问题吗: 我试图对线性回归 beta0hat、beta1hat、R2、R2Adjusted 和 P 值的估计量进行 Monte Carlo 研究,改变样本大小 (30,60,100) 和方差 (0.5,0.75,1),使用正常随机错误。 首先,我创建了每个长度的 3 个样本,这些样本与我不想随机的研究相关。

X1 =  sample(0:20,30,T)
X2 =  sample(0:20,60,T)
X3 = sample(0:20,100,T)

为了主要目的,我在 中创建了 Monte Carlo 的这个函数,我试图将每个估计器的结果保存在一些适当的向量中以生成直方图和Y 轴上的 P 值与 X 轴上的 R2 相对应,以验证当我更改变量并将正态随机设置为误差时估计器的行为。

函数参数: n = 样本大小,sig = 变化的方差,b0 = 真实 betahat0,b1 = 真实 betahat1,X = X 轴样本

Monte.Carlo = function(n, sig, b0, b1,X){
      Y = b0 + b1 * X + rnorm(n,0,sig)
      smr = summary(lm(Y~X))
      return(smr)
}

为了生成将成为本研究中我的数据的向量以分析估计器的行为,我使用了如下函数复制:

object.1 = replicate(1000,Monte.Carlo(30,0.5,1.4,0.8,1,X1))
beta0_s0.5_n30 <-list(c(object.1[,1:1000][[4]] [1]))
beta1_s0.5_n30<- object.1[[4]] [2]
R2_s0.5_n30 <- object.1[[8]]
R2A_s0.5_n30 <- object.1[[9]]
valorP_s0.5_n30 <- object.1[[4]] [8]

但是上面的这几代有些问题我想不通。

object.1 似乎存储了 1000 个回归摘要。

我如何访问回归摘要的每个估计器的 1000 个输出,然后存储在适当的向量中,如列表的列表,如上面的命令行中所示?

目的是将其应用于多个对象,如下例所示,我已将方差更改为 0.75,样本大小更改为 60:

beta0_s0.75_n60 <- replicate(1000,Monte.Carlo(60,0.75,1.4,0.8,X2))
beta1_s0.75_n60<- replicate(1000,Monte.Carlo(60,0.75,1.4,0.8,X2))
R2_s0.75_n60 <- replicate(1000,Monte.Carlo(60,0.75,1.4,0.8,X2))
R2A_s0.75_n60 <- replicate(1000,Monte.Carlo(60,0.75,1.4,0.8,X2))
valorP_s0.75_n60 <- replicate(1000,Monte.Carlo(60,0.75,1.4,0.8,X2))

最后一步是像本例一样生成 120 个图来比较结果:

hist(R2A_s0.5_n30,breaks=11)
hist(R2A_s0.75_n30,breaks=11)
hist(R2A_s1_n30,breaks=11)
hist(R2A_s0.5_n60,breaks=11)
hist(R2A_s0.75_n60,breaks=11)
hist(R2A_s1_n60,breaks=11)
hist(R2A_s0.5_n100,breaks=11)
hist(R2A_s0.75_n100,breaks=11)
hist(R2A_s1_n100,breaks=11)

如果有人可以提供帮助,我将不胜感激,我已经尝试了很多解决方案并查看了一些论坛,但没有任何区别。

抱歉我的英语语法错误。

非常感谢!

所以我假设您最初的 object.1 调用应该只有五个参数,例如 Monte.Carlo 函数本身,并将其缩短为:

object.1 = replicate(1000,Monte.Carlo(30,0.5,1.4,0.8,X1))

然后我制作了一个虚拟数据框(这是一个列表列表),列名是您指定的统计信息

o1 <- data.frame(b0 = 0, b1 = 0, R2 = 0, R2A = 0, vP = 0)

然后创建了一个for循环...

for (r in 1:length(object.1)) {
         o1[r,"b0"]  <- object.1[4,r][[1]][1,1]
         o1[r,"b1"]  <- object.1[4,r][[1]][2,1]
         o1[r,"R2"]  <- object.1[8,r]
         o1[r,"R2A"] <- object.1[8,r]
         o1[r,"vP"]  <- object.1[4,r][[1]][2,4]
}

...对于您的 Monte.Carlo 函数的每次复制以及通过子集函数提取的相关统计信息 - [[]] 和 [=18],都会向 o1 添加一个新行=] - 来自 object.1 中创建的一千个 summary(lm(Y~X)) 个对象中的每一个。 o1 是一个数据框,每列都是每个统计量 1000 的向量。对 object.2、object.3 等应用相同的原则

p.s。 运行 for 循环,你会收到一条错误消息,说 Error in object.1[4, r] : subscript out of bounds 但随后打开 o1,你会看到循环完美运行(我什至检查了每个复制的单独统计信息,它们匹配,所以,不太了解那个:)