Last data update: 2014.03.03

R: A toolbox for Gibbs Random Fields analysis
GiRaF-packageR Documentation

A toolbox for Gibbs Random Fields analysis

Description

GiRaF is a package for calculations on, and sampling from Gibbs (or discrete Markov) random fields.

Details

GiRaF offers various tools for the analysis of Gibbs random fields and more precisely general homogeneous Potts model with possible anisotropy and potential on singletons (cliques composed of single vertex). GiRaF substantially lowers the barrier for practitioners aiming at analysing such Gibbs random fields. GiRaF contains exact methods for small lattices and several approximate methods for larger lattices that make the analysis easier for practitioners.

The “GiRaF-introduction” vignette gives a detailled introduction on the package.

For a complete list of functions, use library(help = "GiRaF").

Author(s)

Julien Stoehr, Pierre Pudlo and Nial Friel.

Maintainer: Julien Stoehr <julien.stoehr@ucd.ie>

References

Friel, N. and Rue, H. (2007). Recursive computing and simulation-free inference for general factorizable models. Biometrika, 94(3):661–672.

Geman, S. and Geman, D. (1984). Stochastic Relaxation, Gibbs Distributions, and the Bayesian Restoration of Images. IEEE Transactions on Pattern Analysis and Machine Intellignence, 6(6):721-741.

Reeves, R. and Pettitt, A. N. (2004). Efficient recursions for general factorisable models. Biometrika, 91(3):751–757.

Swendsen, R. H. and Wang, J.-S. (1987). Nonuniversal critical dynamics in Monte Carlo simulations. Pysical Review Letters, 58(2):86-88.

See Also

The “GiRaF-introduction” vignette

Examples

# Dimension of the lattice
height <- 8
width <- 10

# Interaction parameter
Beta <- 0.6 # Isotropic configuration
# Beta <- c(0.6, 0.6) # Anisotropic configuration when nei = 4
# Beta <- c(0.6, 0.6, 0.6, 0.6) # Anisotropic configuration when nei = 8

# Number of colors
K <- 2 
# Number of neighbors 
G <- 4

# Optional potential on sites
potential <- runif(K,-1,1)
# Optional borders. 
Top <- Bottom <- sample(0:(K-1), width, replace = TRUE)
Left <- Right <- sample(0:(K-1), height, replace = TRUE)
Corner <- sample(0:(K-1), 4, replace = TRUE)

# Partition function for the default setting
NC.mrf(h = height, w = width, param = Beta)

# When specifying the number of colors and neighbors
NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta)

# When specifying an optional potential on sites
NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
       pot = potential)
       
# When specifying possible borders. The users will omit to mention all
# the non-existing borders
NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
       top = Top, left = Left, bottom = Bottom, right = Right, corner = Corner)
       
# Exact sampling for the default setting
exact.mrf(h = height, w = width, param = Beta, view = TRUE)

# When specifying the number of colors and neighbors
exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
          view = TRUE)
          
# When specifying an optional potential on sites
exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
       pot = potential, view = TRUE)
       
# When specifying possible borders. The users will omit to mention all
# the non-existing borders
exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
       top = Top, left = Left, bottom = Bottom, right = Right, corner = Corner, view = TRUE)
       
# Algorithm settings
n <- 200
method <- "Gibbs"

# Sampling method for the default setting
sampler.mrf(iter = n, sampler = method, h = height, w = width, 
            param = Beta, view = TRUE)
            
# Sampling using an existing configuration as starting point
sampler.mrf(iter = n, sampler = method, h = height, w = width, 
            ncolors = K, nei = G, param = Beta, 
            initialise = FALSE, view = TRUE)
            
# Specifying optional arguments. The users may omit to mention all
# the non-existing borders
sampler.mrf(iter = n, sampler = method, h = height, w = width, 
            ncolors = K, nei = G, param = Beta,
            pot = potential, top = Top, left = Left, bottom = Bottom, 
            right = Right, corner = Corner, view = TRUE)
            
# Gibbs sampler with sequential updates of the sites. 
sampler.mrf(iter = n, sampler = "Gibbs", h = height, w = width, 
            ncolors = K, nei = G, param = Beta,
            random = FALSE, view = TRUE)

