应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算

2023-11-01

本期是之前做的应用统计学与R语言实现笔记的番外篇四,本期主要关注两个问题,一个是重新利用R的bookdown包创建新的电子书,另一个是计算公共卫生当中一个比较常见的指标OR值。

1 bookdown使用

bookdown是谢益辉之前开发的R语言包,可以基于rmarkdown快速生成在线电子书,并且可以输出pdf和epub。具体的使用方法可以参见官方文档。

https://bookdown.org/yihui/bookdown/

这里由于中文在输出pdf中容易有bug,因此中文图书推荐使用谢益辉提供的模板进行修改。同时可以参考李东风的这本中文使用指南辅助进行。

https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/

这里提供一些使用过程中的tips经验。

  • Latex公式在在$与公式间不要空格。
  • 插入图片建议使用r的function。例子如下:
knitr::include_graphics("fig/fig1.jpg")

其中include_graphics括号后面为图片路径。同时在R code的设置里,在设置图片大小时推荐使用out.width和out.height参数,设置为’100%’,这样图片可以根据排版情况进行自适应。

  • 如果想加入r代码块而不想运行仅作为展示的话,需要在R code的设置里设置为r eval=FALSE, echo = T。
  • 目前这个版本的封面图片设置参数cover-image只能生成epub里的封面,pdf无法添加。
  • 默认模板会生成图和表目录,不需要的可以在index.rmd的输出设置里把lot和lof设置为false。
  • 默认模板pdf里有一句话“献给……呃,爱谁谁吧”,需要在模板的latex文件夹下的before_body.tex里去掉。
  • 默认模板设置是B5的纸张大小,边距设置也是左右不对称。这个是在index.rmd的输出设置里。实际上也是latex的设置。可根据自己喜好做调整。
geometry: [b5paper, tmargin=2.5cm, bmargin=2.5cm, lmargin=3.5cm, rmargin=2.5cm]
  • 用github托管的话,可以在bookdown.yml文件里设置输出文件夹参数,在最后一行添加参数(output_dir: “docs”)。然后在github的Pages设置对应的根目录。同时需要在R里输入如下命令。让网页不使用默认jekyll主题。
file.create('docs/.nojekyll')

最后奉上最新的bookdown在线电子书地址:

http://gisersqdai.top/Note-of-Applied-Statistics-with-R-Book/

2 公式更正

在修改的过程里,我发现了来自BruceZhaoR同学18年的一条pr,虽然不知道什么原因我一直没注意到这条pr。这里郑重向这位同学道歉,非常感谢他的指正。他指出在原本第三章描述性统计里的样本方差与标准差公式里有误。并给出了wiki上的参考公式。

wiki:https://en.wikipedia.org/wiki/Standard_deviation#Corrected_sample_standard_deviation

具体错误这里也说明下。原公式如下:

样本方差:

s 2 = ∑ i = 1 N ( x i − μ ) 2 n − 1 s^2=\frac{\sum_{i=1}^N (x_i-\mu)^2}{n-1} s2=n1i=1N(xiμ)2 s 2 = ∑ i = 1 k ( M i − μ ) 2 f i n − 1 s^2=\frac{\sum_{i=1}^k (M_i-\mu)^2f_i}{n-1} s2=n1i=1k(Miμ)2fi

样本标准差:

s = ∑ i = 1 N ( x i − μ ) 2 n − 1 s=\sqrt {\frac{\sum_{i=1}^N (x_i-\mu)^2}{n-1}} s=n1i=1N(xiμ)2 s = ∑ i = 1 k ( M i − μ ) 2 f i n − 1 s=\sqrt{\frac{\sum_{i=1}^k (M_i-\mu)^2f_i}{n-1}} s=n1i=1k(Miμ)2fi

这里用 μ \mu μ是不对的, μ \mu μ虽然可以指代统计学中的均值,但是 μ \mu μ是代表总体均值。而严格来说,样本均值通常只是近似总体均值,因此必须作区分,故常用 x ˉ \bar x xˉ来做为样本均值。故修改后公式为

样本方差:

