如何使用rmarkdown显示混淆矩阵

问题描述 投票:0回答:1

我的最小演示rmarkdown示例(

test.rmd
)如下:

---
output: 
  pdf_document: 
    latex_engine: xelatex
    keep_tex: no
colorlinks: yes
header-includes:
- \usepackage[bookmarksopen]{hyperref}
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{multirow}
- \usepackage{tabu}
- \usepackage{float}
- \usepackage{xcolor}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  message = FALSE, 
  warning = FALSE
)
library(flextable)
library(knitr)
library(kableExtra)
```


# code for data

```{r}
library(ISLR) #for Default data
library(MASS) #for LDA function
fit = lda(default~balance+student, data=Default)
tab = table(predict(fit)$class, Default$default); tab #confusion matrix 
Total = sum; atab = addmargins(tab, FUN=Total); atab #change Sum to Total
```

# table: pure latex 


```tex
\documentclass{article}
\usepackage{multirow}
\usepackage{float}

\begin{document}

\begin{table}[!h]
\caption{table via pure latex}\label{mycap}
\centering
\begin{tabular}{ccccc}
\hline
& & \multicolumn{3}{c}{True default status} \\
\cline{3-5}
& & No & Yes & Total \\
\hline
\multirow{3}{*}{Predicted default status}
&  No     &9644 &252 &9896  \\
&  Yes    &23   &23  &104   \\
&  Total  &9667 &333 &10000 \\
\hline
\end{tabular}
\end{table}

\end{document}
```


```{=latex}
\begin{table}[!h]
\caption{table via pure latex}\label{mycap}
\centering
\begin{tabular}{ccccc}
\hline
& & \multicolumn{3}{c}{True default status} \\
\cline{3-5}
& & No & Yes & Total \\
\hline
\multirow{3}{*}{Predicted default status}
&  No     &9644 &252 &9896  \\
&  Yes    &23   &23  &104   \\
&  Total  &9667 &333 &10000 \\
\hline
\end{tabular}
\end{table}
```

# table: rmarkdown

## flextable

```{r error=TRUE}
flextable(atab)
dtab = as.data.frame(atab); ft = flextable(dtab)
ft <- set_caption(ft, "table via flextable"); ft
```

## kableExtra

```{r}
kbl(atab, booktabs = F, caption = "table via kableExtra") |>
add_header_above(c(" ", "True default status" = 3)) |>
kable_styling(latex_options = c("repeat_header")) |>
kable_styling(latex_options = c("hold_position"))
```

如演示所示,我想将混淆矩阵结果显示为类似于 纯乳胶显示。有几个

R
包可以结合rmarkdown显示表格,例如
knitr::kable
flexable
等;有关更多讨论和比较,请参见https://hughjonesd.github.io/huxtable/design-principles.html。由于我对
flexable
kableExtra
有点熟悉,所以我尽量把这两个包进行一下

test.rmd
生成的PDF所示,我对
flexable
不满意(也许我遗漏了一些步骤)。
kableExtra
可以提供更好的显示,但它不能解决 multirow 问题(我也是来自
https://cran.r-project.org/web/packages/kableExtra/vignettes 的 
collapse_rows /awesome_table_in_pdf.pdf)。我怎样才能优雅有效地解决我的问题?

latex r-markdown kableextra flextable
1个回答
0
投票

也许

proc_freq()
可以帮助。

data.frame(p = predict(fit)$class, o = Default$default) |> 
  proc_freq(row = "o", col = "p")

如果您需要自定义结果,可以使用通常的灵活功能。请注意,我们正在开发一个如下所示的新版本。

© www.soinside.com 2019 - 2024. All rights reserved.