R中的回归按分类变量中的级别迭代

时间:2014-02-25 16:22:54

标签: r memory cluster-analysis regression prediction

所以我有一个很小的数据集应该很适合建模(<100万条记录),但是一个变量给我带来了问题。它是一个带有~98级别的分类变量,称为[store] - 这是每个商店的名称。我试图预测每个商店销售[sales]这是一个连续的数字变量。因此,向量大小超过10GB并且在R中出现内存错误。是否可以制作98个不同的回归方程,并为[store]的每个级别逐个运行它们?

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

1 个答案:

答案 0 :(得分:2)

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

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函数。