Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Tiago Peixoto
graphtool
Commits
17cfac1f
Commit
17cfac1f
authored
Nov 27, 2016
by
Tiago Peixoto
Browse files
inference.rst: Update doctests
parent
187b6c04
Pipeline
#234
failed with stage
in 289 minutes and 20 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Sidebyside
Showing
2 changed files
with
37 additions
and
33 deletions
+37
33
doc/demos/inference/inference.rst
doc/demos/inference/inference.rst
+16
16
doc/test_inference.py
doc/test_inference.py
+21
17
No files found.
doc/demos/inference/inference.rst
View file @
17cfac1f
...
...
@@ 456,7 +456,7 @@ case of the `C. elegans` network we have
:options: +NORMALIZE_WHITESPACE
Nondegreecorrected DL: 8507.97432099
Degreecorrected DL: 82
28.11609772
Degreecorrected DL: 82
49.76252971
Since it yields the smallest description length, the degreecorrected
fit should be preferred. The statistical significance of the choice can
...
...
@@ 482,12 +482,12 @@ fits. In our particular case, we have
.. testoutput:: modelselection
:options: +NORMALIZE_WHITESPACE
ln Λ: 2
79.85822327
2
ln Λ: 2
58.21179128
2
The precise threshold that should be used to decide when to `reject a
hypothesis <https://en.wikipedia.org/wiki/Hypothesis_testing>`_ is
subjective and contextdependent, but the value above implies that the
particular degreecorrected fit is around :math:`e^{28
0
} \sim 10^{1
2
1}`
particular degreecorrected fit is around :math:`e^{2
5
8} \sim 10^{11
2
}`
times more likely than the nondegree corrected one, and hence it can be
safely concluded that it provides a substantially better fit.
...
...
@@ 509,12 +509,12 @@ example, for the American football network above, we have:
.. testoutput:: modelselection
:options: +NORMALIZE_WHITESPACE
Nondegreecorrected DL: 17
49.51938237
Degreecorrected DL: 17
80.57671694
ln Λ: 
31.0573345685
Nondegreecorrected DL: 17
38.71605436
Degreecorrected DL: 17
95.27140372
ln Λ: 
56.5553493622
Hence, with a posterior odds ratio of :math:`\Lambda \sim e^{
3
6} \sim
10^{
16
}` in favor of the nondegreecorrected model, it seems like the
Hence, with a posterior odds ratio of :math:`\Lambda \sim e^{
5
6} \sim
10^{
24
}` in favor of the nondegreecorrected model, it seems like the
degreecorrected variant is an unnecessarily complex description for
this network.
...
...
@@ 1068,8 +1068,8 @@ evidence efficiently, as we show below, using
.. testoutput:: modelevidence
Model evidence for deg_corr = True: 575.8
6497206
7 (mean field), 
802.39062289
(Bethe)
Model evidence for deg_corr = False: 
584.307313493
(mean field), 7
07.827204203
(Bethe)
Model evidence for deg_corr = True: 575.8
8966703
7 (mean field), 
794.733483508
(Bethe)
Model evidence for deg_corr = False: 
618.120673252
(mean field), 7
29.104723167
(Bethe)
If we consider the more accurate approximation, the outcome shows a
preference for the nondegreecorrected model.
...
...
@@ 1133,8 +1133,8 @@ approach for the same network, using the nested model.
.. testoutput:: modelevidence
Model evidence for deg_corr = True: 3
46.618790006
(mean field), 6
0
1.
313781849
(Bethe)
Model evidence for deg_corr = False: 3
74.614350884
(mean field), 5
63.256840699
(Bethe)
Model evidence for deg_corr = True: 3
33.948404832
(mean field), 6
5
1.
91054824
(Bethe)
Model evidence for deg_corr = False: 3
60.235692786
(mean field), 5
49.293909028
(Bethe)
The results are similar: If we consider the most accurate approximation,
the nondegreecorrected model possesses the largest evidence. Note also
...
...
@@ 1363,11 +1363,11 @@ above).
..
testoutput
::
missing

edges
likelihood

ratio
for
(
101
,
102
):
0.
37230
8
likelihood

ratio
for
(
17
,
56
):
0.
62769
2
likelihood

ratio
for
(
101
,
102
):
0.
43655
8
likelihood

ratio
for
(
17
,
56
):
0.
56344
2
From
which
we
can
conclude
that
edge
:
math
:`(
17
,
56
)`
is
around
twice
as
likely
as
:
math
:`(
101
,
102
)`
to
be
a
missing
edge
.
From
which
we
can
conclude
that
edge
:
math
:`(
17
,
56
)`
is
more
likely
than
:
math
:`(
101
,
102
)`
to
be
a
missing
edge
.
The
prediction
using
the
non

