2014-09-22 3 views
5

저는 R-bloggers에 대한이 블로그 게시물을 읽고 있었고 코드의 마지막 섹션에 혼란 스럽습니다. 알아낼 수 없습니다.R에서 Kohonen 맵을 플로팅하는 중 오류가 발생 했습니까?

http://www.r-bloggers.com/self-organising-maps-for-customer-segmentation-using-r/

난 내 자신의 데이터와이를 다시 시도했습니다. 2755 포인트의 지수 분포를 따르는 5 개의 변수가 있습니다.

나는 괜찮 오전이 생성하는지도 플롯 할 수 있습니다 :

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) 

로 :

plot(som_model, type="codes") 

enter image description here

이해가 안 코드의 섹션이입니다 코드의이 섹션은지도의 변수 중 하나를 어떻게 보이는지 알아보기 위해 변수 중 하나를 플로팅하는 것으로 가정하고 있지만 문제가되는 부분입니다. 나는이 부분의 코드를 실행하면 내가 경고 얻을 :

Warning message: 
In bgcolors[!is.na(showcolors)] <- bgcol[showcolors[!is.na(showcolors)]] : 
number of items to replace is not a multiple of replacement length 

을 그리고 플롯을 생성합니다 그냥 어떻게 제대로 보이지 않습니다

enter image description here ...

이제는 집계 함수가 데이터를 다시 정렬하는 방식에 대해 생각했습니다. var_unscaled의 길이는 789이고 som_model $ data, training [, var] 및 unit.classif의 길이는 모두 길이가 2755입니다. 집계 된 데이터를 플롯했는데 결과는 경고가 아니지만 이해할 수없는 그래프였습니다 (예상대로).

이제 unit.classif에 반복되는 숫자가 많아 크기가 줄어들었기 때문에이 작업이 완료된 것 같습니다.

질문에 대한 경고는 걱정합니까? 정확한 그래프를 생성합니까? plot 명령에서 찾고자하는 "Property"섹션은 정확히 무엇입니까? 데이터를 "집계"할 수있는 다른 방법이 있습니까?

+0

을 플롯 정확하지가 다음 네, 경고에 대해 걱정하는 경우합니다. 실제로 경고를받는 이유는 항상 염려해야합니다. 나는 그것을 완전히 조사하지는 않았지만, 당신은'aggregate'의 끝 부분에 서브 세트가 있음을 발견했습니다. 그게 필요한가요? –

+2

동일한 코드를 실행할 수 있도록 [reproducible example] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)을 제공해야합니다. 같은 오류. 그렇지 않으면 우리는 실제로 데이터가 각각의 객체에 어떻게 저장되는지 또는 plot 문에 어떻게 결합되어야 하는지를 알 수 없습니다. – MrFlick

+0

팔레트'coolBlueHotRed'는 어디에서 왔으며 길이는 얼마입니까? 데이터가 아닌 예제 데이터와 일치하도록 구성 될 수 있습니다. –

답변

8

팔레트 색상을 만들어야한다고 생각합니다. 당신이 인수를 넣으면

coolBlueHotRed <- function(n, alpha = 1) {rainbow(n, end=4/6, alpha=alpha)[n:1]} 

한 다음 예를

plot(som_model, type = "count", palette.name = coolBlueHotRed) 

끝이 성공적인 때문이다, 플롯을 얻을하려고합니다.

이 링크는 당신을 도울 수 있습니다 : http://rgm3.lab.nig.ac.jp/RGM/R_rdfile?f=kohonen/man/plot.kohonen.Rd&d=R_CC

0

내가 내 지점이없는 모든지도에 세포의 생각합니다. 지도가 30x30이고 약 2700 포인트가 있습니다. 평균적으로 셀 당 약 3 점입니다. 높은 확률로 일부 셀은 3 점 이상을 가지며 일부 셀은 비어 있습니다.

R 블로거에 대한 게시물의 코드는 모든 셀의 내부에 포인트가 있으면 잘 작동합니다.이 하나

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) 

:

var <- 1 
var_unscaled <- aggregate(as.numeric(data.temp[, data.classes][, var]), 
          by = list(som_model$unit.classif), 
          FUN = mean, 
          simplify = T) 
v_u <- rep(0, max(var_unscaled$Group.1)) 
v_u[var_unscaled$Group.1] <- var_unscaled$x 
plot(som_model, 
    type = "property", 
    property = v_u, 
    main = colnames(data.temp[, data.classes])[var], 
    palette.name = coolBlueHotRed) 

는 희망이 도움이 데이터에 작동하도록

이 부분을 변경하려고합니다.

0

그냥 스크립트에이 기능을 추가 :

coolBlueHotRed <- function(n, alpha = 1) {rainbow(n, end=4/6, alpha=alpha)[n:1]} 

pretty_palette <- c("#1f77b4","#ff7f0e","#2ca02c", "#d62728","#9467bd","#8c564b","#e377c2")