0

我正在使用 lm() 函数开发和优化线性模型,随后使用 step() 函数进行优化。我通过使用 0 和 1 的随机生成器(每个 50% 的机会)向我的数据帧添加了一个变量。我使用此变量将数据帧子集化为训练集和验证集如果未将记录分配给训练集,则将其分配给验证集。通过使用这些子集,我能够估计模型的拟合程度(通过对验证集中的记录使用预测函数并将它们与原始值进行比较)。我对优化模型的系数以及预测结果和实际结果分布之间的 KS 检验结果感兴趣。

我所有的代码都运行良好,但是当我想测试我的模型是否对我选择的子集敏感时,我遇到了一些问题。为此,我想创建一个 for (i in 1:10) 循环,每次使用不同的随机子集。这对我来说是一个相当大的挑战(我以前从未在 R 中使用过 for 循环)。

这是问题所在(实际上有很多问题,但这是其中之一):

我想为循环中的每个运行都有单独的数据框,并具有唯一的名称(例如:Run1、Run2、Run3)。我已经能够使用 paste(("Run",1:10,sep="") 创建一个具有不同字符串的变量,但这只是给你一个字符串列表。如何使用这些字符串作为我的 (子集)数据帧?

我预计会遇到的另一个问题:随后我想为每次运行使用拟合系数并将其导出到 Excel。通过使用 coef(function) 我已经能够检索系数,但是由于优化算法,模型中包含的系数的数量可能会在每次模拟运行时发生变化。这几乎肯定会给我将它们粘贴到同一个数据框中带来一些麻烦,对此有什么想法吗?

谢谢你的协助。

4

2 回答 2

5

对于你的第一个问题:

您可以像以前一样创建字符串,使用

df.names <- paste(("Run",1:10,sep="")

然后,创建您的 for 循环并执行以下操作,为数据框指定您想要的名称:

for (i in 1:10){
   d.frame <- # create your data frame here
   assign(df.name[i], d.frame)
}

现在您将得到十个具有十个不同名称的数据框。

关于系数的第二个问题:

据我所知,这些并不自然地适合您的数据框结构。您应该考虑使用列表,因为它们允许不同的类 - 换句话说,对于每次运行,创建一个列表,其中包含一个数据框和一个带有系数的数字向量。

于 2012-07-24T19:50:09.700 回答
4

不要创建名称中带有数字的对象,然后尝试使用 get、paste 和 assign 在循环中访问它们。正确的做法是将元素存储在 R 列表对象中。

于 2012-07-24T19:58:54.187 回答