---
title: "ec50estimator"
author: "Kaique S Alves"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{ec50estimator}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

# Introduction

*ec50estimator* provides a quick, easy and automated way of estimating the effective control to 50% of growth inhibition (EC50) from multi isolate data sets. It also is optimized to deal with stratified data.

# Hands on

## Packages

```{r message=FALSE, warning=FALSE}
library(ec50estimator)
library(drc)
library(ggplot2)
library(dplyr)
library(magrittr)
library(cowplot)
library(ggridges)
```

## Data

In the package I provide this dataset `multi_isolate` where contain simulated data of mycelial growth under increasing fungicide doses for 50 fungal isolates, two types of field (conventional and organic), and two different fungicides.

```{r}
data(multi_isolate)
```

Use `ggplot2` to plot the data

```{r}
multi_isolate %>% 
  ggplot(aes(dose, growth, color = growth))+
  geom_jitter(width = 0.1)+
  facet_grid(field~fungicida)+
  scale_x_log10()+
  scale_color_viridis_c(option = "B",direction = 1)+
  theme_light()
```

The function `estimate_EC50()` is used to calculate EC50s for each isolate within each culture system and for each fungicide. As in function `drc::drm()`, in `estimate_EC50()` you also need to provide the formula. Provide also the argument `data`, which is an object data.frame where your data are. Indicate the column that identifies each isolate in the argument `isolate_col`. If your data is stratified (by region, cropping system or year, for example) indicate the columns in the argument `strata_col`. Indicate the model to be used in the argument `fct` (same as in the package `drc`). Please, inform the model function with the `::` operator to inform the `drc` package(e.g. `drc::LL.4()`). If you want confidence intervals to be estimated, indicate in the argument `interval` (it works the same way it works in the function `drc::drm()`).





```{r}

df_ec50 = estimate_EC50(growth~dose,
                        data =multi_isolate,
                        isolate_col = "isolate", 
                        strata_col =  c("field","fungicida"),
                        interval = "delta",
                        fct = drc::LL.3())
head(df_ec50)

```

ATTENTION: In this tutorial I used the same model (`drc::LL.3()`) for the two fungicides (A and B). However, it is important to check which model is most appropriate for your data. To do this, before running the function `estimate_EC50()` for all your data, use the function `drm()` to adjust a model for some isolates and later use the function `drc::mselect()` to calculate the statistics that will help you select the best model. Tip: the lower the AIC value, the better the model. For more information, run the command `?mselecton` in your Console.


# Visualization

See EC50 estimates and confidence intervals for all isolates.

```{r fig.height=10, fig.width=6}
as.data.frame(df_ec50) %>% 
  mutate(ID = as.numeric(ID)) %>% 
  ggplot(aes(ID, Estimate, color = field))+
  geom_point(size = 2)+
  geom_errorbar(aes(ymin=Lower,ymax = Upper, color = field), width=0)+
  facet_wrap(~fungicida, scales = "free_x", ncol = 2)+
  scale_y_log10()+
  scale_x_continuous(breaks = 1:50)+
  scale_color_manual(values = c("darkred", "steelblue"))+
  labs(x = "Isolates", y = "EC50")+
  theme_minimal_vgrid(font_size = 10)+
  coord_flip()+
  theme(axis.text.x = element_text(size=10),
        legend.position = "bottom")
```
Use the package ggridges to create density charts.

```{r}
as.data.frame(df_ec50) %>% 
  ggplot(aes(Estimate, field, fill = stat(x)))+
  geom_density_ridges_gradient(alpha = 0.3)+
  scale_x_log10()+
  scale_fill_viridis_c(option = "C")+
  facet_wrap(~fungicida, nrow = 2)+
  theme_minimal_hgrid()+
  labs(x = "EC50", y = "Field")+
  theme(legend.position = "none")
```


