北大讲义
-
北京大学R语言教程(李东风)附录D:制作幻灯片
介绍 R Markdown文件(.Rmd)文件支持多种输出,如网页(html_document)、MS Word(word_document)、PDF(pdf_document, 需要LaTeX编译器支持)等,还支持生成网页格式的幻灯片(slidy_presentation, ioslides_presentation),以及LaTeX beamer格式的P…
-
北京大学R语言教程(李东风)附录C:用R Markdown制作简易网站
介绍 为了从多个.Rmd源文件制作网站,可以使用blogdown扩展包或者bookdown扩展包。bookdown扩展包可以生成gitbook格式的网站,带有左侧的章节目录和前后页面的导航链接,很适用于一本书的网站。但是,bookdown使用时需要重新编译整个网站才能产生正确的链接。 也可以仅利用rmarkdown包的render.site()功能制作简易的…
-
北京大学R语言教程(李东风)附录B:用bookdown制作图书
介绍 R的bookdown扩展包(https://github.com/rstudio/bookdown)是继knitr和rmarkdown扩展包之后,另一个增强markdown格式的扩展,使得Rmd格式可以支持公式、定理、图表自动编号和引用、链接,文献引用和链接等适用于编写书籍的功能。在bookdown的管理下一本书的内容可以分解成多个Rmd文件,其中可以…
-
北京大学R语言教程(李东风)附录A:R Markdown文件格式
附录A-D的内容现在已经升级为Quarto(第22章)内容,这些内容放在这里备查。 R Markdown文件 借助于R的knitr和rmarkdown扩展包的帮助,可以在Markdown格式的源文件中插入R代码,使得R代码的结果能够自动插入到最后生成的研究报告中。这种格式称为R Markdown格式,简称为Rmd格式,相应的源文件扩展名为.Rmd。输出格式可…
-
北京大学R语言教程第58章:R编程例子(附:第59章:使用经验)
因为这些例子要用作学生习题,所以这里只有问题,没有解答。 R语言 用向量作逆变换 设向量x长度为n,其中保存了1到n的正整数的一个排列。把x看成是在集合{1,2,…,n}上的一个一一变换,求向量y使得y能够表示上述变换的逆变换。即任给长度为n的向量z, z[x]表示按照x的次序重新排列z的元素,而z[x][y]则应该恢复为z。 斐波那契数列计算 设数列x0=…
-
北京大学R语言教程第57章:用Rcpp帮助制作R扩展包
R扩展包是把解决某种问题的可复用代码、文档整合在一起的最好的方法。写成R扩展包后,可以自己用,也可以利用CRAN分发。扩展包用户一般不用自己编译。 使用扩展包来组织程序,多个源程序、头文件之间的依赖关系可以自动得到处理。 扩展包提供了测试、文档和一致性检查的统一框架。 扩展包中代码可以仅有R程序,也可以包括C程序、C++程序、Fortran程序。如果仅有R代…
-
北京大学R语言教程(李东风)第56章:Rcpp糖
在C++中,向量和矩阵的运算通常需要逐个元素进行,或者调用相应的函数。Rcpp通过C++的表达式模板(expression template)功能和懒惰求值(lazy evaluation)功能,可以在C++中写出像R中对向量和矩阵运算那样的向量化表达式。这称为Rcpp糖(sugar)。 R中的很多函数如sin等是向量化的,Rcpp糖也提供了这样的功能。Rc…
-
北京大学R语言教程(李东风)第55章: Rcpp提供的C++数据类型
RObject类 Rcpp包为C++定义了NumericVector, IntegerVector,CharacterVector, Matrix等新数据类型,可以直接与R的numeric, charactor, matrix对应。 Rcpp最基础的R数据类型是RObject, 这是NumericVector, IntegerVector等的基类,通常不直接…
-
北京大学R语言教程(李东风)第54章:Rcpp 属性
Rcpp属性介绍 Rcpp属性(attributes)用来简化把C++函数变成R函数的过程,这可以方便在交互使用中将C++和C代码载入到R中,也有利于扩展包中C++和C代码的使用。做法是在C++源程序中加入一些特殊注释,利用其指示自动生成C++与R的接口程序。属性是C++11标准的内容,现在的编译器支持还不多,所以在Rcpp支持的C++程序中写成了特殊格式的…
-
北京大学R语言教程(李东风)第53章: R与C++的类型转换
R程序与由Rcpp支持的C++程序之间需要传递数据,就需要将R的数据类型经过转换后传递给C++函数,将C++函数的结果经过转换后传递给R。 用wrap()把C++变量返回到R中 在R API中用.Call()函数调用C程序库函数时,R对象的数据类型一般是SEXP。Rcpp提供了模板化的wrap()函数把C++的函数返回值转换成R的SEXP数据类型。此函数的声…
-
北京大学R语言教程(李东风)第52章:Rcpp介绍
为了提高R程序的运行效率,可以尽量使用向量化编程,减少循环,尽量使用内建函数。对于效率的瓶颈,尤其是设计迭代算法时,可以采用编译代码,而Rcpp扩展包可以很容易地将C++代码连接到R程序中,并且支持在C++中使用类似于R的数据类型。 没有学过C++语言的读者,如果需要编写比较独立的不太依赖于R的已有功能的算法,可以考虑学习使用Julia语言编写。Julia语…
-
北京大学R语言教程(李东风)第51章:数据库访问
51.1 介绍 对于大型的数据, 或者保存在多个表中的复杂数据, 经常会保存在一个数据库中。 数据库可以存在于专用的数据库服务器硬件上, 也可以是本机中的一个系统程序, 或者R直接管理的一个文件。 比较通用的数据库是关系数据库, 这样的数据库已经有很标准的设计理念和管理方法, 从用户使用的角度来看, 都可以使用一种专用的SQL语言来访问和管理。 常…
-
北京大学R语言教程第50章: 文本应用
50.1 正则表达式应用例子 50.1.1 数据预处理 在原始数据中, 经常需要审核数据是否合法, 已经把一些常见错误输入自动更正。 这都可以用正则表达式实现。 50.1.1.1 除去字符串开头和结尾的空格 函数stringr::str_trim()和base::trimws()可以除去字符串开头与结尾的空格, 也可以仅除去开头…
-
北京大学R语言教程第49章: 正则表达式
49.1 正则表达式详解 在对字符串进行查找或替换时, 有时要查找替换的不是固定的子串而是某种模式。 比如,要查找或替换连续的三个数字,正文中的电子邮件地址, 网址,电话号码,等等。 正则表达式(regular expressions)用于表示各种复杂模式。 基本R中的正则表达式规则可以用POSIX 1003.2标准或者Perl规则。 建议使用pe…
-
北京大学R语言教程第48章: R语言的文本处理
48.1 介绍 在信息爆炸性增长的今天, 大量的信息是文本型的, 如互联网上的大多数资源。 R具有基本的文本数据处理能力, 而且因为R的向量语言特点和强大的统计计算和图形功能, 用R处理文本数据是可行的。 48.2 字符型常量与字符型向量 字符串常量写在两个双撇号或者两个单撇号中间, 建议仅使用双撇号, 因为这是大多数常见程序语言的做法。…
-
北京大学R语言教程第47章: 整洁建模中模型调优
47.1 用再抽样技术计算模型评价指标 47.1.1 拟合效果 再抽样技术是指从同一个样本数据集中多次抽样产生多个样本, 这些样本当然不能做到相互独立, 但是也可以用来增大样本容量, boostrap是典型的再抽样技术, 而统计建模、机器学习中的交叉验证(cross validation)也是一种再抽样技术。 将全体样本划分为训练集(tr…
-
北京大学R语言教程第46章: 整洁建模基础
从前面的模型介绍可以看出, 常见的有监督学习问题为回归问题和判别问题, 每一种问题都可以用许多种不同模型解决, 而每一个模型都可能包含需要调优的超参数集合, 对数据可能有不同的预处理、转码、函数变换、降维等变换。 这些模型由许多个R扩展包实现, 而且接口、选项各自不同。 tidymodels包提供了针对统计建模用户简便易用的建模功能和使用规范。 R有许多建模…
-
北京大学R语言教程(李东风)第45章: 用H2O包进行统计学习
介绍 H2O是一个开源的、集成的机器学习环境,基于Java语言开发,支持并行处理,支持大型数据。R的H2O扩展包提供了对H2O软件的接口,可以用比较统一的界面访问各种机器学习方法。 H2O使用自己的数据格式,R的data.frame和data.table可以用as.h2o()函数转换为H2O的H2OFrame格式。 H2O的R扩展包利用网络服务访问正在运行的…
-
北京大学R语言教程(李东风)第44章:支持向量机
介绍 支持向量机是1990年代由计算机科学家发明的一种有监督学习方法,使用范围较广,预测精度较高。 最大分隔边界判别法 分隔超平面 对因变量为两分类的情形,设自变量xi,i=1,2,…,n在ℝp空间中,如果存在曲面将ℝp分隔成两部分,使得两类的样本可以分开,就有了一种简单的判别准则。超平面是最简单的分隔曲面。 在平面空间ℝ2={(x1,x2):x1,x2∈ℝ…
-
北京大学R语言教程(李东风)第43章:基于树的方法
43.1 树回归的简单演示 决策树方法按不同自变量的不同值, 分层地把训练集分组。 每层使用一个变量, 所以这样的分组构成一个二叉树表示。 为了预测一个观测的类归属, 找到它所属的组, 用组的类归属或大多数观测的类归属进行预测。 这样的方法称为决策树(decision tree)。 决策树方法既可以用于判别问题, 也可以用于回归问题,称为回归树。 …
-
北京大学R语言教程(李东风)第42章: 正则化与惩罚回归
42.1 介绍 这一章用Hitters数据集演示线性回归、回归自变量选择, 岭回归、lasso回归, 以及如何进行超参数调优。 考虑ISLR包的Hitters数据集。 此数据集有322个运动员的20个变量的数据, 其中的变量Salary(工资)是我们关心的。 变量包括: 数据集的详细变量信息如下: 希望以Salary为因变量,查看其缺失值个数: 为…
-
北京大学R语言教程(李东风)第41章: 统计学习介绍
统计学习介绍的主要参考书: (James et al. 2013): Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani(2013) An Introduction to Statistical Learning: with Applications in R, Springer. M…
-
北京大学R语言教程(李东风)第40章: 随机模拟
40.1 随机数 随机模拟是统计研究的重要方法, 另外许多现代统计计算方法(如MCMC)也是基于随机模拟的。 R中提供了多种不同概率分布的随机数函数, 可以批量地产生随机数。 一些R扩展包利用了随机模拟方法,如boot包进行bootstrap估计。 所谓随机数,实际是“伪随机数”, 是从一组起始值(称为种子), 按照某种递推算法向前递推得到的。 所…
-
北京大学R语言教程(李东风)第39章: R时间序列分析
这里仅仅给出了部分常用的时间序列函数的用法, 更详细的说明参见作者的金融时间序列分析讲义。 39.1 基本概念 设ℤ为整数集, {Xt,t∈ℤ}中Xt是随机变量, 称{Xt}为时间序列。 如果{Xt}的有限维联合分布不随时间推移而变化, 称{Xt}为严平稳时间序列。 如果{Xt}二阶矩有限, 期望和方差不随时间而变化, 两个时间点之间的协…
-
北京大学R语言教程(李东风)第38章:广义线性模型
38.1 模型 38.1.1 介绍 线性回归模型 Y=a+bx+ε, ε∼N(0,σ2) 可以写成 Y|x∼g(x)=N(g(x),σ2),a+bx. 这样,因变量Y与自变量x1,x2,…,xp的更一般的模型, 可以写成如下形式的广义线性模型: Y∼g(μ)=F(y;μ)β0+β1×1+⋯+βpxp. 其中F(⋅,μ)…
-
北京大学R语言教程(李东风)第37章: 线性混合模型
37.1 介绍 在基本回归分析模型中, 假定回归误差项独立同分布, 方差相等, 还经常假定误差项服从正态分布。 在实际应用回归分析建模时, 还经常遇到模型误差项方差不相等或者误差项之间不独立的情形。 比如, 如果每个观测来自于一个群体的平均值, 设群体中的个体方差相同, 则每个观测的误差方差正比于群体中个体的个数的倒数, 不等于常数。 又比如, 医…
-
北京大学R语言教程(李东风)第36章:R方差分析
36.1 单因素方差分析 单因素方差分析可以看成基础统计中两样本t检验的一个推广, 要比较试验观测值的某个因变量(称为“指标”)按照一个分组变量(称为“因素”)分组后, 各组的因变量均值有无显著差异。 设因素A将所有观测分为m个组, 每组对因变量进行r次观测, 且各次观测相互独立, 模型为 yij=eijμi+eij,i=1,2,…,m, …
-
北京大学R语言教程(李东风)第35章: R非参数回归
35.1 模型 线性回归模型可以看成非线性回归模型的特例: Y=f(X)+ε 其中f(x)为未知的回归函数。 参数方法:假定f(x)具有某种形式,如 二次多项式回归可以令X1=x,X2=x2, 变成二元回归模型来解决。 指数模型可以令z=lnY, 模型化为z=a+bx。 有一些曲线模型可以通过变换化为线性回归。 在多元情形, 一般的非线性回归模型为…
-
北京大学R语言教程(李东风)第34章:R公式界面与设计阵
34.1 R语言公式界面 R语言继承了来自S语言的公式界面, 用以描述统计模型中因变量和自变量的关系, 并有相应的将自变量群组转换为相应的线性模型设计阵的默认规则。 R语言的线性回归(lm)、方差分析(aov)、广义线性模型(glm)、线性混合模型(nlme::lme)等回归类建模函数都使用公式(formula)界面描述因变量与自变量之间的关系。 …
-
北京大学R语言教程(李东风)第33章: R多元回归
建模步骤: 33.1 模型 模型 y=β0+β1×1+⋯+βpxp+ε 其中 对n组观测数据, 有 yi=β0+β1xi1+⋯+βpxip+εi,i=1,2,…,n 对其中的随机误差项εi, i=1,2,…,n,假定: 总之,ε1,ε2,…,εn 相互独立,服从N(0,σ2)分布。 数据格式如: ⎛⎝⎜⎜⎜⎜⎜⎜⎜x1…