首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在“网格搜索”系列组合上应用函数

在“网格搜索”系列组合上应用函数
EN

Stack Overflow用户
提问于 2018-03-06 00:20:30
回答 1查看 679关注 0票数 0

我想测试一个简单的线性回归模型的输出与通过“网格搜索”组合的方法改变的数据的输出,以找到最佳的数据准备。

假设我有x个测试变量,每个变量包含n行数据。X和n可以随不同的数据集而变化。我还有一个缩放向量,v,它的长度也是可变的。

例如:

代码语言:javascript
运行
复制
tbl <-  read.table(text = 
    "Field1 Field2
    100 200
    150 180
    200 160
    280 250
    300 300
    300 250",
header = TRUE) #length(x) is 2 here

v <- c(0, 0.1, 0.2) # length(v) is 3

我想要做的是循环遍历(或“应用”?)缩放向量v的每个组合的子集,并在每次迭代中测试我的模型。

换句话说,有效地循环遍历每个x的v的可能值:

代码语言:javascript
运行
复制
Field 1   Field 2
0.0       0.0
0.1       0.0
0.2       0.0
0.0       0.1
0.1       0.1
0.2       0.1
0.0       0.2
0.1       0.2
0.2       0.2

在每次迭代中,按字段1的列中的值缩放字段1,并按字段2的值缩放字段2。我的缩放函数实际上是filter(tbl, v, method="recursive") (thanks!) -所以在第一次迭代中,我的数据帧将保持不变( Field1和Field2都有v=0),在第二次迭代中,字段1将应用参数v= 0.1的过滤函数,但字段2将保持不变(v=0)……并且组合4将使字段1保持不变(v = 0),但是字段2将应用参数v= 0.1的滤波器。

我可以通过嵌套一个循环来强行实现这一点,但是我会有不同数量的x变量(可能在1到10之间),v的长度也可能不同。写出10个嵌套循环感觉是错误的。

我可以创建这些可能的组合的矩阵,然后以某种方式将它们应用于我的数据框架吗?我不知道该怎么做,如果是这样的话,任何帮助都将不胜感激!

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2018-03-07 18:09:15

最后,我选择了一个半暴力的回答。

首先,我创建了一个包含所有组合的网格

代码语言:javascript
运行
复制
combo.matrix <- expand.grid(replicate(length(x), list(v), simplify = T))

然后我循环遍历这个网格的每一行,嵌套在每个v上的循环中。

代码语言:javascript
运行
复制
 for (r in 1:nrow(combo.matrix)) {

   new.df <- source.data  # Reset

   for (x in 1:length(v)) {

        new.df[,colnames(new.df) == v[x]] <- base::filter(
                new.df[,colnames(new.df) == v[x]], 
                combo.matrix[r, colnames(combo.matrix) == v[x]], 
                method="recursive")

    }

    # Run regression
    regression <- lm(lm.formula, data=new.df)
    reg.results$Adjusted.r2[r] <- summary(regression)$adj.r.squared
 }

应用函数可能会更好,但我不确定它是如何工作的。正确答案奖励给任何能做到的人:) -但除此之外,我准备好了。谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49114927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档