s 2 = ∑ i = 1 N ( x i − x ˉ ) 2 n − 1 s^2=\frac{\sum_{i=1}^N (x_i-\bar x)^2}{n-1} s2=n1i=1N(xixˉ)2 s 2 = ∑ i = 1 k ( M i − x ˉ ) 2 f i n − 1 s^2=\frac{\sum_{i=1}^k (M_i-\bar x)^2f_i}{n-1} s2=n1i=1k(Mixˉ)2fi

样本标准差:

s = ∑ i = 1 N ( x i − x ˉ ) 2 n − 1 s=\sqrt {\frac{\sum_{i=1}^N (x_i-\bar x)^2}{n-1}} s=n1i=1N(xixˉ)2 s = ∑ i = 1 k ( M i − x ˉ ) 2 f i n − 1 s=\sqrt{\frac{\sum_{i=1}^k (M_i-\bar x)^2f_i}{n-1}} s=n1i=1k(Mixˉ)2fi

3 OR值计算

由于我目前主要从事健康地理学方面的研究,最近碰上了一个基础的OR值计算问题。首先OR值的全称是odds ratio值,这是公共卫生领域的一个专业名词。这里给出Encyclopedia of Public Health的定义。

The odds ratio (OR) provides a measure of the strength of relationship between two variables, most commonly an exposure and a dichotomous outcome. It is most commonly used in a case control study where it is defined as “the ratio of the odds of being exposed in the group with the outcome to the odds of being exposed in the group without the outcome.”

This concept can be extended to a situation with multiple levels of exposure (e.g., low, moderate, or high exposure to an environmental containment). One exposure level is assigned as the “reference” level. For each of the remaining exposure levels, one divides the odds of that exposure level in the outcome positive group (compared with the
reference level) by the odds of that exposure level in the outcome negative group.

The OR ranges in value from 0 to infinity. Values close to 1.0 indicate no relationship between the exposure and the outcome. Values less than 1.0 suggest a protective effect, while values greater than 1.0 suggest a causative or adverse effect of exposure.

这里简单翻译一下,OR值是用来度量两个变量之间关系强度的指标,常见于暴露水平与二分的健康结局变量。最常用在案例对照研究。OR被定义为“组中暴露患病几率与暴露未患病几率的比值”。这个概念通常可以拓展到多水平暴露指标,通常定义某一类别的暴露水平为参考水平,对于剩余的暴露水平,则除以该参考水平的暴露几率用来进行比较。这里要先给出odds的定义。odds,称为几率、比值、比数,是指某事件发生的可能性(概率)与不发生的可能性(概率)之比。用p表示事件发生的概率,则:odds = p/(1-p)。OR值的公共卫生意义如下:范围从0到无穷大。接近1.0的值表示暴露与结果之间没有关系。小于1.0的值表示保护作用,而大于1.0的值表示暴露的致病性或不利影响。

针对一个标准的2x2流病表格(如下)。实际上OR值计算如下:

暴 露 时 患 病 几 率 = 暴 露 时 患 病 病 例 数 未 暴 露 时 患 病 病 例 数 = a c 暴露时患病几率=\frac{暴露时患病病例数}{未暴露时患病病例数}=\frac{a}{c} ==ca

暴 露 时 未 患 病 几 率 = 暴 露 时 未 患 病 病 例 数 未 暴 露 时 未 患 病 病 例 数 = b d 暴露时未患病几率=\frac{暴露时未患病病例数}{未暴露时未患病病例数}=\frac{b}{d} ==db

O R = a / c b / d = a d b c OR = \frac{a/c}{b/d}=\frac{ad}{bc} OR=b/da/c=bcad

Outcome +ve Outcome -ve
Exposed a b
No exposed c d

这里选用一个ICU的数据来进行说明,这个数据来源于David W. Hosmer等人出版的applied logistic regression一书中的数据。获取途径可以通过安装这个书的r包,命令如下。

install.packages('aplore3')

安装完成以后,载入数据做个初步探索。

library(aplore3)
data(icu)
head(icu)

为了简单化,我们这里定义健康结局变量为status,即数据中的sta(Lived或者Died),感兴趣的自变量为age。首先绘制一下图。由于status是个二分变量。所以图就变成了如下的样子。

你是否觉得很熟悉?其实这就是logistic regression的典型数据。那么根据age的数据,我们做一个处理,统计不同年龄段的死亡率,以10岁为分界线。我们可以得到如下的图。