Results


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(GiRaF)
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/GiRaF/GiRaF-package.Rd_%03d_medium.png", width=480, height=480)
> ### Name: GiRaF-package
> ### Title: A toolbox for Gibbs Random Fields analysis
> ### Aliases: GiRaF-package GiRaF
> ### Keywords: potts mrf gibbs
> 
> ### ** Examples
> 
> # Dimension of the lattice
> height <- 8
> width <- 10
> 
> # Interaction parameter
> Beta <- 0.6 # Isotropic configuration
> # Beta <- c(0.6, 0.6) # Anisotropic configuration when nei = 4
> # Beta <- c(0.6, 0.6, 0.6, 0.6) # Anisotropic configuration when nei = 8
> 
> # Number of colors
> K <- 2 
> # Number of neighbors 
> G <- 4
> 
> # Optional potential on sites
> potential <- runif(K,-1,1)
> # Optional borders. 
> Top <- Bottom <- sample(0:(K-1), width, replace = TRUE)
> Left <- Right <- sample(0:(K-1), height, replace = TRUE)
> Corner <- sample(0:(K-1), 4, replace = TRUE)
> 
> # Partition function for the default setting
> NC.mrf(h = height, w = width, param = Beta)
[1] 3.541494e+45
> 
> # When specifying the number of colors and neighbors
> NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta)
[1] 3.541494e+45
> 
> # When specifying an optional potential on sites
> NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
+        pot = potential)
[1] 5.504831e+27
>        
> # When specifying possible borders. The users will omit to mention all
> # the non-existing borders
> NC.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
+        top = Top, left = Left, bottom = Bottom, right = Right, corner = Corner)
[1] 1.179312e+51
>        
> # Exact sampling for the default setting
> exact.mrf(h = height, w = width, param = Beta, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    1    1    1    1    0    0    1     0
[2,]    1    1    1    1    1    0    0    0    1     1
[3,]    1    1    1    1    0    0    0    0    0     0
[4,]    1    0    1    1    1    0    1    0    1     1
[5,]    0    0    0    1    1    0    1    1    1     1
[6,]    0    0    0    0    0    1    1    1    1     1
[7,]    0    0    0    0    0    1    1    1    1     1
[8,]    0    0    0    0    0    0    0    1    1     1
> 
> # When specifying the number of colors and neighbors
> exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
+           view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    1    0    0    1    1    1    0    0     1
[2,]    0    0    0    1    1    1    1    1    1     1
[3,]    1    0    0    1    1    1    1    1    1     1
[4,]    0    1    1    1    1    0    0    0    1     1
[5,]    1    0    0    0    1    0    0    0    1     0
[6,]    1    1    1    0    1    0    0    0    0     0
[7,]    1    1    0    0    1    0    0    0    0     0
[8,]    0    0    0    1    1    0    0    1    1     1
>           
> # When specifying an optional potential on sites
> exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
+        pot = potential, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    1    0    0    1    1    1    1     1
[2,]    1    1    1    0    1    1    1    1    1     1
[3,]    1    1    1    1    1    1    1    1    1     1
[4,]    1    1    1    1    1    1    1    1    1     1
[5,]    1    1    0    1    1    1    1    1    1     1
[6,]    1    1    0    1    0    1    1    1    1     1
[7,]    1    1    1    1    1    1    1    1    1     1
[8,]    0    0    0    1    1    1    1    1    1     1
>        
> # When specifying possible borders. The users will omit to mention all
> # the non-existing borders
> exact.mrf(h = height, w = width, ncolors = K, nei = G, param = Beta, 
+        top = Top, left = Left, bottom = Bottom, right = Right, corner = Corner, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    1    1    1    1    1    1    0     1
[2,]    0    0    0    0    1    0    1    0    1     1
[3,]    0    0    0    0    1    0    1    0    1     1
[4,]    0    0    0    0    1    1    1    0    0     1
[5,]    1    1    1    1    1    1    1    0    0     1
[6,]    0    1    1    0    1    1    1    0    1     0
[7,]    0    1    1    0    0    1    1    0    0     0
[8,]    0    0    1    0    1    0    1    1    0     1
>        
> # Algorithm settings
> n <- 200
> method <- "Gibbs"
> 
> # Sampling method for the default setting
> sampler.mrf(iter = n, sampler = method, h = height, w = width, 
+             param = Beta, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    1    1    0    1    0    0    1    0     1
[2,]    0    1    1    1    1    1    0    0    0     1
[3,]    0    0    1    0    0    1    0    0    1     0
[4,]    0    0    0    1    0    1    0    0    0     0
[5,]    0    1    1    1    0    0    0    1    0     0
[6,]    0    0    1    1    0    1    1    0    0     0
[7,]    1    1    1    0    1    0    0    0    0     1
[8,]    0    0    1    0    0    0    0    0    0     1
>             
> # Sampling using an existing configuration as starting point
> sampler.mrf(iter = n, sampler = method, h = height, w = width, 
+             ncolors = K, nei = G, param = Beta, 
+             initialise = FALSE, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    1    1    0    1    1    0    0     0
[2,]    1    1    1    1    1    0    0    0    0     1
[3,]    1    1    1    1    0    0    0    1    1     1
[4,]    1    1    1    1    0    0    0    1    1     1
[5,]    1    1    0    1    1    0    0    0    0     0
[6,]    1    1    1    0    0    0    1    0    1     1
[7,]    1    1    1    0    0    0    1    1    1     1
[8,]    1    1    1    1    0    0    1    1    1     1
>             
> # Specifying optional arguments. The users may omit to mention all
> # the non-existing borders
> sampler.mrf(iter = n, sampler = method, h = height, w = width, 
+             ncolors = K, nei = G, param = Beta,
+             pot = potential, top = Top, left = Left, bottom = Bottom, 
+             right = Right, corner = Corner, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    1    1    1    1    1    0    0     0
[2,]    1    1    1    1    0    0    0    1    1     1
[3,]    1    1    1    1    1    1    1    1    1     1
[4,]    1    1    1    1    1    1    1    1    1     1
[5,]    1    1    1    1    1    1    1    0    1     1
[6,]    1    1    1    1    1    1    1    1    1     0
[7,]    1    1    1    1    1    1    1    1    1     0
[8,]    1    0    0    1    1    1    1    1    1     0
>             
> # Gibbs sampler with sequential updates of the sites. 
> sampler.mrf(iter = n, sampler = "Gibbs", h = height, w = width, 
+             ncolors = K, nei = G, param = Beta,
+             random = FALSE, view = TRUE)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    1    1    1    1    0    1    0     1
[2,]    0    1    1    1    1    1    1    1    0     0
[3,]    0    1    1    1    1    1    1    1    1     0
[4,]    1    1    1    1    1    1    1    1    0     0
[5,]    1    1    1    1    1    1    1    0    0     0
[6,]    1    1    1    1    1    1    0    0    1     1
[7,]    0    1    1    1    1    1    0    1    0     1
[8,]    0    1    1    1    1    0    0    0    0     1
> 
> 
> 
> 
> 
> dev.off()
null device 
          1 
>