2014-02-07 2 views
1

관심 변수가 소프트웨어 응용 프로그램 인 공동 발생 데이터의 데이터 세트를 작성하려고합니다. 각 셀에 숫자가있는 nx 행렬을 시뮬레이트하고 싶습니다. 애플리케이션 A가 애플리케이션 B와 함께 사용 된 횟수. R의 클러스터링 및 파티셔닝 알고리즘 세트를 테스트하는 데 사용할 수있는 데이터 세트를 어떻게 만들 수 있습니까? 어떤 모델을 사용할 것이며 R에 데이터를 어떻게 생성합니까?R에서 공동 발생 데이터 시뮬레이션

+0

어떤 종류의 클러스터링/파티션 알고리즘 또는 패키지를 사용할 계획입니까? 그러면 입력 데이터 형식이 결정됩니다. – thelatemail

+0

나는 알고리즘의 조합을 사용하여 성능을 테스트했습니다. 그러나 데이터를 테스트하려면 샘플 데이터가 필요합니다. 어떻게 데이터 셋을 만들 수 있습니까? – amber4478

답변

1
n <- 10 
apps <- LETTERS[1:n] 
data <- matrix(0,n,n) 
rownames(data) <- apps 
colnames(data) <- apps 

# create artificial clusters 
data[1:3,1:5] <- matrix(sample(3:5,15,replace=T),3,5) 
data[6:9,4:8] <- matrix(sample(1:3,20,replace=T),4,5) 

# clustering 
hc <- hclust(dist(data)) 
plot(hc) 
rect.hclust(hc, k=2) 

참고 :이 답변이 (가) 동시 발생 행렬이 대칭이어야 사실을 반영하기 위해 수정되었습니다. 당신이 동시 발생의 행렬이 아마 같은 무언가를 선호하는 경우

1
set.seed(42) 
# software names: 
software <- c("a","b","c","d") 
# times each software used: 
times.each.sw <- c(5,10,12,3) 

# co-occurrence data.frame 
swdf <- setNames(data.frame(t(combn(software,2))),c("sw1","sw2")) 
swdf$freq.cooc <- apply(combn(times.each.sw,2),2,function(x) sample(1:min(x),1)) 
# sw1 sw2 freq.cooc 
#1 a b   5 
#2 a c   5 
#3 a d   1 
#4 b c   9 
#5 b d   2 
#6 c d   2 

는 :

mat <- diag(times.each.sw) 
dimnames(mat) <- list(software,software) 
mat[lower.tri(mat)] <- swdf$freq.cooc 
mat[upper.tri(mat)] <- t(mat)[upper.tri(mat)] 

# a b c d 
#a 5 5 5 1 
#b 5 10 9 2 
#c 5 9 12 2 
#d 1 2 2 3 

대각선은 (자체 사용 즉) 각 소프트웨어가 사용 된 횟수를 포함한다. 아래쪽/위 삼각형에는 각 조합이 사용 된 횟수가 포함되며, 자주 사용 빈도가 적은 횟수만큼 항상 같아야합니다.

+0

이것은 정확히 내가 생성하려고하는 것입니다. 감사합니다. 그러나 시뮬레이트 된 데이터를 생성하기 위해 어떤 샘플링 분포를 사용해야합니까? – amber4478

관련 문제