自组织网络图代码子集

时间:2016-09-09 21:47:05

标签: r som

我使用R中的Kohonen软件包将SOM应用于我所拥有的基因组数据集。 SOM有55个变量。我想将这些变量的代码子集绘制为扇形图。例如,只使用R中的葡萄酒数据集:

library(kohonen)
data(wines)
set.seed(7)

training <- sample(nrow(wines), 120)
Xtraining <- scale(wines[training, ])
Xtest <- scale(wines[-training, ],
           center = attr(Xtraining, "scaled:center"),
           scale = attr(Xtraining, "scaled:scale"))

som.wines <- som(Xtraining, grid = somgrid(5, 5, "hexagonal"))
plot(som.wines, type="codes")

这将每个节点上每个预测变量的权重绘制为一个粉丝图。在这个例子中我想做的是情节说,只是在粉丝图中的镁,灰,苹果酸和黄酮类化合物。

plot(som.wines, type = "property", property = som.wines$codes[,'magnesium'])

将绘制每个节点上镁的重量。

做类似

的事情
plot(som.wines, type = "property", property =som.wines$codes[,c('magnesium','ash')])

用每个节点的灰分重量覆盖镁重量。

此外还有:

plot(som.wines, type = "codes", property = som.wines$codes[,c('magnesium','ash')],)

也不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

嗯,我们知道

class(som.wines)
# [1] "kohonen"

因此,此处触发的绘图方法为kohonen:::plot.kohonen。当您设置type =“codes”时,会将命令固定为kohonen:::plot.kohcodes。经过检查,它似乎只使用您传递它的对象的$codes$grid属性。如果要直接对这些值进行子集化,这似乎是安全的。例如

keep <- c("magnesium", "ash", "malic acid", "flavonoids")
xx <- som.wines
xx$codes<-xx$codes[,keep]
plot(xx, type="codes")

这会产生

enter image description here