那么我们突然发现,这个散点是有线性趋势的。假设我们采用线性回归来做分析,即假定有: p r ( d e a t h ) = β 0 + β 1 ( a g e ) pr(death)=\beta_0+\beta_1(age) pr(death)=β0+β1(age),不就可以拟合了吗?但是我们又会发现一个问题。那就是这里的y(pr(death))是有现实意义的实数,也就是它的值域必须在(0,1)中。然而等式右边实际上是可以取任何值的(根据 β 0 , β 1 , a g e \beta_0 , \beta_1, age β0,β1,age),因此这个线性方程即使求解出来,预测值通常会超过实际的值域。所以为了解决这个问题,logistics regression就提出了。首先是定义了logit函数为:

l o g i t ( p ) = l o g ( p 1 − p ) logit(p)=log(\frac{p}{1-p}) logit(p)=log(1pp)

p = p r ( d e a t h ) p=pr(death) p=pr(death)

那么这个logit函数的现实意义是事件发生几率的对数。那么同时模型就变成了:

l o g ( p 1 − p ) = β 0 + β 1 ( a g e ) log(\frac{p}{1-p})=\beta_0+\beta_1(age) log(1pp)=β0+β1(age)

这时我们就会发现p的值域是在(0,1),而logit§的值域则是 [ − ∞ , + ∞ ] [ - \infty, + \infty ] [,+]

那这个时候我们就可以用线性回归方法求解系数了,因此logistic regression也被称为广义线性回归的一类。

那么我们再来看一个更特殊的情况,就是前面说的2x2联表的情况。假定自变量是个分类变量。这里选用icu数据里的type来分析(健康结局变量不变)。也就是说方程如下:

l o g i t ( p ) = β 0 + β 1 ( I t y p e ) logit(p)=\beta_0+\beta_1(I_{type}) logit(p)=β0+β1(Itype)

2x2联表则为:

Lived Died
elective admission a b
emeregency admission c d

那么这时候 I t y p e = 0 I_{type}=0 Itype=0时是elective admission, I t y p e = 1 I_{type}=1 Itype=1时是emeregency admission。因此我们可以得到对应的y值。也就是elective adminssion的logit§为 β 0 \beta_0 β0。而emergency admission的logit§为 β 0 + β 1 \beta_0+\beta_1 β0+β1。那么根据logit函数的定义,我们就有如下的式子:

对elective adminssion的odds:

o d d s e l e = p 1 − p = a b = e β 0 odds_{ele}=\frac{p}{1-p}=\frac{a}{b}=e^{\beta_0} oddsele=1pp=ba=eβ0

对emergency adminssion的odds:

o d d s e m e = p 1 − p = c d = e β 0 + β 1 odds_{eme}=\frac{p}{1-p}=\frac{c}{d}=e^{\beta_0+\beta_1} oddseme=1pp=dc=eβ0+β1

那么所以这个OR值就可以计算:

O R = a d b c = o d d s e l e / o d d s e m e = a b / c d = e β 0 + β 1 / e β 0 = e β 0 + β 1 − β 0 = e β 1 OR =\frac{ad}{bc} =odds_{ele}/odds_{eme}=\frac{a}{b}/\frac{c}{d}=e^{\beta_0+\beta_1}/e^{\beta_0}=e^{\beta_0+\beta_1-\beta_0}=e^{\beta_1} OR=bcad=oddsele/oddseme=ba/dc=eβ0+β1/eβ0=eβ0+β1β0=eβ1

也就是说,实际上OR值就是e的logistics regression中的回归系数次方。因此通常在公共卫生研究中求OR值,第一步就是先做logistics regression然后接着进行计算。对应其实也可以计算OR的95%置信区间以及p值(Explaining Odds Ratios)。这块这里就不详述了。我这里还是采用icu数据做个样例分析,展示三种方式(第一种不借助其他包,第二个使用epiDisplay,第三个是用questionr)求OR。

## 1 without any packages
modellogit <- glm(sta~type, data = icu, family = binomial)
ORDF <- data.frame(exp(cbind(OR = coef(modellogit), confint(modellogit))))
ORDF

## 2 Using epiDisplay
install.packages('epiDisplay')
library(epiDisplay)
modellogit <- glm(sta~type, data = icu, family = binomial)
ORDF <- logistic.display(modellogit)
ORDF