nested
model
can
be
performed
in
an
entirely
analogous
fashion
.
...
...
doc/test_inference.py
View file @
17cfac1f
...
...
@@ 28,23 +28,26 @@ rec_p = g.new_ep("double", random(g.num_edges()))
rec_s
=
g
.
new_ep
(
"double"
,
normal
(
0
,
10
,
g
.
num_edges
()))
def
gen_state
(
directed
,
deg_corr
,
layers
,
overlap
,
rec
,
allow_empty
):
def
gen_state
(
directed
,
deg_corr
,
layers
,
overlap
,
rec
,
rec_type
,
allow_empty
):
u
=
GraphView
(
g
,
directed
=
directed
)
if
layers
!=
False
:
state
=
graph_tool
.
inference
.
LayeredBlockState
(
u
,
B
=
u
.
num_vertices
(),
deg_corr
=
deg_corr
,
ec
=
ec
.
copy
(),
rec
=
rec
,
recs
=
[
rec
]
if
rec
is
not
None
else
[],
rec_types
=
[
rec_type
]
if
rec
is
not
None
else
[],
overlap
=
overlap
,
layers
=
layers
==
True
,
allow_empty
=
allow_empty
)
elif
overlap
:
state
=
graph_tool
.
inference
.
OverlapBlockState
(
u
,
B
=
2
*
u
.
num_edges
(),
rec
=
rec
,
recs
=
[
rec
]
if
rec
is
not
None
else
[],
rec_types
=
[
rec_type
]
if
rec
is
not
None
else
[],
deg_corr
=
deg_corr
)
else
:
state
=
graph_tool
.
inference
.
BlockState
(
u
,
B
=
u
.
num_vertices
(),
rec
=
rec
,
recs
=
[
rec
]
if
rec
is
not
None
else
[],
rec_types
=
[
rec_type
]
if
rec
is
not
None
else
[],
deg_corr
=
deg_corr
,
allow_empty
=
allow_empty
)
return
state
...
...
@@ 53,7 +56,7 @@ def gen_state(directed, deg_corr, layers, overlap, rec, allow_empty):
pranges
=
[(
"directed"
,
[
False
,
True
]),
(
"overlap"
,
[
False
,
True
]),
(
"layered"
,
[
False
,
"covariates"
,
True
]),
(
"rec"
,
[
None
,
"
positive"
,
"signed
"
]),
(
"rec"
,
[
None
,
"
realexponential"
,
"realnormal
"
]),
(
"deg_corr"
,
[
False
,
True
]),
(
"dl"
,
[
False
,
True
]),
(
"degree_dl_kind"
,
[
"uniform"
,
"distributed"
,
"entropy"
]),
...
...
@@ 84,13 +87,13 @@ for pvals in iter_ranges(pranges):
print
(
params
,
file
=
out
)
rec_
=
None
if
rec
==
"
positive
"
:
if
rec
==
"
realexponential
"
:
rec_
=
rec_p
elif
rec
==
"
signed
"
:
elif
rec
==
"
realnormal
"
:
rec_
=
rec_s
print
(
"
\t
mcmc (unweighted)"
,
file
=
out
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
allow_empty
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
rec
,
allow_empty
)
print
(
"
\t\t
"
,
state
.
mcmc_sweep
(
beta
=
0
,
...
...
@@ 107,7 +110,7 @@ for pvals in iter_ranges(pranges):
exact
=
exact
)),
state
.
get_nonempty_B
(),
file
=
out
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
allow_empty
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
rec
,
allow_empty
)
if
not
overlap
:
print
(
"
\t
mcmc"
,
file
=
out
)
...
...
@@ 136,7 +139,7 @@ for pvals in iter_ranges(pranges):
print
(
"
\t
merge"
,
file
=
out
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
allow_empty
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
rec
,
allow_empty
)
if
not
overlap
:
bstate
=
state
.
get_block_state
(
vweight
=
True
,
deg_corr
=
deg_corr
)
...
...
@@ 174,7 +177,7 @@ for pvals in iter_ranges(pranges):
print
(
"
\t
shrink"
,
file
=
out
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
allow_empty
)
state
=
gen_state
(
directed
,
deg_corr
,
layered
,
overlap
,
rec_
,
rec
,
allow_empty
)
state
=
state
.
shrink
(
B
=
5
,
entropy_args
=
dict
(
dl
=
dl
,
degree_dl_kind
=
degree_dl_kind
,
multigraph
=
False
,
...
...
@@ 185,7 +188,7 @@ for pvals in iter_ranges(pranges):
pranges
=
[(
"directed"
,
[
False
,
True
]),
(
"overlap"
,
[
False
,
True
]),
(
"layered"
,
[
False
,
"covariates"
,
True
]),
(
"rec"
,
[
None
,
"
positive"
,
"signed
"
]),
(
"rec"
,
[
None
,
"
realexponential"
,
"realnormal
"
]),
(
"deg_corr"
,
[
False
,
True
]),
(
"degree_dl_kind"
,
[
"uniform"
,
"distributed"
,
"entropy"
]),
(
"exact"
,
[
True
])]
...
...
@@ 205,16 +208,17 @@ for pvals in iter_ranges(pranges):
print
(
params
,
file
=
out
)
rec_
=
None
if
rec
==
"
positive
"
:
rec_
=
[]
if
rec
==
"
realexponential
"
:
rec_
=
rec_p
elif
rec
==
"
signed
"
:
elif
rec
==
"
realnormal
"
:
rec_
=
rec_s
if
layered
!=
False
:
state_args
=
dict
(
ec
=
ec
,
layers
=
(
layered
==
True
),
rec
=
rec_
)
state_args
=
dict
(
ec
=
ec
,
layers
=
(
layered
==
True
),
recs
=
[
rec_
],
rec_types
=
[
rec
])
else
:
state_args
=
dict
(
rec
=
rec_
)
state_args
=
dict
(
rec
s
=
[
rec_
],
rec_types
=
[
rec
]
)
entropy_args
=
dict
(
exact
=
exact
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment