*This blog post was written by ME Martinez-Sanchez, S Muñoz, M Carrillo, E Azpeitia, D Rosenblueth.*

In this blog post we will describe the package *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) that was one of the projects developed during the TIB2018-BCDW. We hope to continue developing `Griffin`

and *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018). If you have ideas, suggestions or bugs, please contact us via rGriffin GitHub repo.

### The problem

Boolean networks allow us to give a mechanistic explanation to how cell types emerge from regulatory networks. However, inferring the regulatory network and its functions is complex problem, as the available information is often incomplete. *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) uses available biological information (regulatory interactions, cell types, mutants) codified as a set of restrictions and returns the Boolean Networks that satisfy that restrictions. This Boolean networks can then be used to study the biological system.

The *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) package is an R connector to `Griffin`

(Gene Regulatory Interaction Formulator For Inquiring Networks), a java library for inference and analysis of Boolean Network models. `Griffin`

takes as inputs biologically meaningful constraints and turns them into a symbolic representation. Using a SAT engine, `Griffin`

explores the Boolean Network search space, finding all satisfying assignments that are compatible with the specified constraints. The *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) package includes a number of functions to interact with the BoolNet package.

### A small example

Let us suppose a cell, we know that this cell has three proteins called **a**, **b** and **c**. We know that **a** activates **b** and that **b** and **c** inhibit each other. We also suspect that **b** and **c** **may** have positive self-regulatory loops. We can add this interactions to the table as “OPU” (optional, positive, unambiguous). This dataframe is the topology of the network.

Source | Target | Interaction |
---|---|---|

a | b | + |

b | c | - |

c | b | - |

b | b | OPU |

c | c | OPU |

Suppose we also have some information of what cell types have been observed. For example, there is a cell type that expresses **b**, but not **a** or **c** and an other cell type that expresses **c**, but not **a** or **b**. There might exist a third cell type that has not been fully characterized where we know that the cell expresses no **a** or **c** but we have NO information on **b**. This dataframe is the attractors of the network.

a | b | c |
---|---|---|

0 | 1 | 0 |

0 | 0 | 1 |

0 | * | 0 |

We can then use this information to create a query. *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) can include other types of information like transition between cell type, cycles, transitions between cell types or mutant cell types.

```
## Install using:
# devtools::install_github('mar-esther23/rgriffin')
## Note that the package depends on rJava
library('rGriffin')
```

`## Loading required package: rJava`

```
genes = c('a','b','c')
inter = data.frame(source=c('a','b','c', 'b','c'),
target=c('b', 'c', 'b', 'b', 'c'),
type=c('+','-','-','OPU','OPU'),
stringsAsFactors = F )
q = create.gquery.graph(inter, genes)
attr = data.frame(a=c(0,'*',0),
b=c(0,1,0),
c=c(0,0,1),
stringsAsFactors = F )
q = add.gquery.attractors(q, attr)
```

Then we can use `Griffin`

to find the networks that behave according with our biological information.

```
nets = run.gquery(q)
nets
```

```
## [1] "targets,factors\na,false\nb,((((!a&b)&!c)|((a&!b)&!c))|((a&b)&!c))\nc,(!b&c)\n"
## [2] "targets,factors\na,false\nb,(((((!a&b)&!c)|((a&!b)&!c))|((a&b)&!c))|((a&b)&c))\nc,(!b&c)\n"
## [3] "targets,factors\na,false\nb,((((((!a&b)&!c)|((!a&b)&c))|((a&!b)&!c))|((a&b)&!c))|((a&b)&c))\nc,(!b&c)\n"
## [4] "targets,factors\na,false\nb,((((!a&b)&!c)|((a&b)&!c))|((a&b)&c))\nc,(!b&c)\n"
## [5] "targets,factors\na,false\nb,((((((!a&b)&!c)|((a&!b)&!c))|((a&!b)&c))|((a&b)&!c))|((a&b)&c))\nc,(!b&c)\n"
```

There are multiple options to integrate `BoolNet`

and *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018). The function `get.net.topology()`

can obtain the topology with interaction signs of a BoolNet network. The function `attractor2dataframe()`

can be used to export a BoolNet attractor as a dataframe that *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) can use. The function `run.gquery()`

includes the option `return=’BoolNet’`

, that return the inferred networks as `BoolNet`

networks.

### History

The development of `Griffin`

began in 2013 as a PAPIIT (Programa de Apoyo a Proyectos de Investigación e Innovación Tecnológica) project to solve the inference of Boolean Network models for the **Arabidopsis thaliana** root stem cell niche. It continued in 2015 with support of Conacyt grant 221341.

In January, 2017 we organized a course in C3-UNAM to teach biologist how to use `Griffin`

. We received two main comments: the input format was too complicated and it was uncomfortable to use the output with other packages. After some consideration we decided to create an `R`

wrapper that could export and import `BoolNet`

networks. We selected `BoolNet`

as it has an good documentation and the package `BoolFilter`

had been designed to work with it.

The development of *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) began during the EOBM 2017 in CUIB. For the following year we continued developing *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) as our schedules allowed. There were multiple challenges during the development: defining user-friendly inputs, using `Rjava`

