2013-03-04 2 views
-5

나는 그들의 관계 수준을 계산하기 위해 세션에서 개인의 출현을 합산하는 더 빠른 방법을 찾고자합니다. 기본적으로, 나는 두 사람에게 적어도 한 사람이 몇 번이나 관찰되었는지를 세기 싶습니다. 나는 녹아 내고 acast를 포함하여 여기에 답을 보았지만 그것을 사용하는 좋은 방법을 찾지 못했습니다. 이것은 내 비효율적 인 코드입니다.R 발생 행렬을 만듭니다.

presence=array(0,c(8,10)) # session by individual 
counter=array(0,c(10,10)) 
# put some data into the array: 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 1 0 0 0 0 0 0 0  0 
[2,] 0 0 1 1 1 1 0 0 0  0 
[3,] 0 0 0 0 0 0 1 0 0  0 
[4,] 0 0 0 0 0 0 0 1 0  0 
[5,] 0 0 0 0 0 0 0 1 0  0 
[6,] 0 0 0 0 0 0 0 0 1  0 
[7,] 0 0 0 0 0 0 0 0 1  0 
[8,] 0 0 1 0 1 1 0 0 0  1 


    for (a in 1:10){ 
    for (b in 1:10){ 
     for (c in 1:8) { 
     if ((presence[c,a]>0)|(presence[c,b]>0)) counter[a,b]=counter[a,b]+1 
     # calculate something using this counter for each two individuals a and b 
     } 
    } 
    } 

감사합니다. Amiyaal

+1

내가 당신을 설명 할 필요가 있다고 생각 작동합니다 - 그래서 것 내가 이벤트 사용자 J의 수 + 출석 이벤트 사용자의 수는 참석 조금 더 문제가있어, 여기서 무슨 일이 벌어지고 있는지 전혀 모른다. 원시 데이터는 어떤 모습입니까? 그리고이 코드는 어디에서 나타 납니까? 원시 데이터에서 이벤트에있는 사람들의 동시 발생을 계산하려면 그럴 수도 있습니다. igraph 소셜 네트워크 분석 라이브러리를 살펴 보겠습니다. – slammaster

+0

귀하의 질문에 말한대로 말이되지 않습니다. 용어를 정의하지 않고 "수년 동안 세션에서 개인의 출현을 합계하십시오"라는 문장을 사용하고 제공 한 코드는 쓰레기입니다. – N8TRO

+0

존재 어레이는 연도 i에 어떤 개인이 세션 c에 있었는지 저장합니다. inner for 루프는 1 년 동안 (a 또는 b) 적어도 하나 (예 : 모든 세션 합계)가 있었던 횟수를 계산합니다. 나는 그것이 지금 더 분명하기를 희망한다. – user2133354

답변

0

좋아, 아직 확실하지는 않지만, 존재가 현재 사용자를 나타내고 행이 이벤트를 나타내는 인접 행렬이라고 생각하므로 presence[i,j]은 사용자 i가 이벤트 j에 참석했음을 나타냅니다.

올바르게 해석한다면 카운트가 동시 발생 행렬 인 것 같습니다. 맞습니까? count[i,j]은 사용자 i와 j가 함께 참석 한 이벤트 수를 기록해야합니까?

당신은이 모드 소셜 네트워크 분석을 문헌 조사, 특히 제휴 네트워크로, 이에 대한 직접적인 계산이있는 경우 :

count = t(presence)%*%presence 

지금 내가 만들기 위해 자신의 데이터 것을을 확인 할 정확한지 확인하십시오. 몇 개의 셀을 셀 수없이 임의로 선택하여 존재와 비교하십시오.

또한 이러한 유형의 행렬을 사용하여 행은 전통적으로 사용자이고 이벤트는 열입니다.

EDIT : 대신 사용자가 참석 한 이벤트의 수를 count로 지정하려는 경우 (둘 다 참석 한 이벤트의 수와 반대로) 교차로가 아닌 조합입니다. 교차로 그것은 가장 우아한 해결책이 아니다

x = t(presence)%*%presence 
numEvents = diag(x) 
counts = matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=TRUE)+matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=FALSE)-x 

을하지만

+0

고마워요,하지만 정확히 내가 뭘 찾고있는 건지, CO-OCCURRENCE를 계산하는 동안, 나는 그 중 하나가 존재하는 모든 경우를 세고 싶습니다. – user2133354