2013-01-23 3 views
2

제가 학위 분포를 그리기위한 스크립트의 출력이 올바른지 여부를 알고 싶습니다.도 분포도를 그릴 방법 R

그래서 스크립트 (내 모든 정점의 정도와 벡터 X에 저장된 위치)입니다 :

X

x 
[1] 7 9 8 5 6 2 8 9 7 5 2 4 6 9 2 6 10 8 

입니다 X 특정 네트워크 정점의 정도이다 - 정점처럼 V2 요약 (X)

library(igraph) 
split.screen(c(1,2)) 
screen(1) 
plot (tabulate(x), log = "xy", ylab = "Frequency (log scale)", xlab = "Degree (log scale)", main = "Log-log plot of degree distribution") 
screen(2) 
y <- (length(x) - rank(x, ties.method = "first"))/length(x) 
plot(x, y, log = "xy", ylab = "Fraction with min. degree k (log scale)", xlab = "Degree (k) (log scale)", main = "Cumulative log-log plot of degree distribution") 
close.screen(all = TRUE) 
power.law.fit(x, xmin = 50) 

내 문제이다 t - 1 정점 2도 9를 갖는 등 < X는,도 7을 갖는다 모자 로그 로그 음모가 잘못된 것 같습니다 - 예를 들어, 나는 '7'정도의 총점을 가지고 있으므로 로그 로그 플롯에서이 지점을 0.845 (log 7)/0.903 (log (8) as in (x/y)?

또한 누군가가 화면 2의 줄거리에 로그 (로그 - 로그 눈금에의 힘 - 법칙)을 맞추는 방법을 말해 줄 수 있습니까?

답변

4

나는 igraph 패키지로는 익숙하지 않으므로 특정 패키지에 도움이되지 않을 수 있습니다. 그러나 다음은 로그 - 로그 플롯에서 분포를 플로팅하는 코드입니다. 우선 몇 가지 데이터 :

set.seed(1) 
x = ceiling(rlnorm(1000, 4)) 

그런 다음 우리는 다시 정렬 할 필요가있는 역 CDF 얻을 :

occur = as.vector(table(x)) 
occur = occur/sum(occur) 
p = occur/sum(occur) 
y = rev(cumsum(rev(p))) 
x = as.numeric(names(table(x))) 
plot(x, y, log="xy", type="l") 

이 피팅 질문에 대해서는

enter image description here

를 제공을, 나는 불일치가 발생 생각 igraph은 MLE를 사용하기 때문에 단순 선형 회귀를 수행하는 것이 좋습니다 (권장하지 않음). 플러그의 조금으로


, 나는 피팅 및 플로팅 powerlaws에 대한 package 작업을 시작했습니다. 그래서, 당신이 얻을이 패키지 사용 :

library(poweRlaw) 

##Create a displ object 
m = displ$new(x) 
##Estimate the cut-off 
estimate_xmin(m) 
m$setXmin(105); m$setPars(2.644) 

##Plot the data and the PL line 
plot(m) 
lines(m, col=2) 

enter image description here

+0

어떻게 이러한 불일치를 생산 MLE 수? 간단한 설명이 있습니까? –

+0

죄송합니다. 설명 할 수 있겠습니까? 관찰 된 패턴이 맞습니까? –