, and structuring the package. In August 2018, we attended the TIB2018-BCDW where we received valuable guidance from Martin Morgan and Benilton S Carvalho. It was during this workshop that the first version of *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2018) was finished.

### Acknowledgements

Here you can find the tweet about the original blog post:

Check our first contributed blog post: R Gene Regulatory Interaction Formulator For Inquiring Networkshttps://t.co/9azbElGZGH

— ComunidadBioInfo (@CDSBMexico) August 21, 2018

ME Martinez-Sanchez, S Muñoz, M Carrillo, E Azpeitia, D Rosenblueth

Thx @mt_morgan @benilton!#CDSBMexico #TIB2018 #LatAmBioc18 #rstats #TIB #blog pic.twitter.com/TbJv37fkWQ

This blog post was made possible thanks to:

### References

[1] C. Boettiger. *knitcitations: Citations for ‘Knitr’ Markdown Files*. R package version 1.0.8. 2017. URL: https://CRAN.R-project.org/package=knitcitations.

[2] M. Martinez-Sanchez, S. Muñoz, M. Carrillo, E. Azpeitia, et al. *rGriffin: Gene Regulatory Interaction Formulator For Inquiring Networks*. R package version 0.1. 2018.

[3] H. Wickham, J. Hester and W. Chang. *devtools: Tools to Make Developing R Packages Easier*. R package version 1.13.6. 2018. URL: https://CRAN.R-project.org/package=devtools.

[4] Y. Xie, A. P. Hill and A. Thomas. *blogdown: Creating Websites with R Markdown*. ISBN 978-0815363729. Boca Raton, Florida: Chapman and Hall/CRC, 2017. URL: https://github.com/rstudio/blogdown.

### Reproducibility

`## Session info ----------------------------------------------------------------------------------------------------------`

```
## setting value
## version R version 3.5.1 (2018-07-02)
## system x86_64, darwin15.6.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## tz America/New_York
## date 2018-09-13
```

`## Packages --------------------------------------------------------------------------------------------------------------`

```
## package * version date source
## backports 1.1.2 2017-12-13 cran (@1.1.2)
## base * 3.5.1 2018-07-09 local
## bibtex 0.4.2 2017-06-30 CRAN (R 3.5.0)
## BiocManager 1.30.2 2018-08-24 CRAN (R 3.5.0)
## BiocStyle * 2.9.6 2018-08-19 Bioconductor
## blogdown 0.8 2018-07-15 CRAN (R 3.5.0)
## bookdown 0.7 2018-02-18 CRAN (R 3.5.0)
## colorout * 1.2-0 2018-05-03 Github (jalvesaq/colorout@c42088d)
## compiler 3.5.1 2018-07-09 local
## datasets * 3.5.1 2018-07-09 local
## devtools * 1.13.6 2018-06-27 CRAN (R 3.5.0)
## digest 0.6.16 2018-08-22 CRAN (R 3.5.0)
## evaluate 0.11 2018-07-17 CRAN (R 3.5.0)
## graphics * 3.5.1 2018-07-09 local
## grDevices * 3.5.1 2018-07-09 local
## htmltools 0.3.6 2017-04-28 cran (@0.3.6)
## httr 1.3.1 2017-08-20 CRAN (R 3.5.0)
## jsonlite 1.5 2017-06-01 CRAN (R 3.5.0)
## knitcitations * 1.0.8 2017-07-04 CRAN (R 3.5.0)
## knitr 1.20 2018-02-20 cran (@1.20)
## lubridate 1.7.4 2018-04-11 CRAN (R 3.5.0)
## magrittr 1.5 2014-11-22 cran (@1.5)
## memoise 1.1.0 2017-04-21 CRAN (R 3.5.0)
## methods * 3.5.1 2018-07-09 local
## plyr 1.8.4 2016-06-08 cran (@1.8.4)
## R6 2.2.2 2017-06-17 CRAN (R 3.5.0)
## Rcpp 0.12.18 2018-07-23 CRAN (R 3.5.1)
## RefManageR 1.2.0 2018-04-25 CRAN (R 3.5.0)
## rGriffin * 0.1 2018-09-13 Github (mar-esther23/rgriffin@04cdc39)
## rJava * 0.9-10 2018-05-29 CRAN (R 3.5.0)
## rmarkdown 1.10 2018-06-11 CRAN (R 3.5.0)
## rprojroot 1.3-2 2018-01-03 cran (@1.3-2)
## stats * 3.5.1 2018-07-09 local
## stringi 1.2.4 2018-07-20 CRAN (R 3.5.0)
## stringr 1.3.1 2018-05-10 CRAN (R 3.5.0)
## tools 3.5.1 2018-07-09 local
## utils * 3.5.1 2018-07-09 local
## withr 2.1.2 2018-03-15 CRAN (R 3.5.0)
## xfun 0.3 2018-07-06 CRAN (R 3.5.0)
## xml2 1.2.0 2018-01-24 CRAN (R 3.5.0)
## yaml 2.2.0 2018-07-25 CRAN (R 3.5.0)
```