---
title: "Forestplots"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Forestplots}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

# 1. Introduction

This vignette documents and illustrates workflows for producing forest plots using the function `plotForest` from the `ospsuite.plots` package. Forest plots are a useful way to visualize the results of multiple studies or datasets, showing estimates of effect sizes along with their confidence intervals.

## 1.1 Setup

This vignette uses the `{ospsuite.plots}` and `{tidyr}` libraries. We will use the default settings of `{ospsuite.plots}` (see `vignette("ospsuite.plots", package = "ospsuite.plots")`) but will adjust the legend position for better visibility.

```{r setup}
options(rmarkdown.html_vignette.check_title = FALSE)

library(ospsuite.plots)
library(tidyr)
library(data.table)

# Set Defaults
oldDefaults <- ospsuite.plots::setDefaults()

# Place default legend position above the plot
theme_update(legend.position = "top")
theme_update(legend.direction = "horizontal")
theme_update(legend.title = element_blank())
```

## 1.2 Example Data

This vignette uses the following datasets:

- **Data Set 1**: A simulated dataset containing various covariates such as ID, Country, Age, AgeBin, Observations, and Predictions. The dataset will be filtered and reshaped to prepare it for plotting.

```{r load-data-1, results='asis'}
histData <- exampleDataCovariates |>
  dplyr::filter(SetID == "DataSet1") |>
  dplyr::select(c("ID", "Country", "Age", "AgeBin", "Obs", "Pred")) |>
  melt(
    id.vars = c("ID", "Country", "Age", "AgeBin"),
    value.name = "value",
    variable.name = "DataType"
  )

# Prepare plot data by calculating mean and standard deviation
plotData <- histData[, .(
  Mean = mean(value),
  SD = sd(value)
),
by = c("Country", "AgeBin", "DataType")
]
```

# 2. Generating Forest Plots

## 2.1 Basic Example

In this example, we will create a basic forest plot using the mean and standard deviation of the data, faceted by `Country`. The plot will display the mean on the x-axis and the `AgeBin` on the y-axis.

```{r basic-forest-plot, fig.alt = "A basic forest plot showing mean values of different age bins faceted by country."}
plotObject <-
  plotForest(
    plotData = plotData,
    mapping = aes(x = Mean, error = SD, y = AgeBin, groupby = DataType),
    xLabel = "Mean",
    yFacetColumns = "Country",
    tableColumns = c("Mean", "SD"),
    tableLabels = c("Mean", "SD")
  )

print(plotObject)
```

### Explanation:
- `plotData`: The data prepared in the previous section.
- `mapping`: Specifies the aesthetics for the plot, including x and y axes, and grouping.
- `xLabel`: The label for the x-axis.
- `yFacetColumns`: Column used for faceting on the y-axis.

## 2.2 Example Without Table

In this example, we will create a forest plot similar to the previous one but without including a summary table below the plot.

```{r forest-plot-no-table, fig.alt = "A forest plot showing mean values of different age bins faceted by country, without a summary table."}
plotObject <-
  plotForest(
    plotData = plotData,
    mapping = aes(x = Mean, error = SD, y = AgeBin, groupby = DataType),
    xLabel = "Mean",
    yFacetColumns = "Country",
    tableColumns = c("Mean", "SD"),
    tableLabels = c("Mean", "SD"),
    withTable = FALSE
  )

print(plotObject)
```

### Explanation:
- Setting `withTable = FALSE` excludes the summary table from the output, focusing solely on the graphical representation.

## 2.3 Faceting by Data Type

In this example, we will facet the plot by `DataType` while still using `Country` for the y-axis. This allows for a more detailed view of the data categorized by both `Country` and `DataType`.

```{r facet-forest-plot, fig.alt = "A forest plot showing mean values of different age bins, faceted by country and data type."}
plotObject <-
  plotForest(
    plotData = plotData,
    mapping = aes(x = Mean, error = SD, y = AgeBin),
    xLabel = "Mean",
    yFacetColumns = "Country",
    xFacetColumn = "DataType",
    tableColumns = c("Mean", "SD"),
    tableLabels = c("Mean", "SD"),
    withTable = FALSE
  )

print(plotObject)
```

### Explanation:
- `xFacetColumn`: By specifying this parameter, we create separate plots for each `DataType`, allowing us to compare them side by side.


