---
title: Using the lognorm package
output: 
  rmarkdown::html_vignette: 
    keep_md: true
vignette: >
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteIndexEntry{Using the logitnorm package}
  %\usepackage[UTF-8]{inputenc}
---
```{r eval=FALSE, include=FALSE}
# twDev::genVigs()
#rmarkdown::render("lognorm.Rmd","md_document") 
```

```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(out.extra = 'style="display:block; margin: auto"'
    #, fig.align = "center"
    #, fig.width = 4.6, fig.height = 3.2
    , fig.width = 6, fig.height = 3.75 #goldener Schnitt 1.6
    , dev.args = list(pointsize = 10)
    , dev = c('png','pdf')
    )
knit_hooks$set(spar = function(before, options, envir) {
    if (before) {
        par( las = 1 )                   #also y axis labels horizontal
        par(mar = c(2.0,3.3,0,0) + 0.3 )  #margins
        par(tck = 0.02 )                          #axe-tick length inside plots             
        par(mgp = c(1.1,0.2,0) )  #positioning of axis title, axis labels, axis
     }
})
library(lognorm) 
if (!require(ggplot2) || !require(dplyr) || !require(purrr)) {
	print("To generate this vignette, ggplot2, dplyr, and purrr are required.")
	knit_exit()
}
themeTw <- ggplot2::theme_bw(base_size = 10) + 
  theme(axis.title = element_text(size = 9))
```

# Distribution
## Shape by multiplicative standard deviation

Density distributions of lognormal distributions (lines) 
get closer to normal density 
shaded area) as multiplicative standard deviation $\sigma^*$ decreases 
down to 1.2 for	same $\mu^* = 1$.

```{r lognormalDensities, echo=FALSE, fig.height=2.04, fig.width=3.27}
x <- seq(0,2.5,length.out = 200)
mu <- log(1)
sigmaStar0 <- c(1.2,1.5,2,5)
ans <- map_df(sigmaStar0, function(sigmaStarI){
  data.frame(
    sigmaStar = sigmaStarI, x = x
    , density = dlnorm(x, mu, log(sigmaStarI))
    , cumDensity = plnorm(x, mu, log(sigmaStarI))
    )
}) %>% mutate(sigmaStar = factor(sigmaStar, levels = rev(as.character(sigmaStar0)) ))
coefNorm <- getLognormMoments(mu, log(sigmaStar0[1]))
ansNormal <- data.frame(
  sigmaStar = "normal", x = x
  , density = dnorm(x, coefNorm[1], sqrt(coefNorm[2]))
  , cumDensity = pnorm(x, coefNorm[1], sqrt(coefNorm[2]))
  )
#ansNormal %>%  ggplot(aes(x,density)) + geom_line()
ans %>% ggplot(aes(x,density, linetype = sigmaStar, color = sigmaStar)) + 
  geom_area(
    data = ansNormal, aes(linetype = NA, color = NA), fill = "blue"
    , alpha = 0.1, show.legend = FALSE) +
  geom_line() +
  scale_linetype_discrete(name = bquote(sigma^"*"), breaks = rev(sigmaStar0)) +
  scale_color_discrete(name = bquote(sigma^"*"), breaks = rev(sigmaStar0)) +
  themeTw +
  theme(legend.position = c(0.98,0.98), legend.justification = c(1,1)) +
  theme(axis.title.x = element_blank())
```

```{r lognormalCumDensities, echo=FALSE, fig.height=2.04, fig.width=3.27}
ans %>% ggplot(aes(x,cumDensity, linetype = sigmaStar, color = sigmaStar)) + 
  geom_line(
    data = ansNormal, color = "blue", linetype = "dotted", show.legend = FALSE) +
  geom_line() +
  scale_linetype_discrete(name = bquote(sigma^"*"), breaks = rev(sigmaStar0)) +
  scale_color_discrete(name = bquote(sigma^"*"), breaks = rev(sigmaStar0)) +
  themeTw +
  theme(legend.position = c(0.98,0.98), legend.justification = c(1,1)) +
  theme(axis.title.x = element_blank())
```

## Density, distribution function, quantile function and random generation

Are already provided with the base stats package.
See `?dlnorm`.

## Expected value, Variance, Mode, and Median

```{r momentsLogitnorm}
getLognormMode(mu = 0.6,sigma = 0.5)
getLognormMedian(mu = 0.6,sigma = 0.5)
(theta <- getLognormMoments(mu = 0.6,sigma = 0.5))
```
Mode < Median < Mean for the right-skewed distribution.

The return type of `getLognormMoments` is a matrix.


# Parameter Estimation from moments

```{r twCoefLogitnormMLE}
moments <- cbind(mean = c(1,1), var = c(0.2, 0.3)^2 )
(theta <- getParmsLognormForMoments( moments[,1], moments[,2]))
```

```{r plotFromMoments, echo=FALSE, fig.height=2.04, fig.width=3.27}
ans <- map_df(1:nrow(moments), function(i){
  tibble(
    sd = sqrt(moments[i,2]), x = x
    , density = dlnorm(x, theta[i,1], theta[i,2])
    )
}) %>% mutate(sd = factor(sd)) 
ans %>% ggplot(aes(x,density, linetype = sd, color = sd)) + 
  geom_vline(xintercept = 1, color = "grey10", size = 0.2) +
  geom_line() +
  themeTw +
  theme(legend.position = c(0.98,0.98), legend.justification = c(1,1)) +
  theme(axis.title.x = element_blank())

```

The larger the spread, the more skewed is the distribution, here both with
an expected value of one.
