# Example 9: Forest Plot

The reporter package is able to embed JPEG images into a report. Here is an example using an image saved from the forestploter package. This package creates customizable forest plots. The technique shown here can be used to embed images from any package.

## Program

Note the following about this example:

- The forestploter package creates customizable forest plots.
- The reporter package can embed JPEG images into any output type that accepts images.

    library(grid)
    library(forestploter)
    library(magrittr)
    library(sassy)

    options("logr.notes" = FALSE,
            "logr.autolog" = TRUE)

    # Get temp directory
    tmp <- tempdir()

    # Open log
    lf <- log_open(file.path(tmp, "example9.log"))

    # Prepare Data ------------------------------------------------------------

    sep("Prepare Data")

    put("Read example data from forestploter package")
    dt <- read.csv(system.file("extdata", "example_data.csv", package = "forestploter"))

    put("Keep needed columns")
    dt <- dt[,1:6] %>% put()

    put("Indent the subgroup if there is a number in the placebo column")
    dt$Subgroup <- ifelse(is.na(dt$Placebo),
                          dt$Subgroup,
                          paste0("   ", dt$Subgroup)) %>% put()

    put("NA to blank or NA will be transformed to character.")
    dt$Treatment <- ifelse(is.na(dt$Treatment), "", dt$Treatment)
    dt$Placebo <- ifelse(is.na(dt$Placebo), "", dt$Placebo)
    dt$se <- (log(dt$hi) - log(dt$est))/1.96

    put("Add blank column for the forest plot to display CI.")
    dt$` ` <- paste(rep(" ", 20), collapse = " ")

    put("Create confidence interval column to display")
    dt$`HR (95% CI)` <- ifelse(is.na(dt$se), "",
                               sprintf("%.2f (%.2f to %.2f)",
                                       dt$est, dt$low, dt$hi))
    put("Final data frame")
    put(dt)

    # Create Plot -------------------------------------------------------------

    sep("Create Plot")

    put("Assign Forest Properties")
    p <- forest(dt[,c(1:3, 8:9)],
      est = dt$est,
      lower = dt$low,
      upper = dt$hi,
      sizes = dt$se,
      ci_column = 4,
      ref_line = 1,
      arrow_lab = c("Placebo Better", "Treatment Better"),
      xlim = c(0, 4),
      ticks_at = c(0.5, 1, 2, 3))

    put("Create temp file name")
    tmppth <- tempfile(fileext = ".jpg") %>% put()

    put("Turn on jpeg device context")
    jpeg(tmppth, width = 600, height = 500)

    put("Print plot")
    plot(p)

    put("Turn off device context")
    dev.off()

    # Create Report -----------------------------------------------------------

    sep("Create Report")

    put("Create plot object from jpeg file")
    plt <- create_plot(tmppth, 5.5, 7.5)

    put("Construct report file path")
    pth <- file.path(tmp, "example9.rtf")

    put("Create report")
    rpt <- create_report(pth, output_type = "RTF", font = "Arial") %>%
      titles("Figure 3.1.4", "Forest Plot Comparison of Treated vs. Placebo",
             "Safety Population", bold = TRUE, blank_row = "none") %>%
      add_content(plt) %>%
      footnotes("Program: {Sys.path()}",
               "Output: {basename(pth)}", blank_row = "none") %>%
      page_header("Sponsor: Sassy", "Study: ABC") %>%
      page_footer("Date: {Sys.time()}", right = "Page [pg] of [tpg]")

    put("Write report")
    res <- write_report(rpt)

    # Uncomment to Show report
    # file.show(res$modified_path)

    # Uncomment to View Log
    # file.show(lf)

    # Clean Up ----------------------------------------------------------------

    # Kill image file
    file.remove(tmppth)

    log_close()

## Output

Here is an image of the RTF report produced by the above example:

## Log