## 3 Using questionr
install.packages('questionr')
library(questionr)
modellogit <- glm(sta~type, data = icu, family = binomial)
ORDF <- odds.ratio(modellogit)
ORDF

目前个人推荐第三种,能把p值一起算出来,这里要注意R里面默认factor的第一个因子作为参考组(baseline),如需要设置不同的参考组。可以用如下的函数。

icu$type <- relevel(icu$type, ref = "emergency")

最后本次的代码也都是在之前的github项目上。欢迎大家使用。最后再放一下两个项目地址:

Note-of-Applied-Statistics-with-R

Note-of-Applied-Statistics-with-R-Book

参考链接:

  1. Logistic regression for a Yes/No outcome

  2. Confused with the reference level in logistic regression in R

  3. Logistic regression - defining reference level in R

  4. Reference category and interpreting regression coefficients in R

  5. Confidence Intervals for RRs, ORs in R

  6. How to calculate the p.value of an odds ratio in R?

  7. Calculating Odds Ratio in R

  8. Odds ratios and logistic regression: further examples of their use and interpretation

  9. BMI 541/699 Lecture 22

  10. aplore3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算 的相关文章

  • Rstudio更换主题/样式

    github项目地址 https github com gadenbuie rsthemes 安装 在 rstudio 的控制台console中数据 install packages devtools devtools install gi
  • 论文R语言复现

    高斯混合概率在众多领域都有重要应用 依据已知观测数据估计高斯模型中未知参数就显得尤为重要 由于观测值具体来自于高斯分布的哪个分模型是未知的 那么利用传统的极大似然 MLE 方法进行参数估计就变得十分困难 引入 EM 算法 该方法通过构造分布
  • R语言基本函数的学习(持续更新)

    目录 前言 Tidyverse包 arrange 函数 head 函数 filter 函数 select 函数
  • Error in createDataPartition(...):y must have at least 2 data points

    项目场景 在R中使用caret包 划分训练集和测试集时 出现错误Error in createDataPartition data OS STATUS p 0 5 list FALSE y must have at least 2 data
  • R语言 数据处理(一)

    数据合并 提取及降维处理 install packages dplyr 数据处理包dplyr library dplyr name1 lt c Bob Mary Jane Kim name2 lt c Bob Mary Kim Jane w
  • R语言——数据排序

    R语言中涉及排序的基本函数有order sort和rank三个 下面看看它们的基本用法 x表示需要排序的数据 decreasing表示是否按降序排序数据 method表示所使用的排序算法 na last表示如何处理NA值 缺失值 若为FAL
  • R语言数据拆分

    博主的话 大家好 这里是bio 先赞后看养成习惯 还没关注的小伙伴点点关注不迷路 今天是南方的小年 祝福大家小年快乐 目录 博主的话 前言 一 split 函数 二 subset 函数 总结 前言 今天继续学习R语言 我们之前已经介绍过了数
  • r语言写九九乘法表并保存为txt文件

    r语言写九九乘法表并保存为txt文件 代码 for i in 1 9 for j in 1 i cat j x i i j t file 九九乘法表 txt append TRUE cat n file 九九乘法表 txt append T
  • R语言作图:坐标轴设置

    R语言作图 坐标轴设置 偷闲阁 2018 02 04 20 51 24 209654 收藏 359 分类专栏 R语言 可视化 文章标签 R 坐标轴 刻度 可视化 版权声明 本文为博主原创文章 遵循 C
  • R语言与机器学习中的回归方法学习笔记

    来源 http blog sina com cn s blog 62b37bfe0101hom5 html key word lars rpart randomForest cp svm data diabetes prune boosti
  • 转载:R语言绘图—图形标题、坐标轴设置

    R语言绘图是通过函数命令及相应参数设置实现的 如plot x y plot为绘图函数命令 x y则是绘图参数 指定了绘图的数据向量 但这种最基本的绘图设置很难满足个性化绘图的要求 我们需要根据需要对图形元素进行设置 图形元素是各类图形的基本
  • R语言【数据集的导入导出】

    目录 一 从键盘输入数据 二 函数方法读取 1 读取数据文件 2 从屏幕读取数据 1 scan 2 readline 3 读取固定宽度数据文件 三 读取csv文件 四 读取表格数据文件 五 从网络中读取表格或者CSV数据文件 一 从键盘输入
  • R语言GGPLOT2绘制圆环图雷达图/星形图/极坐标图/径向图Polar Chart可视化分析汽车性能数据

    最近我们被客户要求撰写关于可视化的研究报告 包括一些图形和统计输出 漂亮的圆形图 我不确定对数据分析师本身是否有额外的好处 但如果能吸引决策者的注意 那对我来说就是额外的价值 然而 用coord polar 或偶尔发现的ggplot2中的c
  • r如何让新增加的列出现在第一列 r如何调整新增加的列的位置

    https www cnblogs com liujiaxin2018 p 16211983 html 1 任意位置插入列 复制代码 gt a lt letters 1 5 gt b lt LETTERS 1 5 gt c lt sampl
  • 统计建模与r软件课后习题五 5.1~5.11题

    第五章 假设检验 问题导向 由正常男子血小板计数均值这句话 容易判断属于对均值进行检验的问题 H0 与正常男子无差异等于225 H1 与正常男子有差异 不等于225 x c 220 188 162 230 145 160 238 188 2
  • R数据科学-第九章使用lubridate处理日期和时间

    本章将会使用以下三个包 gt library tidyverse gt library lubridate gt library nycflights13 一 创建日期或时间 表示日期或时间的数据有三种 日期 在tibble中显示为date
  • 2021-05-03

    一 R中安装 phyloseq 的方法 很多网上的教程使用的都是 source https bioconductor org biocLite R biocLite phyloseq 但是我尝试了很多次 最后还是没有成功 下面能成功安装 p
  • 计算机科学丛书(2014-2018.Q1)

    ISBN 名称 作者 出版时间 978 7 111 53451 8 数学设计和计算机体系结构 原书第2版 美 戴维 莫尼 哈里斯 莎拉 L 哈里斯著 978 7 111 44075 8 嵌入式计算系统设计原理 美 Marilyn Wolf著
  • R语言实现推荐系统

    目录 1 理论基础 1 1 推荐系统 1 2 R语言 2 数据准备 2 1 数据获取 2 2 数据读取
  • 4. 统计描述和基线表格绘制

    目录 1 连续型变量统计描述 单变量统计描述 1 summary函数 2 psych包中的describe 函数 3 Hmisc包中的describe 函数 4 pastecs包的stat desc 的函数 分组统计描述 1 doBy包的s

