• Posts tagged "mathjax"

Blog Archives

在rmarkdown中编写数学公式

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹,分析师/程序员/Quant: R,Java,Nodejs
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/r-markdown-math-latex/

前言

我们编写专业的学术文档时,一定会有数学公式的部分。那么如何在rmarkdown的文档中,加入数学公式呢?这其实并不难,需要了解laTex语法结构,再多练练。然后使用时,知道去哪里查就行了。有点像使用正则表达式,随写随查。

目录

  1. 在rmarkdown文档中加入数学公式
  2. laTex 数学公式语法
  3. 用R来完成作业

1. 在rmarkdown文档中加入数学公式

我们在写专业的论文时,经常需要加入数学公式,我们在利用 rmarkdown 来写文档时,可以支持加入数学公式。rmarkdown是一个R语言支持的写文档的方便工具,RStudio工具已经有了集成支持,在 用R编写markdown格式文档 一文中,我详细地介绍的 rmarkdown 文档的写法。

在了解了 rmarkdown 文档的使用后,本文将介绍在文档中加入 laTex语法的数学公式,来进行数学公式的编辑。

在插入数学公式时,有2种语法,用 $ 和 $$ 的。

  • 行内公式:将公式插入到本行内,符号:$公式内容$,如:$xyz$,
  • 多行公式:将公式插入到新的一行内,并且居中,符号:$$公式内容$$。

2. laTex 数学公式语法

在我们使用公式时,需要了解laTex的数学公式的语法,正确使用公式语法,才能正确输出想要的公式结果,公式语法分为几大类分别进行介绍。

2.1 希腊字母表

名称大写code小写code
alphaAAα\alpha
betaBBβ\beta
gammaΓ\Gammaγ\gamma
deltaΔ\Deltaδ\delta
epsilonEEϵ\epsilon
zetaZZζ\zeta
etaHHη\eta
thetaΘ\Thetaθ\theta
iotaIIι\iota
kappaKKκ\kappa
lambdaΛ\Lambdaλ\lambda
muMMμ\mu
nuNNν\nu
xiΞ\Xiξ\xi
omicronOOο\omicron
piΠ\Piπ\pi
rhoPPρ\rho
sigmaΣ\Sigmaσ\sigma
tauTTτ\tau
upsilonΥ\Upsilonυ\upsilon
phiΦ\Phiϕ\phi
chiXXχ\chi
psiΨ\Psiψ\psi
omegaΩ\Omegaω\omega

2.2 四则运算

符号名代码实例
加号+a+b
减号a-b
加减号\pma \pm b
减加号\mpa \mp b
乘号\timesa \times b
星乘a-b
点乘\cdota \cdot b
除号\diva \div b
斜除/a / b

2.3 括号

1、小括号与方括号
使用原始的( )、[ ],如(2+3)*[4+4]。

2、大括号
由于大括号{}被用来分组,需要使用\{和\}表示大括号,或者可以使用\lbrace 和\rbrace来表示。如\{a*b\} 或 \lbrace a*b \rbrace

3、尖括号
使用\langle和\rangle表示左尖括号和右尖括号。如\langle x \rangle。

4、上取整和下取整
使用\lceil 和 \rceil 表示上取整,如\lceil x \rceil。使用\lfloor 和 \rfloor 表示下取整,如\lfloor x \rfloor

2.4 上标、下标、顶部

上标使用^,下标使用_,例如x_i^2

默认情况下,上下标符号仅仅对下一个组起作用。一个组即单个字符或者使用{..}包裹起来的内容,对比10^10不同于10^{10}。使用大括号可以消除二义性 ,如x^5^6是错误的语法,需要写成 {x^5}^6 或者 x^{5^6}。

2.5 求和,积分,连乘、交集并集、最大最小、自变量集

本分类的都可以使用类似语法加下限和上限,下限用_,上限用^,如\sum_{i=1}^n。

求和:使用 \sum,下限用_,上限用^,如\sum_{i=1}^n

积分:使用\int,下限用_,上限用^,如\int{i=1}^\infty

多重积分:使用\int, \iint, \iiint

连乘: 使用\prod,下限用_,上限用^,如\int{i=1}^n

交集和并集:使用\bigcpu\bigcap

最大和最小:使用\max\min

最大最小自变量集:使用\mathop {argmax}_{c_k} 和 \mathop {argmin}_{c_k}。

2.6 分式、连分式、根式

分式有2种语法:第一种是使用/frac,如/frac  ab,其中a为分子,b为分母。第二种是使用\over,如 {a+b\over c+d},其中\over之前为分子,之后为分母。

连分式:可以直接使用/frac的分式的写法,也可以用/cfrac语法,这种方法字体不缩小。

根式:使用\sqrt,默认为平方根,如\sqrt[4]{a+b},[4]为几次方根,{a+b}为具体的值。