Here is the log produced by the above forest plot example:

    =========================================================================
    Log Path: C:/Users/dbosa/AppData/Local/Temp/Rtmpc54HUz/log/example9.log
    Program Path: C:/packages/sassy/vignettes/sassy-forest.Rmd
    Working Directory: C:/packages/sassy/
    User Name: dbosa
    R Version: 4.2.1 (2022-06-23 ucrt)
    Machine: SOCRATES x86-64
    Operating System: Windows 10 x64 build 19044
    Base Packages: grid stats graphics grDevices utils datasets methods base Other
    Packages: tidylog_1.0.2 reporter_1.3.8 libr_1.2.6 fmtr_1.5.9 logr_1.3.3
    common_1.0.4 sassy_1.0.8 magrittr_2.0.3 forestploter_0.2.1
    Log Start Time: 2022-10-08 22:38:59
    =========================================================================

    =========================================================================
    Prepare Data
    =========================================================================

    Read example data from forestploter package

    Keep needed columns

                            Subgroup Treatment Placebo      est
    1                   All Patients       781     780 1.869694
    2                            Sex        NA      NA       NA
    3                           Male       535     548 1.449472
    4                         Female       246     232 2.275120
    5                            Age        NA      NA       NA
    6                         <65 yr       297     333 1.509242
    7                         >65 yr       484     447 1.468828
    8                         <75 yr       638     649 1.477608
    9                         >75 yr       143     131 1.012617
    10               Body-mass index        NA      NA       NA
    11                       <Median       394     385 1.185109
    12                       >Median       387     394 1.632055
    13                          Race        NA      NA       NA
    14                         White       653     685 1.168173
    15                         Black       110      87 2.022034
    16                         Other        18       8 2.622501
    17     Baseline Statin Treatment        NA      NA       NA
    18                           Yes       701     692 2.707430
    19                            No        80      88 1.655263
    20 Intensity of statin treatment        NA      NA       NA
    21                          High       538     546 2.544263
    22                      Not High       243     234 1.113885
              low       hi
    1  0.13245636 3.606932
    2          NA       NA
    3  0.06834426 2.830600
    4  0.50768005 4.042560
    5          NA       NA
    6  0.67029394 2.348190
    7  0.45499227 2.482663
    8  0.55014273 2.405073
    9  0.34370612 1.681528
    10         NA       NA
    11 0.49170973 1.878509
    12 0.01765042 3.246461
    13         NA       NA
    14 0.63731627 1.699029
    15 0.82239156 3.221677
    16 1.18092223 4.064081
    17         NA       NA
    18 1.17973879 4.235121
    19 0.29133093 3.019195
    20         NA       NA
    21 0.88528342 4.203243
    22 0.03848006 2.189290

    Indent the subgroup if there is a number in the placebo column

       All Patients
    Sex
         Male
         Female
    Age
         <65 yr
         >65 yr
         <75 yr
         >75 yr
    Body-mass index
         <Median
         >Median
    Race
         White
         Black
         Other
    Baseline Statin Treatment
         Yes
         No
    Intensity of statin treatment
         High
         Not High

    NA to blank or NA will be transformed to character.

    Add blank column for the forest plot to display CI.

    Create confidence interval column to display

    Final data frame

                            Subgroup Treatment Placebo      est
    1                   All Patients       781     780 1.869694
    2                            Sex                         NA
    3                           Male       535     548 1.449472
    4                         Female       246     232 2.275120
    5                            Age                         NA
    6                         <65 yr       297     333 1.509242
    7                         >65 yr       484     447 1.468828
    8                         <75 yr       638     649 1.477608
    9                         >75 yr       143     131 1.012617
    10               Body-mass index                         NA
    11                       <Median       394     385 1.185109
    12                       >Median       387     394 1.632055
    13                          Race                         NA
    14                         White       653     685 1.168173
    15                         Black       110      87 2.022034
    16                         Other        18       8 2.622501
    17     Baseline Statin Treatment                         NA
    18                           Yes       701     692 2.707430
    19                            No        80      88 1.655263
    20 Intensity of statin treatment                         NA
    21                          High       538     546 2.544263
    22                      Not High       243     234 1.113885
              low       hi        se
    1  0.13245636 3.606932 0.3352463
    2          NA       NA        NA
    3  0.06834426 2.830600 0.3414741
    4  0.50768005 4.042560 0.2932884
    5          NA       NA        NA
    6  0.67029394 2.348190 0.2255292
    7  0.45499227 2.482663 0.2677894
    8  0.55014273 2.405073 0.2485489
    9  0.34370612 1.681528 0.2587575
    10         NA       NA        NA
    11 0.49170973 1.878509 0.2350221
    12 0.01765042 3.246461 0.3508801
    13         NA       NA        NA
    14 0.63731627 1.699029 0.1911307
    15 0.82239156 3.221677 0.2376520
    16 1.18092223 4.064081 0.2234995
    17         NA       NA        NA
    18 1.17973879 4.235121 0.2282715
    19 0.29133093 3.019195 0.3066481
    20         NA       NA        NA
    21 0.88528342 4.203243 0.2561302
    22 0.03848006 2.189290 0.3447568
                                                       HR (95% CI)
    1                                          1.87 (0.13 to 3.61)
    2
    3                                          1.45 (0.07 to 2.83)
    4                                          2.28 (0.51 to 4.04)
    5
    6                                          1.51 (0.67 to 2.35)
    7                                          1.47 (0.45 to 2.48)
    8                                          1.48 (0.55 to 2.41)
    9                                          1.01 (0.34 to 1.68)
    10
    11                                         1.19 (0.49 to 1.88)
    12                                         1.63 (0.02 to 3.25)
    13
    14                                         1.17 (0.64 to 1.70)
    15                                         2.02 (0.82 to 3.22)
    16                                         2.62 (1.18 to 4.06)
    17
    18                                         2.71 (1.18 to 4.24)
    19                                         1.66 (0.29 to 3.02)
    20
    21                                         2.54 (0.89 to 4.20)
    22                                         1.11 (0.04 to 2.19)

    =========================================================================
    Create Plot
    =========================================================================

    Assign Forest Properties

    Create temp file name

    C:\Users\dbosa\AppData\Local\Temp\Rtmpc54HUz\file4ce84b293714.jpg

    Turn on jpeg device context

    Print plot

    Turn off device context

    =========================================================================
    Create Report
    =========================================================================

    Create plot object from jpeg file

    Construct report file path

    Create report

    Write report

    # A report specification: 1 pages
    - file_path: 'C:\Users\dbosa\AppData\Local\Temp\Rtmpc54HUz/example9.rtf'
    - output_type: RTF
    - units: inches
    - orientation: landscape
    - margins: top 0.5 bottom 0.5 left 1 right 1
    - line size/count: 9/42
    - page_header: left=Sponsor: Sassy right=Study: ABC
    - title 1: 'Figure 3.1.4'
    - title 2: 'Forest Plot Comparison of Treated vs. Placebo'
    - title 3: 'Safety Population'
    - footnote 1: 'Program: C:/packages/sassy/vignettes/sassy-forest.Rmd'
    - footnote 2: 'Output: example9.rtf'
    - page_footer: left=Date: 2022-10-08 22:38:59 center= right=Page [pg] of [tpg]
    - content:
    # A plot specification:
    - path: 'C:\Users\dbosa\AppData\Local\Temp\Rtmpc54HUz\file4ce84b293714.jpg'
    - height: 5.5
    - width: 7.5

    =========================================================================
    Log End Time: 2022-10-08 22:38:59
    Log Elapsed Time: 0 00:00:00
    =========================================================================

Next: Example 10: Disposition Table