[withR]소셜네트워크분석 — r-근처(neighbor)

Neo Jeong
신나는연구소
Published in
3 min readOct 17, 2019

#사회네트워크분석 입문 — 허명회 저. 참조

r-근처(neighbor)는 최단거리가 r이내인 노드의 수로 정의한다. r-근처(neighbor)을 고려하는 이유는 <사회네트워크분석 입문>에서는 ‘연결선 수는 매우 간단하게 노드의 특성을 잘 말해준다. 그러나 동시에 연결선 수는 중심성의 측도로서는 너무 단순하다는 평이 따른다. 네트워크의 특성상 ‘중요한’노드에 연결되어 잇는 노드는 중용한 법인데 단순히 연결선 수가 작다고 해서 과소평가되는 경우가 있기 때문이다’라고 말한다.

각 노드 반경 r의 울타리 안에 자신 외 노드들이 몇 개가 있는지 파악한다. 즉, 노드별 부근의 밀도 개념이 된다.

COUN COMM EDUC INDU MAYR WRO NEWS UWAY WELF WEST
0 0 1 0 1 0 0 1 1 1
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 1 1 1 0
0 1 1 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 1
0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0

위의 행렬로 형성된 네트워크를 예로 r-neighbor를 구해보자. 위의 행렬의 이름을 knoke.money로 칭하자.

gplot(knoke.money, displaylabels=T)

knoke.money네트워크의 최단거리 행렬을 구하기 위해서는 소셜네트워크분석 패키지 sna의 geodist()함수를 사용한다.

D <- geodist(knoke.money)$gdist

D

행렬 D를 출력해보면 최단거리 행렬을 확인 할 수 있다.

r-근처(neighbor)에서도 나가는 방향과 들어오는 방향을 고려하여 파악한다. 우선 나가는 방향에서 생각을 해보자.

연결선의 수에서 나가는 방향의 수를 고려할때는 각 행의 합으로 그 수를 파악할 수 있었다. 여기서도 그과정을 이용하여 r-근처를 구할 것이다. 한가지 더 고려되는 점은 r의 거리 안에 들어있는 노드의 갯수를 파악한다는 것이다.

out.1 <- apply(D <=1,1,sum)-1
out.2 <- apply(D <=2,1,sum)-1
out.3 <- apply(D <=3,1,sum)-1

이 코드는 각각 r=1,2,3의 경우를 구한 것이다. apply는 행열의 열 또는 행의 계산을 손쉽게 도와주는 함수이다. apply(대상,(1=행 or 2=열), 함수)형태로 사용된다. 즉 나가는 방향은 행의 합으로 파악되므로 1로, 그리고 행렬의 요소가 1보다 작거나 같은 요소들을 D<=1로 표현 하였고, 마지막으로 sum함수를 이용해서 D<=1의 부합하는 요소의 갯수를 구하였다. 마지막에 -1을 하는 이유는 자기 자신을 빼기 위해서이다.

여기서 잠시 r=1일때를 축력해보면 [1] 5 1 1 5 4 0 2 2 2 0 의 값을 가진다. 이 값은 degree(knoke.money,cmode=”outdegree”)로 구한 나가는 방향의 연결선의 수와 동일한 값을 갖는다.

들어오는 방향에 r-근처(neighbor)는 아래 처럼 구한다.

in.1 <- apply(D <=1,2,sum)-1
in.2 <- apply(D <=2,2,sum)-1
in.3 <- apply(D <=3,2,sum)-1

들어오는 방향에서도 degree(knoke.money,cmode=”indegree”)와 r=1일 경우는 같은 값을 갖는다.

--

--

Neo Jeong
신나는연구소

#Data Analyst #세상을 보는 데이터 분석가 #책을 읽는 몽상가