Skip to content

Commit deb23cd

Browse files
committed
yihui.name -> yihui.org
1 parent 45a6a89 commit deb23cd

File tree

7 files changed

+10
-10
lines changed

7 files changed

+10
-10
lines changed

book.bib

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ @Book{xie2015
66
year = {2015},
77
edition = {2nd},
88
note = {ISBN 978-1498716963},
9-
url = {http://yihui.name/knitr/},
9+
url = {http://yihui.org/knitr/},
1010
}
1111
@Book{xie2016,
1212
title = {bookdown: Authoring Books and Technical Documents with {R} Markdown},

data.Rmd

+2-2
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ example("gov.cn.pct", package = "MSG")
348348
[^news-sina]: <https://news.sina.com.cn/c/2009-12-12/034016758777s.shtml>
349349
[^chem-hack]: 原网页 http://chemhack.com/cn/2009/12/87-53-stat/ 已失效,[快照](https://web.archive.org/web/20120115032226/http://chemhack.com/cn/2009/12/87-53-stat/)
350350

351-
\@ref(fig:gov-cn-pct) 中左上图用垂线表示了每个百分比的搜索频数大小,从中我们可以发现垂线在某些区间上显得异常得高,为了更清楚查看这些大频数的位置,我们可以把图形放大,如右上图显示了 $[10\%,\,11\%]$ 区间上的频数,这里我们可以清楚看到取整的百分比的频数明显比其它百分比的频数大,其它区间上有类似的特征(GIF 动画 <https://yihui.name/cn/2009/12/statistics-in-their-eyes/> 展示了所有长度为 1 的区间上的频数,使这个特征更容易观察到)。为了进一步验证“取整”的猜测,我们可以分别将取整和不取整的百分比以不同样式的点表示出来,并且加上 LOWESS 曲线(见 \@ref(subsec:lowess) 小节),从图中可以看到,无论是取整到整数还是取整到 1 位小数,搜索频数都明显更高。注意左下图和右下图的 y 轴是取过对数的,因此取整和不取整的实际差异比图中看到的更大。
351+
\@ref(fig:gov-cn-pct) 中左上图用垂线表示了每个百分比的搜索频数大小,从中我们可以发现垂线在某些区间上显得异常得高,为了更清楚查看这些大频数的位置,我们可以把图形放大,如右上图显示了 $[10\%,\,11\%]$ 区间上的频数,这里我们可以清楚看到取整的百分比的频数明显比其它百分比的频数大,其它区间上有类似的特征(GIF 动画 <https://yihui.org/cn/2009/12/statistics-in-their-eyes/> 展示了所有长度为 1 的区间上的频数,使这个特征更容易观察到)。为了进一步验证“取整”的猜测,我们可以分别将取整和不取整的百分比以不同样式的点表示出来,并且加上 LOWESS 曲线(见 \@ref(subsec:lowess) 小节),从图中可以看到,无论是取整到整数还是取整到 1 位小数,搜索频数都明显更高。注意左下图和右下图的 y 轴是取过对数的,因此取整和不取整的实际差异比图中看到的更大。
352352

353353
类似的建模前的探索性分析还可以在 @Cook07 中找到(小费数据的分析)。这种分析结果很难用数值的方式从数学模型中得到,因此在统计模型应用中,若能事先辅之以统计图形之类的探索,则可能会发现意想不到的信息。下面我们继续以一例数据讨论二元变量关系探索中 LOWESS 曲线相比起线性回归模型的重要地位。
354354

@@ -735,7 +735,7 @@ plot(betaSim, ylab = "$\\beta_1$")
735735

736736
(ref:outlier-resample) 用部分抽样方法诊断多个离群点:普通线性回归受离群点影响(左上),但传统离群点诊断方法如 Cook 距离并不能诊断出所有离群点(右上),如果我们对数据进行抽样(左下),则可以得到几类回归系数值(右下)。
737737

738-
图 \@ref(fig:outlier-resample) 展示了传统诊断方法与这里提出的抽样诊断方法的比较。左上图显示普通线性回归受离群点影响严重:理论上回归直线应该是水平的(斜率为 0),但右上角的两个离群点将回归直线拉起;右上图画出了这个回归模型中每个样本点的 Cook 距离,从图中可以看到,只有最后一条数据是离群点,而事实上倒数第二条数据也是离群点,只是删除这一条数据之后回归模型不会有太大变化(受最后一条数据掩盖),所以它不能被 Cook 距离识别出来;左下图显示了一种抽样的可能性:我们抽取数据的前 60 条(图中用实心点表示),去掉数据的后 42 条(空心点表示),然后重新建立回归模型,并画出回归直线,此时我们可以看到,由于去掉了两个离群点,回归直线的斜率大致为 0,与理论相符了;基于这种抽样的想法,我们将这个步骤重复 100 次,每次重新随机抽取一部分数据(可能包含离群点,也可能不包含),并重新计算回归系数,最终把 100 次的斜率都记录下来并画在右下图中,可以看出,这些斜率大致分为三群,这种“多群”的特征反映出原数据中有不止一个离群点(否则 100 个斜率只会分为两群:包含或不包含一个离群点的结果),靠近 0 的斜率是抽样不包含两个离群点的结果,而靠近 1 的斜率是包含两个离群点的结果,中间一层斜率是包含一个离群点的结果(可能是最后一条数据,也可能是倒数第二条)。这样我们就成功诊断出传统方法找不出来或者找不完全的离群点现象。这个模拟的 Flash 动画版本可以在网页 <https://yihui.name/cn/2008/09/multiple-outliers-detection/> 观看。
738+
图 \@ref(fig:outlier-resample) 展示了传统诊断方法与这里提出的抽样诊断方法的比较。左上图显示普通线性回归受离群点影响严重:理论上回归直线应该是水平的(斜率为 0),但右上角的两个离群点将回归直线拉起;右上图画出了这个回归模型中每个样本点的 Cook 距离,从图中可以看到,只有最后一条数据是离群点,而事实上倒数第二条数据也是离群点,只是删除这一条数据之后回归模型不会有太大变化(受最后一条数据掩盖),所以它不能被 Cook 距离识别出来;左下图显示了一种抽样的可能性:我们抽取数据的前 60 条(图中用实心点表示),去掉数据的后 42 条(空心点表示),然后重新建立回归模型,并画出回归直线,此时我们可以看到,由于去掉了两个离群点,回归直线的斜率大致为 0,与理论相符了;基于这种抽样的想法,我们将这个步骤重复 100 次,每次重新随机抽取一部分数据(可能包含离群点,也可能不包含),并重新计算回归系数,最终把 100 次的斜率都记录下来并画在右下图中,可以看出,这些斜率大致分为三群,这种“多群”的特征反映出原数据中有不止一个离群点(否则 100 个斜率只会分为两群:包含或不包含一个离群点的结果),靠近 0 的斜率是抽样不包含两个离群点的结果,而靠近 1 的斜率是包含两个离群点的结果,中间一层斜率是包含一个离群点的结果(可能是最后一条数据,也可能是倒数第二条)。这样我们就成功诊断出传统方法找不出来或者找不完全的离群点现象。这个模拟的 Flash 动画版本可以在网页 <https://yihui.org/cn/2008/09/multiple-outliers-detection/> 观看。
739739

740740
本例仅仅是以模拟的方法提供了一种离群点诊断新思路,沿着这种想法,我们可以继续发展新的理论,来弥补传统理论的不足。
741741

elements.Rmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ legend("topleft",
215215
)
216216
```
217217

218-
\@ref(fig:point-random) 为本书的一例“彩蛋”:基于随机性的图形可能会具有某种艺术性。这里仅仅展示了四幅可能的输出,其它更多可能的结果参见:<https://yihui.name/cn/2010/08/art-of-points-in-r/>,或观看演示 `demo('pointArts', package = 'MSG')`。若读者感兴趣,甚至可以用 R 为自己生成一幅桌面背景图片,制作方法在前面链接中有介绍。
218+
\@ref(fig:point-random) 为本书的一例“彩蛋”:基于随机性的图形可能会具有某种艺术性。这里仅仅展示了四幅可能的输出,其它更多可能的结果参见:<https://yihui.org/cn/2010/08/art-of-points-in-r/>,或观看演示 `demo('pointArts', package = 'MSG')`。若读者感兴趣,甚至可以用 R 为自己生成一幅桌面背景图片,制作方法在前面链接中有介绍。
219219

220220
```{r point-random,fig.scap="(ref:point-random-s)",fig.cap="(ref:point-random)"}
221221
par(mar = c(0.2, 0.2, 0.2, 0.2), mfrow = c(2, 2))

gallery.Rmd

+3-3
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ head(BinormCircle) # 数据前 6 行
326326
coef(summary(lm(V2 ~ V1, BinormCircle)))
327327
```
328328

329-
换用高阶回归的结果也类似,无论回归阶数为多少,系数均不显著,这一点从数据的构造上就可以知道(理论上两个变量的相关系数为 0)。由于样本量太大,普通的散点图上点与点之间严重重叠,所以也很难看出散点图有何异常,而使用半透明色的散点图则很容易看出,在大量的数据点中,还隐藏着一个圆圈,说明有相当一部分数据分布有特殊规律。我们在网页 <https://yihui.name/en/2008/09/to-see-a-circle-in-a-pile-of-sand/>
329+
换用高阶回归的结果也类似,无论回归阶数为多少,系数均不显著,这一点从数据的构造上就可以知道(理论上两个变量的相关系数为 0)。由于样本量太大,普通的散点图上点与点之间严重重叠,所以也很难看出散点图有何异常,而使用半透明色的散点图则很容易看出,在大量的数据点中,还隐藏着一个圆圈,说明有相当一部分数据分布有特殊规律。我们在网页 <https://yihui.org/en/2008/09/to-see-a-circle-in-a-pile-of-sand/>
330330
上给出了其它五种不同的解决方案,都可以从图形的角度反映出这种规律。本章 \@ref(sec:smoothScatter) 小节也将以平滑散点图的方式再回顾这批数据。
331331

332332
## 关联图 {#sec:assocplot}
@@ -1640,7 +1640,7 @@ demo("AgriComp", package = "MSG")
16401640
\@ref(fig:map)
16411641
展示了 2005 年世界各国家地区的农业进出口竞争力指标数据 [@Xie07],其中我们将竞争力指标简单定义为(出口-进口)/(出口+进口)。地图上方我们自行添加了颜色图例,从图中可以看出,阿根廷、巴西等南美国家的农业进出口竞争力较强,而利比亚、阿尔及利亚等北非国家的竞争力较弱。该地图的大致制作过程为:首先我们用 `world` 数据库作出一幅空白的世界地图,地区边界用灰色线条表示,然后我们根据竞争力数据中的地区名称与地理数据库中地区名称的对应将数据以颜色的形式表示到世界地图中,最后我们在图中添加了赤道线以及东盟国家(ASEAN)的矩形区域,因为会议论文 @Xie07 的主题是中澳自由贸易区。
16421642

1643-
在地理区域上标记大量的数值信息会遇到一个显而易见的困难,就是由于各个地理区域的面积不同而导致地图的解读失真或某些重要地理单元难以辨认。例如,我们在画中国省级地图时,北京和上海等直辖市相比其它省份显得面积太小,此时若用颜色来标记某个数值指标(如 GDP)就会使得各个直辖市的颜色几乎无法辨认。还有另一个更有趣的例子来自 08 年美国总统大选,若用红蓝两种颜色对各个州做标记,以表示该州支持麦凯恩或奥巴马,那么有些面积不大但是权重很大的州(如人口众多的加州)就会影响整幅美国地图,从原始地图上看,似乎麦凯恩会赢,因为他赢得了很多中部面积大的州(但人口稀少),整幅地图看起来以红色为主导,若我们保持州的相对地理位置不变,将各个州的形状进行大小的调整,使其面积与权重成正比,此时红蓝两色的局面就发生了逆转,地图以蓝色为主导色,地图传达信息的偏误才得到了纠正。我们把这种保持地理区域的相对位置不变、调整区域面积与某指标成比例的地图成为"变形地图"(Cartogram),详细内容可阅读 <https://yihui.name/cn/2009/03/cartogram-as-special-maps/>。
1643+
在地理区域上标记大量的数值信息会遇到一个显而易见的困难,就是由于各个地理区域的面积不同而导致地图的解读失真或某些重要地理单元难以辨认。例如,我们在画中国省级地图时,北京和上海等直辖市相比其它省份显得面积太小,此时若用颜色来标记某个数值指标(如 GDP)就会使得各个直辖市的颜色几乎无法辨认。还有另一个更有趣的例子来自 08 年美国总统大选,若用红蓝两种颜色对各个州做标记,以表示该州支持麦凯恩或奥巴马,那么有些面积不大但是权重很大的州(如人口众多的加州)就会影响整幅美国地图,从原始地图上看,似乎麦凯恩会赢,因为他赢得了很多中部面积大的州(但人口稀少),整幅地图看起来以红色为主导,若我们保持州的相对地理位置不变,将各个州的形状进行大小的调整,使其面积与权重成正比,此时红蓝两色的局面就发生了逆转,地图以蓝色为主导色,地图传达信息的偏误才得到了纠正。我们把这种保持地理区域的相对位置不变、调整区域面积与某指标成比例的地图成为"变形地图"(Cartogram),详细内容可阅读 <https://yihui.org/cn/2009/03/cartogram-as-special-maps/>。
16441644

16451645
## 脸谱图 {#sec:faces}
16461646

@@ -2004,7 +2004,7 @@ demo("float_pie", package = "MSG")
20042004
knitr::include_graphics("images/disk-usage.png", dpi = NA)
20052005
```
20062006
2007-
标签云就更简单了:将一些文本标签按一定顺序排在平面上,文本大小和某个数值成比例,这样最大的文字就能最先吸引我们的注意力。例如我们计算一篇文章中单词出现的频数,用频数大小来决定单词的大小,这样高频出现的词在图中一眼就能看出来,如图 \@ref(fig:yihui-name-wordle) 是作者英文博客(<https://yihui.name/en/>)利用 Wordle 生成的标签云。显然,animation 和 Sweave 两个词字号最大,这说明这两个词在博客中出现频率最高,这不难解释:因为作者一直开发 **animation** 包,并研究着 Sweave。
2007+
标签云就更简单了:将一些文本标签按一定顺序排在平面上,文本大小和某个数值成比例,这样最大的文字就能最先吸引我们的注意力。例如我们计算一篇文章中单词出现的频数,用频数大小来决定单词的大小,这样高频出现的词在图中一眼就能看出来,如图 \@ref(fig:yihui-name-wordle) 是作者英文博客(<https://yihui.org/en/>)利用 Wordle 生成的标签云。显然,animation 和 Sweave 两个词字号最大,这说明这两个词在博客中出现频率最高,这不难解释:因为作者一直开发 **animation** 包,并研究着 Sweave。
20082008
20092009
```{r yihui-name-wordle,fig.cap="(ref:fig-yihui-name-wordle)",fig.scap="(ref:fig-yihui-name-wordle-s)",echo=FALSE}
20102010
knitr::include_graphics("images/yihui-name-wordle.png", dpi = NA)

gui.Rmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,6 @@ knitr::include_graphics(path = c(
123123

124124
上面的代码中,首先我们用 `ggroup()` 来排版布局,主要是让控件以纵向方向排列,因为默认情况下新控件会横向排列;接着我们用循环创建三个滑动条分别代表红绿蓝,它们的取值范围为 0 到 1,滑动一步时值的变动为 0.05,其中绑定的事件为画空白图,图的背景按照向量 x 的三个成分由 `rgb()` 函数混合而成,这里我们使用了一点新概念,即 `action` 参数,它的意义稍微有点曲折:`action` 参数将来会传给 `handler` 参数中的函数,具体传递过程是,它的取值会被放在 `h` 参数的 `action` 子元素中,也就是我们可以用 `h$action` 来提取传入的值;循环中三个滑动条的 `action` 值分别为 1、2、3,而 `handler` 的函数中 `h$obj` 可以用来调用控件本身,所以用 `svalue()` 就可以提取该控件当前的值,并赋给 x 中的第 i 个元素,这里的赋值符号用的是双箭头 `<<-`,原因是在普通的赋值符下(等号 `=` 或者单箭头 `<-`),R 的变量作用域会使得函数内部对变量的修改只是局部的修改,外部的变量值不会改变,但双箭头可以从内部改变外部变量的值。这样,每次我们拖动第 i 个滑动条时,触发的事件是 x 中的第 i 个值被修改为滑动条的值,然后带背景色的空白图形会根据新的颜色被重画。最后我们使用了图形控件 `ggraphics()` 将 R 图形嵌入当前的图形界面,一个完整的颜色混合器界面就完成了。图 \@ref(fig:color-selector) 中左图显示的是 50\% 的红色配 50\% 的蓝色,结果是紫色;右图是 70\% 红、100\% 绿和 10\% 蓝混合的结果。
125125

126-
通过以上介绍,我们相信在 R 中创建 GUI 不再是难事。在日常工作中,偶尔写一个简单界面也能为我们的工作增添一些乐趣和便利。**formatR**[@formatR] 就是作者编写的一个用来自动整理 R 代码的图形界面,点一下按钮,文本框中的 R 代码就会被整理整齐(自动添加空格和缩进),更多介绍参见 <https://yihui.name/formatR>。另外,图形界面也是让图形发挥更大功效的有力工具,如 GGobi 软件若离开了它的图形界面,可能会失色不少。
126+
通过以上介绍,我们相信在 R 中创建 GUI 不再是难事。在日常工作中,偶尔写一个简单界面也能为我们的工作增添一些乐趣和便利。**formatR**[@formatR] 就是作者编写的一个用来自动整理 R 代码的图形界面,点一下按钮,文本框中的 R 代码就会被整理整齐(自动添加空格和缩进),更多介绍参见 <https://yihui.org/formatr/>。另外,图形界面也是让图形发挥更大功效的有力工具,如 GGobi 软件若离开了它的图形界面,可能会失色不少。
127127

128128

index.Rmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ knitr::include_graphics('images/cc-by-nc-sa.svg')
9595

9696
## 软件信息 {#rsession .unnumbered}
9797

98-
本书是在 RStudio 里用 R Markdown [@xie2018] 编辑的,bookdown [@xie2016] 组织各个章节的 Rmd 文件,knitr [@xie2015] 运行 Rmd 文件中的 R 代码块,并将 Rmd 文件转化为 md 文件,借助 [Pandoc](https://pandoc.org/) 将 md 文件转化为 html 和 tex 文件,在 [TinyTeX](https://yihui.name/tinytex/) 的作用下,同时输出 pdf 格式的书籍。
98+
本书是在 RStudio 里用 R Markdown [@xie2018] 编辑的,bookdown [@xie2016] 组织各个章节的 Rmd 文件,knitr [@xie2015] 运行 Rmd 文件中的 R 代码块,并将 Rmd 文件转化为 md 文件,借助 [Pandoc](https://pandoc.org/) 将 md 文件转化为 html 和 tex 文件,在 [TinyTeX](https://yihui.org/tinytex/) 的作用下,同时输出 pdf 格式的书籍。
9999

100100
```{r sessioninfo}
101101
sessionInfo(.packages(T))

0 commit comments

Comments
 (0)