【发布时间】:2014-11-15 21:26:00
【问题描述】:
我正在阅读 R-bloggers 上的这篇博文,但我对代码的最后一部分感到困惑,无法弄清楚。
http://www.r-bloggers.com/self-organising-maps-for-customer-segmentation-using-r/
我试图用我自己的数据重新创建它。我有 5 个变量遵循 2755 个点的指数分布。
我很好,可以绘制它生成的地图:
plot(som_model, type="codes")
我不明白的代码部分是:
var <- 1
var_unscaled <- aggregate(as.numeric(training[,var]),by=list(som_model$unit.classif),FUN = mean, simplify=TRUE)[,2]
plot(som_model, type = "property", property=var_unscaled, main = names(training)[var], palette.name=coolBlueHotRed)
据我了解,这部分代码应该是在地图上绘制其中一个变量以查看它的外观,但这是我遇到问题的地方。当我运行这部分代码时,我收到警告:
Warning message:
In bgcolors[!is.na(showcolors)] <- bgcol[showcolors[!is.na(showcolors)]] :
number of items to replace is not a multiple of replacement length
它会产生情节:
这只是一些看起来不正确...
现在我认为归结为聚合函数重新排序数据的方式。 var_unscaled 的长度是 789,som_model$data、training[,var] 和 unit.classif 的长度都是 2755。我尝试绘制聚合数据,结果没有警告,而是一个难以理解的图形(如预期的那样)。
现在我认为它已经这样做了,因为 unit.classif 里面有很多重复的数字,这就是它减小大小的原因。
问题是,我担心警告吗?它是否产生了准确的图表?在 plot 命令中寻找的“属性”部分到底是什么?有没有其他方法可以“聚合”数据?
【问题讨论】:
-
如果情节不正确,那么是的,请担心警告。实际上,您应该始终关注收到警告的原因。我还没有完全检查出来,但我注意到你在
aggregate的末尾有一个子集。有必要吗? -
您应该提供reproducible example,以便我们可以运行与您相同的代码并得到相同的错误。否则我们真的无法知道您的数据是如何存储在每个对象中的,或者它们应该如何在 plot 语句中组合。
-
调色板
coolBlueHotRed来自哪里,它的长度是多少?它很可能被配置为匹配示例数据,而不是您的数据。 -
coolBlueHotRed 托盘是:coolBlueHotRed