随机推荐

  • [转]QT中窗口刷新事件的学习总结

    QT中窗口刷新事件的学习总结 一 主要理解一下几个方法和属性 1 QWidget QScrollView viewport const 2 void QWidget paintEvent QPaintEvent 虚 保护 3 void QW
  • Hive 窗口函数大全

    目录 窗口函数概述 窗口序列函数 row number dense rank 窗口边界 滑动窗口 lag 获取上一行数据 lead 获取下一行数据 窗口专用计算函数 sum累加函数 max最大值 min最小值 avg平均值 count累计次
  • vue的组件通信方法(9种)

    1 传 在 组件的标签上定义属性 组件通过props来进 接收 可以通过数组或者对象的 式接收 如果 组件没有传递属性 组件可以default来设置默认值 父传子的使用场景 封装列表的时候 把数据传到子组件渲染 2 传 组件通过this e
  • 深度学习(30)—— DeformableDETR(1)

    深度学习 30 DeformableDETR 1 原本想在一篇文章中就把理论和debug的过程都呈现 但是发现内容很多 所以就分开两篇 照常先记录理论学习过程 然后是实践过程 注 大家一定不要看过理论就完事儿了 去扣代码 看人家怎么完成的
  • qt5.6.0 opengl —— 纹理贴图

    对于CUBE这个例子 之前分析了它的框架 至于图怎么弄上去的还怎么细看 现在尝试弄了一下 首先分析它怎么对应的 原本是一张图 怎么分成六面的 于是像高中时代那样开始了计算理解 这样就清楚多了 一张图 划分为6个块 一个面一块 至于归一化 可
  • k8s如何对外公布一个应用程序

    一 Kubernetes Service 服务 概述 事实上 Pod 容器组 有自己的 生命周期 opens new window 当 worker node 节点 故障时 节点上运行的 Pod 容器组 也会消失 然后 Deployment
  • Spring Security快速入门

    Spring Security是一个框架 提供 认证 authentication 授权 authorization 和 保护 以抵御常见的攻击 它对保护命令式和响应式应用程序有一流的支持 是保护基于Spring的应用程序的事实标准 spr
  • Java中的集合及深拷贝与浅拷贝

    Java中的集合及深拷贝与浅拷贝 Java是一种面向对象的编程语言 其中集合是常用的数据结构之一 具有方便快捷的特点 在Java开发中 我们常常需要对集合进行复制 拷贝 操作 但是 拷贝操作并不是简单的复制 而应该分为浅拷贝和深拷贝两种不同
  • MySQL学习笔记1:MySQL字符集和字符集编码

    MySQL学习笔记索引 MySQL学习笔记1 MySQL字符集和字符集编码 MySQL学习笔记2 如何避免数据库乱码 MySQL学习笔记3 排序规则和排序规则的影响 MySQL学习笔记4 排序规则的修改 文章目录 一 基本概念 二 mysq
  • 【学习笔记】应用与编排管理:Deployment

    学习笔记 应用与编排管理 Deployment 需求来源 背景问题 Deployment 管理部署发布的控制器 架构设计 管理模式 Deployment 控制器 ReplicaSet 控制器 发布模拟 spec 字段解析 升级策略字段解析
  • 闭包使用的3种情景

    定义 通俗讲 闭包是函数里面再定义一个函数 里层函数能访问到外层函数的局部变量 也就是说闭包是一个能访问外层函数局部变量的函数 常用情景有以下3种 1 在window下有个全局变量a 在函数checkScope内部有个局部变量a 需求 在w
  • Parkour World 游戏内测攻略详解

    Parkour World 是一款将赛博朋克风格与跑酷元素结合的运动类PC端游戏 玩家通过在虚拟世界中进行跑酷 从而获取相应的奖励 Parkour World结合区块链技术 采用保值NFT以及独特的3token Arb Hood Yuri
  • Spring源码分析(七)Bean生命周期源码解析5:Bean的销毁

    Bean的销毁过程 应用场景 通过实现DisposableBean接口 或者使用注解 PreDestroy都行 Component public class OrderService implements DisposableBean pu
  • 游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理

    本系列文章由zhmxy555编写 转载请注明出处 http blog csdn net zhmxy555 article details 7405479 作者 毛星云 邮箱 happylifemxy qq com 欢迎邮件交流编程心得 上一
  • 领域驱动设计:DDD 关键概念

    文章目录 领域和子域 核心域 通用域和支撑域 通用语言 限界上下文 实体 值对象 聚合 聚合根 设计聚合 DDD 的知识体系提出了很多的名词 像 领域 子域 核心域 通用域 支撑域 限界上下文 聚合 聚合根 实体 值对象等等 非常多 领域和
  • 归一化笔记

    目录 为什么要归一化 归一化的方法有哪些 归一化各方法特点 归一化的意义 哪些机器学习算法需要做归一化 哪些机器学习算法不需要做归一化 为什么要归一化 因为每一列数据的量纲不同 导致数据分布区间区间存在差异 举例 人的身高可以是180cm
  • 搜狐2012年校园招聘会笔试题解析

    一 不定项选择题 1 以下程序的打印结果是 cpp view plain copy include
  • QT笔记- 使窗口不获得焦点,但响应鼠标事件

    HWND wid HWND this gt winId SetWindowLong wid GWL EXSTYLE GetWindowLong wid GWL EXSTYLE WS EX NOACTIVATE WS EX COMPOSITE
  • Polycarp and Div 3【Codeforces Round #496 (Div. 3)【D题】】【贪心】

    应该说是今天凌晨的吧 第一次打Code Forces 懵懵懂懂的 不过感觉还是良好 做了几道签到题 难题还是没有那个水准去做 Polycarp likes numbers that are divisible by 3 He has a h
  • 应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算

    本期是之前做的应用统计学与R语言实现笔记的番外篇四 本期主要关注两个问题 一个是重新利用R的bookdown包创建新的电子书 另一个是计算公共卫生当中一个比较常见的指标OR值 文章目录 1 bookdown使用 2 公式更正 3 OR值计算