2.7 分类表达式、多行表达式、方程组、占位符

分类表达式:使用\begin{cases}…\end{cases} 的语法。

多行表达式:使用begin{equation}...end{equation}的语法;使用begin{split}表示开始多行公式,end{split}表示结束。

方程组:使用\begin{array}...\end{array}\left \{\right.配合表示方程组,也可以使用\begin{cases}…\end{cases}表示。

占位符:换行 \\,多位换行\\[3ex] 3ex可以改成5ex等, 较大间隙空格\; , 普通空格 ,更大间隙空格\quad 与 \qquad,对齐&

2.8 三角函数,反三角函数

三角函数:正弦\sin,余弦\cos,正切\tan x,余切\cot x , 正割\sec x ,余割\csc x

反三角函数:反正弦\sin,反余弦\cos,反正切\tan x

2.9 运算符,排列组合,求模

比较运算符:小于\lt,大于 \gt ,小于等于 \le ,大于等于 \ge ,不等于\ne ,不\not ,不小于 \not\lt

集合运算符:求并集\cup,求交集 \cap,求差集\setminus,子集\subset,在子集 \subseteq ,不在子集 \subsetneq,父集\supset,属于\in,不属于\notin,空集 \emptyset,空\varnothing

对数运算符:使用\log ,\lg,\ln,如\log_2 10,其中2为底,b为值。

排列组合:使用\binom或者\choose

模运算:使用\pmod

2.10 特殊符号

特征符号,包括箭头,逻辑运算符,符号,多种等于,范围类型,点类型,顶部标记,连线符号。

2.11 表格

表格使用\begin{array}{列样式}…\end{array} 这样的形式来创建表格,列样式可以是clr 表示居中,左,右对齐,使用| 表示一条竖线。表格中各行使用\\ 分隔,各列使用& 分隔。使用\hline 在本行前加入一条直线。

2.12 矩阵

普通矩阵:使用\begin{matrix}…\end{matrix} 表示矩阵。

矩阵扩号:对矩阵加括号对应有不同的类型,小括号{pmatrix},中括号{bmatrix},大括号{Bmatrix},竖线{vmatrix},双竖线{Vmatrix}。

省略元素矩阵:使用省略号与普通矩阵进行组合 \cdots\ddots\vdots

增广矩阵:使用表格中使用到的\begin{array} ... \end{array} 来实现。

2.13 标记与引用

bbbb

2.14 字体

符号名代码
黑板粗体字\mathbb,\Bbb
黑体字\mathbf,\bf
打印机字体\mathtt,\tt
罗马字体\mathrm,\rm
手写字体\mathscr
Fraktur字母\mathfrak
意大利体\it
花体\cal
等斜体\sf
数字斜体\mit

2.15 颜色

符号名代码
黑色\color{black}
灰色\color{gray}
银色\color{silver}
白色\color{white}
栗色\color{maroon}
红色\color{red}
黄色\color{yellow}
青柠色\color{lime}
橄榄色\color{olive}
绿色\color{green}
绿色\color{green}
鸭绿色\color{teal}
青色\color{aqua}
蓝色\color{blue}
海军蓝\color{navy}
紫色\color{purple}
紫红色\color{fuchsia}

3. 用R来完成作业

下面我找2道国外留学朋友遇到的作业题,来看一下,怎么用rmarkdown来完成作业的要求。

1. Show that the OLS estimator for β1 in the simple linear regression model can be written as.

代码

\hat\beta_1=\frac{\sum\left(X_i-\overline{X}\right)Y_i}{\sum\left(X_i-\overline{X}\right)^2}=\frac{\sum X_iY_i-\overline{X}\sum Y_i}{\sum X_i^2+\sum \overline{X}^2 - 2\overline{X}\sum X_i}\\
=\frac{\sum X_iY_i-\overline{X}*N\overline{Y}}{\sum X_i^2+N\overline{X}^2 - 2\overline{X}*N\overline{X}}
=\frac{\sum^{N}_{i=1} X_iY_i-N\overline{XY}}{\sum^{N}_{i=1}Xi^2-N\overline{X}^2}

2a.Find the OLS estimator for β1 in the linear regression model with no intercept term, i.e., in the regression Yi=β1Xi+Ei, i=1,2,...,N. Which algebraic properties of OLS estimatios discussed in the notes continue to hold and which are lost? Will the R^2 still necessarily lie between 0 and 1?

代码

SSR=\sum^{N}_{i=1}\hat E_i^2 =  \sum\left(Y_i-\hat\beta_1X_i\right)^2\\
FOC:\frac{\partial SSR}{\partial Xi} = -2 \sum\left(Y_i-\hat\beta_1X_i\right)\hat\beta_1= -2\hat\beta_1\sum\left(Y_i-\hat\beta_1X_i\right)=0\\
=>\sum^{N}_{i=1}\hat E_i=\sum\left(Y_i-\hat\beta_1X_i\right)=0\\
\frac{\partial SSR}{\partial \beta_1}=-2\sum\left(Y_i-\hat\beta_1X_i\right)X_i=0\\
=> \sum^{N}_{i=1}X_i\hat E_i=\sum X_i\left(Y_i-\hat\beta_1X_i\right)=0

2b. What is the OLS estimator for β0 in the linear regression model with no regressor, i.e., in the regression Yi=β0 + Ei? What is the R^2 for this regression? Remark :All of regressions will include the intercept term, unless explicitly stated otherwise.

代码

SSR=\sum^{N}_{i=1}E_i^2=\sum\left(Y_i-\beta_0\right)^2\\
\frac{\partial SSR}{\partial\hat\beta_0}|_{\hat\beta_0^{ols}} =-2\sum^{N}_{i=1}\left(Y_i-\beta_0\right)=-2N\overline{Y}+2N\beta_0=0 => \hat\beta_0=\overline{Y}\\
=>SST=\sum^{N}_{i=1}\left(Y_i-\overline{Y}\right)^2=\sum\left(\overline{Y}+\hat E_i-\overline{Y}\right)^2=\sum\hat E_i^2\\
=> R^2=1-\frac{SSR}{SST}=0

有了数学公式的编写神器,感觉完成作业简直太顺手了。只是用数学公式进行解题和推理,对我来说真是太难了。我还是喜欢写程序。哈哈哈!
转载请注明出处:
http://blog.fens.me/r-markdown-math-latex/
打赏作者

用R编写markdown格式文档

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹,分析师/程序员/Quant: R,Java,Nodejs
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/r-markdown-rmarkdown/

前言

Markdown格式文档编写,已经从小众成为了一种主流的文档编写方式。R语言社区在可重复性文档编写领域中,有着重要的贡献。knitr和rmarkdown等包的支持,到后来在RStudio中直接集成的rmarkdown的功能,让R的广大用户有了非常舒服的markdown文档使用体验。

2015时,我就已经开始用markdown来写书稿,当时写了2篇关于在nodejs领域中使用markdown的文章,Marked高效的Markdown解析器用WebStorm编辑Markdown

时光证明了,小而美的好东西,真的会放大光芒。改变用户使用习惯,从小而美开始。

目录

  1. 创建一个rmarkdown文档
  2. 嵌入markdown文本
  3. 嵌入R代码
  4. 嵌入DT动态表格
  5. 嵌入echarts动态图
  6. 嵌入数学公式

1. 创建一个rmarkdown文档

写文档的常规操作是用word,程序员写文档的常规操作是用IDE的编程工具,用markdown格式来写文档,最后可生成word、pdf、html等文档。

我们今天讲讲怎么用R语言来写文档吧,那么R语言对markdown的支持包是rmarkdown包,现在新版的RStudio开发工具,已经集成了rmarkdown包,我们直接在RStudio中操作就行了。

首先我们先打开RStudio开发工具,选择新建一个R Markdown文件。

选择Document文档格式,设置Title, Author, Date等基本信息,然后可以选择文档输出格式HTML, PDF, Word的三种选择,不同的格式输出需求本机已经安装对应的其他软件。

打开新创建的文档,默认会是一个模板,以rmarkdown的格式进行展示,上面所输入的参数,在文档都的开头部分都有展示。然后保存一下文件。

我们可以点击Knit的下拉菜单,选择输出为HTML。

然后,运行Knit就会新打开一个窗口,看到HTML的网页输出。

如果想输出为word格式,重新选择 Knit到word就行了,运行后会弹出word的新生成的文件。

一通操作下来,功能切换很是顺畅,体验非常舒服。那么接下来就在rmarkdown中,加入各种元素,让整个文档丰富起来。

2. 嵌入markdown文本

在rmarkdown中嵌入markdown文本,是最基本的操作,在默认生成的文档中,就是一个带有markdown格式的文本。markdown格式的文本,包括10种主要的格式,分别是标题,字体,引用,分隔,图片,链接,列表,表格,代码。

2.1 标题
标题支持六级标题,用#做为开头,#的数量表示是几级标题。


# 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题


图中,左边中编辑界面,右边是HTML的输出界面。

2.2 字体
字体格式设置有2种方法,一种是就markdown默认支持的4种格式,加粗,斜体,斜体加粗,删除线。另一种方法就是使用html的标签<font>来进行设置。


**这是加粗的文字**
*这是倾斜的文字*`
***这是斜体加粗的文字***
~~这是加删除线的文字~~

<font face="宋体">宋体</font>
<font face="宋体" color="red">红色宋体</font>
<font face="宋体" color="red" size="5">5号红色宋体</font>

2.3 引用
使用>用于表示引用外部的一段话,在引用中可以用\来进行换行。


> 我要引用一段文字\
\
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

2.4 分隔

在markdown中,可以通过3个连续的-或*,来设置分隔符。


--开始

---

**开始

********************

结束

2.5 图片
插入图片时,需要使用![文本说明](链接)语法。


![R的极客理想](http://fens.me/images/slider/img4.png)


2.6 链接
设置超级链接,有2种写法,一种就是[显示文字](链接),另一种是<链接>。


[粉丝日志博客](fens.me)

<http://www.fens.me>

2.7 列表
列表支持3种语法,一种是无序列表,二是有序列表,三是嵌套列表。

  • 无序列表,用 – + * 任何一种都可以,跟内容之间都要有一个空格
  • 有序列表,用数字加点,跟内容之间都要有一个空格
  • 嵌套列表,上一级和下一级之间有三个空格,跟内容之间都要有一个空格

无序列表

+ 列表内容
+ 列表内容
+ 列表内容

有序列表

1. 列表内容
2. 列表内容
3. 列表内容

无序列表嵌套

+ 1 列表内容
   + 1.1 列表内容
   + 1.2 列表内容
+ 2 列表内容
+ 3 列表内容

2.8 表格
在嵌入表格时,需求包括表头行,分隔符行,表体行。表头行用|分隔,表体行也用|分隔,分隔符行需要用–|组合进行分隔。当希望单元格整列对齐时,可以分隔符行加:来控制对齐,文字默认居左,两边加表示文字居中,右边加:表示文字居右。


表头|表头|表头
---|:--:|---:
内容|内容|内容
内容|内容|内容

表头|表头|表头
--|--|--
内容|内容|内容
内容|内容|内容


2.9 代码
代码的嵌入可以分为行内代码嵌入代码和代码块。

  • 行内代码,需要使用”包住代码,代码不可换行。
  • 代码块,需要用“` “`来包住代码,代码可换行。

文字中内嵌了`a="abc"`代码

```
a="abc"
a1=2
a2=3
a3=a1+a2
```

Markdown的基本语法,就是这9部分很简单,写一次练习一下,就记住了。

3. 嵌入R代码

上面我们演示了在markdown中嵌入代码,那么对于R语言来说,如果我们希望嵌入R代码,需要代码块针对R代码做一些支持的时候,要怎么写呢。


```{r}
a<-Sys.Date()
a

head(iris)
plot(iris)
```

接下来,我们还可以在{r echo=FALSE}加入echo=FALSE,这样就不输出R的代码本身了。


```{r echo=FALSE}
library(xts)
xdf<-xts(rnorm(100),order.by = as.Date('2022-01-01')+1:100)
plot(xdf)
```

4. 嵌入DT动态表格

在R的代码中,我们可以调用R的各种包进行输出,可以使用DT包来做动态表格,只要把数据放到datatable()函数中,就可以在markdown中生成对应的动态表格,支持翻页、关键字搜索,排序等多种功能。


```{r}
library(DT)
datatable(iris)
```

5. 嵌入echarts动态图

在文档输出时,经常需要用图进行展示,我们也可以直接使用echart4r包来调用echarts进行多种图的可视化展示。


```{r}
library(echarts4r)
library(magrittr)
iris %>% 
  e_charts(x = Sepal.Length) %>%
  e_scatter(serie = Sepal.Width )
```

6. 嵌入数学公式

文档中,也避免不了经常会写一些数据公式 ,rmarkdown中也集成是嵌入数据公式的功能。我们可以直接使用$$公式$$的语法,来生成复杂的数学公式。在文档中加入数学公式,是使用mathjax格式来进行数学公式的编辑。


$$
\hat\beta_1=\frac{\sum\left(X_i-\overline{X}\right)Y_i}{\sum\left(X_i-\overline{X}\right)^2}=\frac{\sum X_iY_i-\overline{X}\sum Y_i}{\sum X_i^2+\sum \overline{X}^2 - 2\overline{X}\sum X_i}\\
=\frac{\sum X_iY_i-\overline{X}*N\overline{Y}}{\sum X_i^2+N\overline{X}^2 - 2\overline{X}*N\overline{X}}
=\frac{\sum^{N}_{i=1} X_iY_i-N\overline{XY}}{\sum^{N}_{i=1}Xi^2-N\overline{X}^2}
$$

本文我介绍了rmarkdown的功能,有非常丰富的支持,多样的表达形式,语法简单,而且是可重复性生成的,比起 word 写文档,有更多的编程的特点。写书,写论文,写标书,写文档,都是不错的选择。

转载请注明出处:
http://blog.fens.me/r-markdown-rmarkdown/

打赏作者