# R Gene Regulatory Interaction Formulator For Inquiring Networks

**Fellgernon Bit - rstats**, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

*This blog post was written by ME Martinez-Sanchez, S Muñoz, M Carrillo, E Azpeitia, D Rosenblueth and originally posted at the CDSB blog. ^{1}*

In this blog post we will describe the package *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2019) 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., 2019). 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., 2019) 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., 2019) 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., 2019) 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., 2019) 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., 2019). 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., 2019) 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., 2019) began during the EOBM 2017 in CUIB. For the following year we continued developing *rGriffin* (Martinez-Sanchez, Muñoz, Carrillo, Azpeitia, et al., 2019) 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., 2019) 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

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

— ComunidadBioInfo (@CDSBMexico) August 21, 2018

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.

2019.

[3]

H. Wickham, J. Hester, and W. Chang.

*devtools: Tools to Make Developing R Packages Easier*.

R package version 2.0.2.

2019.

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.2 Patched (2019-02-17 r76113)
## os macOS Mojave 10.14.4
## system x86_64, darwin15.6.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz America/New_York
## date 2019-04-10
##
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
## package * version date lib source
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.5.2)
## backports 1.1.3 2018-12-14 [1] CRAN (R 3.5.0)
## bibtex 0.4.2 2017-06-30 [1] CRAN (R 3.5.0)
## BiocManager 1.30.4 2018-11-13 [1] CRAN (R 3.5.0)
## BiocStyle * 2.10.0 2018-10-30 [1] Bioconductor
## blogdown 0.11.1 2019-04-05 [1] Github (rstudio/[email protected])
## bookdown 0.9 2018-12-21 [1] CRAN (R 3.5.0)
## callr 3.2.0 2019-03-15 [1] CRAN (R 3.5.2)
## cli 1.1.0 2019-03-19 [1] CRAN (R 3.5.2)
## colorout * 1.2-0 2019-02-18 [1] Github (jalvesaq/[email protected])
## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.5.0)
## desc 1.2.0 2018-05-01 [1] CRAN (R 3.5.0)
## devtools * 2.0.2 2019-04-08 [1] CRAN (R 3.5.2)
## digest 0.6.18 2018-10-10 [1] CRAN (R 3.5.0)
## evaluate 0.13 2019-02-12 [1] CRAN (R 3.5.2)
## fs 1.2.7 2019-03-19 [1] CRAN (R 3.5.2)
## glue 1.3.1 2019-03-12 [1] CRAN (R 3.5.2)
## htmltools 0.3.6 2017-04-28 [1] CRAN (R 3.5.0)
## httr 1.4.0 2018-12-11 [1] CRAN (R 3.5.0)
## jsonlite 1.6 2018-12-07 [1] CRAN (R 3.5.0)
## knitcitations * 1.0.8 2017-07-04 [1] CRAN (R 3.5.0)
## knitr 1.22 2019-03-08 [1] CRAN (R 3.5.2)
## lubridate 1.7.4 2018-04-11 [1] CRAN (R 3.5.0)
## magrittr 1.5 2014-11-22 [1] CRAN (R 3.5.0)
## memoise 1.1.0 2017-04-21 [1] CRAN (R 3.5.0)
## pkgbuild 1.0.3 2019-03-20 [1] CRAN (R 3.5.2)
## pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.5.0)
## plyr 1.8.4 2016-06-08 [1] CRAN (R 3.5.0)
## prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.5.0)
## processx 3.3.0 2019-03-10 [1] CRAN (R 3.5.2)
## ps 1.3.0 2018-12-21 [1] CRAN (R 3.5.0)
## R6 2.4.0 2019-02-14 [1] CRAN (R 3.5.2)
## Rcpp 1.0.1 2019-03-17 [1] CRAN (R 3.5.2)
## RefManageR 1.2.12 2019-04-03 [1] CRAN (R 3.5.2)
## remotes 2.0.3 2019-04-09 [1] CRAN (R 3.5.2)
## rGriffin * 0.1 2019-04-10 [1] local
## rJava * 0.9-11 2019-03-29 [1] CRAN (R 3.5.2)
## rlang 0.3.4 2019-04-07 [1] CRAN (R 3.5.2)
## rmarkdown 1.12 2019-03-14 [1] CRAN (R 3.5.2)
## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.5.0)
## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.5.0)
## stringi 1.4.3 2019-03-12 [1] CRAN (R 3.5.2)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 3.5.2)
## testthat 2.0.1 2018-10-13 [1] CRAN (R 3.5.0)
## usethis * 1.5.0 2019-04-07 [1] CRAN (R 3.5.2)
## withr 2.1.2 2018-03-15 [1] CRAN (R 3.5.0)
## xfun 0.6 2019-04-02 [1] CRAN (R 3.5.2)
## xml2 1.2.0 2018-01-24 [1] CRAN (R 3.5.0)
## yaml 2.2.0 2018-07-25 [1] CRAN (R 3.5.0)
##
## [1] /Library/Frameworks/R.framework/Versions/3.5/Resources/library
```

I’m re-posting their blog post here with their permission so that their post will be shared more widely via R-Bloggers and R Weekly among other sites since the CDSB blog is currently not linked to those aggregators. The original blog post has been edited so that it evaluates the R code and includes all the information needed for reproducibility.↩

**leave a comment**for the author, please follow the link and comment on their blog:

**Fellgernon Bit - rstats**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.