---
title: "Package moonBook"
author: "Keon-Woong Moon"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{package moonBook}
  %\VignetteEngine{knitr::rmarkdown}
  \usepackage[utf8]{inputenc}
---


## Function "mytable"

Function "mytable"" produce table for descriptive analysis easily. It is most useful to make table to describe baseline characteristics common in medical research papers. 

## Basic Usage

```{r,comment=NA}
require(moonBook)
data(acs)
mytable(Dx~.,data=acs)
```

The first argument of function `mytable` is an object of class `formula`. Left side of ~ must contain the name of one grouping variable or two grouping variables in an additive way(e.g. sex+group~), and the right side of ~ must have variables in an additive way. `.` is allowed on the right side of formula which means all variables in the data.frame specified by the 2nd argument `data`. The sample data 'acs' containing demographic data and laboratory data of 857 patients with acute coronary syndrome(ACS). For more information about the data acs, type ?acs in your R console.  

```{r,comment=NA}
str(acs)
```

## Explore a data.frame

You can use `mytable` function to explore a data.frame. 

```{r,comment=NA}
mytable(acs)
```

You can use formula without grouping variable(s).

```{r,comment=NA}
mytable(~age+sex,data=acs)
```


## Use of labelled data

You can use labels of the data. For example, you can add column labels and value labels of `mtcars` data using set_label() and set_labels() function of the `sjlabelled` package.

```{r,comment=NA}
if(!require(sjlabelled)) {
    install.packages("sjlabelled")
    require(sjlabelled)
}
df=mtcars
df$am<-set_label(df$am,label="Transmission")
df$am<-set_labels(df$am,labels=c("automatic","manual"))
df$vs<-set_label(df$vs,label="Engine")
df$vs<-set_labels(df$vs,labels=c("V-shaped","straight"))
```

You can see the labels of this data.

```{r,comment=NA}
str(df)
```

You can use the column label and value labels with mytable() function. The default values of `use.labels` and `use.column.labels` arguments of mytable() function are `TRUE`. You can change this arguments if you want.

```{r,comment=NA}
mytable(df)
mytable(df,use.labels=FALSE, use.column.label=FALSE)
mytable(am~.,data=df)
# mytable(vs+am~.,data=df)
```

## Choosing grouping variable(s) and row-variable(s)

You can choose the grouping variable(s) and row-variable(s) with the `formula`. 

```{r,comment=NA}
mytable(sex~age+Dx,data=acs)
```

You can choose row-variable(s) with `.` and `+` and `-` and variable name in an additive way.

```{r, comment=NA}
mytable(am~.-hp-disp-cyl-carb-gear,data=mtcars)
```

## Method for continuous variables

By default continuous variables are analyzed as normal-distributed and are described with mean and standard deviation. To change default options, you can use the `method` argument. Possible values of `method` argument are:

- 1: forces analysis as normal-distributed, default value
- 2: forces analysis as continuous non-normal
- 3: performs a Shapiro-Wilks test to decide between normal or non-normal

When continuous variables are analyzed as non-normal, they are described with median and interquartile range.

```{r,comment=NA}
mytable(sex~height+weight+BMI,data=acs,method=3)
```

Because the `method` argument is selected as 3, a Shapiro-Wilk test normality test is used to decide if the variable is normal or non-normal distributed. Note that `height` and `BMI` was described as mean $\pm$ sd, whereas the weight was described as median and interquartile range. 

## choice of variable : categorical or continuous variable - my way

In many cases, categorical variables are usually coded as numeric. For example, many people usually code 0 and 1 instead of "No" and "Yes". Similarly, factor variables with three or four levels are coded 0/1/2 or 0/1/2/3. In many cases, if we analyze these variables as continuous variables, we are not able to get the right result. In `mytable`, variables with less than five `unique` values are treated as a categorical variables. 

```{r, comment=NA,warning=FALSE}
mytable(am~.,data=mtcars)
```

In `mtcars` data, all variables are expressed as numeric. But as you can see, `cyl`, `vs` and `gear` is treated as categorical variables. The `carb` variables has six `unique` values and treated as continuous variables. If you wanted the `carb` variable to be treated as categorical variable, you can changed the `max.ylev` argument.

```{r,comment=NA,warning=FALSE}
mytable(am~carb,data=mtcars,max.ylev=6)
```

## Combining tables

If you wanted to make two separate tables and combine into one table, **`mytable` is the function of choice**. For example, if you wanted to build separate table for female and male patients stratified by presence or absence of DM and combine it, 

```{r,comment=NA,warning=FALSE}
mytable(sex+DM~.,data=acs)

```

## For more beautiful output : myhtml

If you want more beautiful table in your R markdown file, you can use myhtml function.

```{r,results='asis'}
out=mytable(Dx~.,data=acs)
myhtml(out)
out1=mytable(sex+DM~.,data=acs)
myhtml(out1)
```

## For more beautiful output : mylatex 

If you want more beautiful table, you can use mylatex function.

```{r,eval=FALSE}
mylatex(mytable(sex+DM~age+Dx,data=acs))
```

![latextest.png](../inst/extdata/latextest.png)

You can adjust font size of latex table by using parameter size from 1 to 10.
```{r,eval=FALSE}
out=mytable(sex~age+Dx,data=acs)
for(i in c(3,5)) 
    mylatex(out,size=i,caption=paste("Table ",i,". Fontsize=",i,sep=""))
```

![latextest2.png](../inst/extdata/latextest.png)

## Export to csv file : mycsv

If you want to export your table into csv file format, you can use mycsv function.

```{r,eval=FALSE}
mycsv(out,file="test.csv")
mycsv(out1,fil="test1.csv")
```

Following figure is a screen-shot in which test.csv and test1.csv files are opened with Numbers. 

![csvtest.png](../inst/extdata/csvtest.png)


## Use of `ztable`

You can use ztable() function from the `ztable` package.

```{r,messgae=FALSE,results='asis'}
require(ztable)
require(magrittr)
mytable(sex+DM~.,data=acs) %>%
    ztable %>%
    addSigColor %>%
    print(type="html")
```

## densityplot

```{r,fig.height=5,fig.width=6}
library(moonBook)
densityplot(age~sex,data=acs)
densityplot(age~Dx,data=acs)
```

## Plot for odds ratios of a glm object

```{r,fig.width=6,fig.height=6,comment=NA}
require(survival)
data(colon)
out1=glm(status~sex+age+rx+obstruct+node4,data=colon)
out2=glm(status~rx+node4,data=colon)
ORplot(out1,type=2,show.CI=TRUE,xlab="This is xlab",main="Odds Ratio")
ORplot(out2,type=1)
ORplot(out1,type=1,show.CI=TRUE,col=c("blue","red"))
ORplot(out1,type=4,show.CI=TRUE,sig.level=0.05)
ORplot(out1,type=1,show.CI=TRUE,main="Odds Ratio",sig.level=0.05,
        pch=1,cex=2,lwd=4,col=c("red","blue"))
```

## For automation of cox's proportional hazard model

```{r,fig.width=6,fig.height=6,comment=NA}
attach(colon)
colon$TS=Surv(time,status==1)
out=mycph(TS~.,data=colon)
out
HRplot(out,type=2,show.CI=TRUE,cex=2,sig=0.05,
       main="Hazard ratios of all individual variables")
```
