【问题标题】:Regression in R iteratively by levels in categorical variable通过分类变量中的级别迭代地回归 R
【发布时间】:2014-03-28 00:34:27
【问题描述】:

所以我有一个小数据集,应该非常适合建模(

我的另一个想法是尝试创建 10 或 15 个此 [store] 变量的集群,然后使用集群名称作为我的分类变量来预测 [sales] 变量(连续变量)。

【问题讨论】:

  • 如您所说,您可以按级别进行子集化,然后对它们中的每一个进行sapply 回归。
  • 好的,但我遇到了代码问题。我只知道模型
  • 你能把你目前所拥有的代码放在原始帖子中吗?

标签: r memory cluster-analysis regression prediction


【解决方案1】:

当然,这是一种非常常见的分析类型。例如,下面是您如何通过 Species 变量拆分 iris 数据集,然后构建一个单独的模型,在每个子集中从 Sepal.Length 预测 Sepal.Width

data(iris)
models <- lapply(split(iris, iris$Species), function(df) lm(Sepal.Width~Sepal.Length, data=df))

结果是特定物种回归模型的列表。

要进行预测,我认为首先拆分您的测试集,然后在每个子集上调用相应的预测函数,最后重新组合是最有效的:

test.iris <- iris
test.spl <- split(test.iris, test.iris$Species)
predictions <- unlist(lapply(test.spl, function(df) {
  predict(models[[df$Species[1]]], newdata=df)
}))
test.ordered <- do.call(rbind, test.spl)  # Test obs. in same order as predictions

当然,对于您的问题,您需要决定如何对数据进行子集化。一种合理的方法是使用 kmeans 之类的东西进行聚类,并将每个点的聚类传递给 split 函数。

【讨论】:

  • 谢谢,我想这正是我要找的。 predict() 函数是简单的,还是有一种巧妙的方法来组合所有这些不同的模型? (我会有 98 个)
  • @user2228155 我更新了帖子以包括如何调用predict 函数。
  • 谢谢,您认为这对内存管理有帮助吗?我这样做的唯一原因是因为我没有足够的内存来处理所有数据。那么R会一一计算每个lm,减少任意时间点使用的总内存吗?
  • 您将在更小的数据集上运行回归模型,因此该步骤将占用更少的内存。但是,当您使用 split 将数据集分解为子集时,实际上您已经第二次存储了整个数据集。我建议运行代码,看看它是否有助于解决您的内存问题。
  • 测试了它,得到了这个模型 contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) :对比只能应用于具有 2 个或更多级别的因素
猜你喜欢
  • 2015-11-26
  • 2017-03-31
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2015-10-13
  • 1970-01-01
相关资源
最近更新 更多