├── RAC2017Kahn.rar ├── R语言在经济学中的应用.pdf ├── 基于R与RStudio的心理统计教学模式探索.pdf ├── README.md ├── semister2018-undergrad.md ├── Rworkshop2017GZ.md └── R4Eco201707.Rmd /RAC2017Kahn.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xkdog/StatsUsingR/HEAD/RAC2017Kahn.rar -------------------------------------------------------------------------------- /R语言在经济学中的应用.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xkdog/StatsUsingR/HEAD/R语言在经济学中的应用.pdf -------------------------------------------------------------------------------- /基于R与RStudio的心理统计教学模式探索.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xkdog/StatsUsingR/HEAD/基于R与RStudio的心理统计教学模式探索.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 《`R`语言统计学基础》教材说明 2 | 3 | 本目录是本人在清华大学出版社出版的[《`R`语言统计学基础》](https://www.amazon.cn/%E6%95%B0%E9%87%8F%E7%BB%8F%E6%B5%8E%E5%AD%A6%E7%B3%BB%E5%88%97%E4%B8%9B%E4%B9%A6-R%E8%AF%AD%E8%A8%80%E7%BB%9F%E8%AE%A1%E5%AD%A6%E5%9F%BA%E7%A1%80-%E5%90%95%E5%B0%8F%E5%BA%B7/dp/B06XGR6LJZ/ref=sr_1_1?ie=UTF8&qid=1490245508&sr=8-1&keywords=%E5%90%95%E5%B0%8F%E5%BA%B7)教材(2017年版)的匹配目录。 4 | 5 | 这里还有本人于2017年5月21日在清华大学`R`语言中国2017年会(北京)的演讲内容《基于R与RStudio的心理统计教学模式探索》,涉及我对统计教学的部分观点,有意者可另行参考。该幻灯片由[谢益辉](https://yihui.name)的 R 包 [**xaringan**](https://github.com/yihui/xaringan) 生成,我强烈建议你去学习一下这个包。该幻灯片请在联网状态下阅读,下载`RAC2017Kahn.rar`文件后解压缩,然后双击`RAC2017Kahn.html`文件进行阅读(推荐使用Chrome浏览器),这能得到最好的阅读体验。若想直接阅读PDF,请点击PDF文件。配套的数据和`.Rmd`文件也在其中,读者可自行生成网页幻灯片或修改其中内容。 6 | 7 | 全书的说明请见[这里](https://github.com/xkdog/xkdog.github.io/blob/master/_posts/2017-03-30-StatsUsingR.md),勘误请见[这里](https://xkdog.github.io/2017-03-23-Errata/), 如想提交勘误, 请点击[这里](https://github.com/xkdog/xkdog.github.io/blob/master/_posts/2017-03-23-Errata.md). 勘误过程会使用简单的LaTeX语法. 8 | 9 | 本目录可用于上传相关资料与勘误更新。欢迎任何购买或阅读该教材的老师同学们批评指正。 10 | 11 | 全书的PDF版课件、数据及相关附录请点击[这里](https://pan.baidu.com/s/1eS3OO1c)下载。课件由南开大学社会心理学系2013级本科生张光耀、柳婷基于Texlive平台下的Beamer模板制作完成,在此表示由衷的感谢。如有任何错误,请直接联系本人。PDF格式比较简陋,希望各位注重领会“精神”而非“外在”。 12 | 13 | 本人另外撰写了约130页的教材中所有相关习题的详细解答,此解答暂不主动公开。如您还是学生,在未完成相关章节的练习之前,请不要向我发邮件索取。如果您是老师,如您说明相关身份(最好能够显示您的电子邮件地址的所在学院官方网页链接),我可发送相关附件,以便进行习题布置,并请批评指正;如果您想在我提供的课件基础上制作内容更为丰富的课件,也可给我邮件,我可提供所有课件的Tex文档与源图片,以便您使用LaTeX编辑器生成新PDF课件。 14 | 15 | 今后如有人手和精力,会进一步完善相关教材资料,例如: 16 | 17 | * 制作`.RMD`格式的课件,包含所有`R`代码,方便进行网页化展示。 18 | * 制作更多更有新意的统计练习题。 19 | * 制作更简洁的数据导入、清洗与操纵的R语言操纵说明。 20 | * 利用`Rstudio`与`shiny`制作动态呈现统计学知识的网页App 21 | * ……(反正吹牛不上税,不凡多列几个点) 22 | 23 | -------------------------------------------------------------------------------- /semister2018-undergrad.md: -------------------------------------------------------------------------------- 1 | 2 | # 第一周(9月18日):课程说明 3 | 4 | 本说明适用于南开大学周恩来政府管理学院2018-2019秋季学期的《R语言统计应用入门》本科课程。课程需自备电脑。 5 | 6 | ## 基本说明 7 | 8 | - 真正的零基础。当然,有基础更好。 9 | - 无须R软件基础。 10 | - 无须推论性统计学基础。不过多涉及,但后期可能会简单介绍*t*检验、方差分析、线性回归的基本命令操作与结果解读。 11 | - 主要内容 12 | - 数据导入 13 | - 数据管理 14 | - 描述统计 15 | - 基本绘图 16 | - 网页爬虫 17 | - 文本数据清洗 18 | - 正则表达式基础 19 | 20 | 更详细内容,请参见此[目录](https://github.com/xkdog/DAUR)。里面包含了本门课程的基本内容和代码,可提前阅读和自行学习。 21 | 22 | 23 | 24 | 25 | ## 软件准备 26 | 27 | 仅限windows平台进行说明。Mac系统请参照此说明自行探索相关细节。 28 | 29 | - 安装[R](https://www.r-project.org/),安装[RStudio](https://www.rstudio.com/),安装[Rtool](https://cran.r-project.org/bin/windows/Rtools/)。 30 | -  **所有软件请保证安装在系统盘,且所有安装路径(包括Windows登陆账户名称)无任何中文及特殊字符**。一般选择默认安装方式即可保证这一点。 31 | - 注册[GitHub](https://github.com/)账户,不妨顺便找到这个[链接](https://github.com/xkdog/StatsUsingR)。 32 | 33 | ## 语法准备 34 | 35 | 请系统学习 `Markdown`语言。 36 | 37 | `Markdown`是一种可以使用普通文本编辑器编写的标记语言。关于Markdown的简洁说明可参考相关网页,以下是一些推荐。 38 | 39 | - [简书:Markdown入门指南](http://www.jianshu.com/p/1e402922ee32/) 40 | - [阳志平:Markdown写作浅谈](http://www.yangzhiping.com/tech/r-markdown-knitr.html) 41 | - [Markdwon在线学习课程](http://www.markdowntutorial.com/) 42 | 43 | 以上三个链接请大家自行仔细阅读,第三个文档请花10分钟左右的时间完成在线学习。`Markdown`语法不是课程本身的内容,但对于了解本课程文档的最基本格式具有根本性的作用。 44 | 45 | 上述每一个软件或语言环境都需要较长时间的学习和训练,课程中会以尽量清晰简洁的方式进行介绍,仍请做好一定的心理准备。 46 | 47 | ## 相关教材 48 | 49 | 课程所有内容均可在网上找到免费公开的版本。为阅读方便,推荐(但不强求)以下书目: 50 | 51 | - 卡巴科夫:[《R语言实战》](https://www.amazon.cn/gp/product/B01FSXCBMS/ref=pd_cp_14_1?ie=UTF8&psc=1&refRID=53CV03RWGW12KYZQYJJX)(2016版)。 52 | - Hadley: [*R for Data Science*](http://r4ds.had.co.nz/),已有中文版《R数据科学》。 53 | - 吕小康:[《R语言统计学基础》](https://www.amazon.cn/%E6%95%B0%E9%87%8F%E7%BB%8F%E6%B5%8E%E5%AD%A6%E7%B3%BB%E5%88%97%E4%B8%9B%E4%B9%A6-R%E8%AF%AD%E8%A8%80%E7%BB%9F%E8%AE%A1%E5%AD%A6%E5%9F%BA%E7%A1%80-%E5%90%95%E5%B0%8F%E5%BA%B7/dp/B06XGR6LJZ/ref=sr_1_1?s=books&ie=UTF8&qid=1505149742&sr=1-1&keywords=%E5%90%95%E5%B0%8F%E5%BA%B7)(2017)。 54 | - Hadley: 《高级R语言编程指南》,有[英文版](http://adv-r.had.co.nz/)。阅读1-5章即可。 55 | - [Bookdwon官网](https://bookdown.org/)上的若干公开电子书籍。 56 | 57 | ## 考核方式 58 | 59 | 以**论文**形式结课。 60 | 61 | ### 平时作业(40%) 62 | 63 | - 执行一定量的问卷调查,完成数据录入的工作,然后基于汇总数据完成指定任务的分析。 64 | - 完成平时布置的各种习题任务。 65 | - 协助完善教学资料与练习题。 66 | - 完成数据可视化任务。 67 | - 网络爬虫与数据分析。 68 | - 其他,待丰富。 69 | 70 | 平时作业最后集中到一个大作业中,在2019年1月8日晚上6:00之前提交到本人学院二楼的邮箱。 71 | 72 | ### 期末作业(60%) 73 | 74 | 论文形式提交,一般不少于5000字(不计空格),学院规定格式下A4纸不少于4页。字数无上限。word版打印出来提交教科办。。 75 | 76 | **可选方式**: 77 | 78 | - 寻找一篇提供原始数据、但不是用R做分析的量化文章,使用R重新完成数据分析流程。 79 | - 使用CGSS、CFPS等公开数据,自选主题,完成一篇研究报告。 80 | - 完成某一数据可视化任务。 81 | - 翻译某常用R包的操作说明文档。 82 | - 翻译某数据分析类的英文文章。 83 | - 其他,待丰富。 84 | 85 | 与平时作业一起(期末论文与期中作业**分开**装订),在2019年1月15日晚上6:00之前提交到本人学院二楼的邮箱。 86 | 87 | 附:本课程自开课伊始,尚未出现选课而未及格的同学。 88 | 89 | ## 本周作业 90 | 91 | 下周上课前要完成的工作: 92 |   93 | - 完成昨天的问卷链接,并尽量转发扩散一下,让学过统计学的、从事定量研究的研究生或博士生或老师/科研人员填写。链接如下: 94 |   95 | https://github.com/xkdog/PCI/blob/master/README.md 96 |   97 |   98 | - 从学校的软件正版化平台安装Office 2016版本。 99 |   100 | - 安装R、Rstudio,Windows平台同学安装Rtools。一律安装在C盘(系统盘)。操作 101 | 系统账户名称不能出现中文或特殊字符,一律使用英文(或不设账户名称)。 102 | - 联网状态下,打开R,尝试如下命令:`install.packages(“rmarkdown”)`。 103 |   104 | - 打开Rstudio,尝试新建一个Rmarkdown。 105 |   106 | - 使用教育网邮箱注册GitHub账户,关注我指定的文件夹。 107 |   108 | - 自己了解一下R、Rstudio,Markdown与Rmardown的关系。可百度、Bing、Google。谷歌需要翻墙。 109 | 110 | ## 本周录屏 111 | 112 | 请及时查看群内链接。录屏暂不主动公开,因为课堂上的某些“只言片语”显然不足为外人道也。 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /Rworkshop2017GZ.md: -------------------------------------------------------------------------------- 1 | 2 | # 2017年11月18日 广州 R 语言工作坊 3 | 4 | 本文档用于第4界大数据传播论坛的 R 语言工作坊的相关说明。 5 | 6 | # 软件安装 7 | 8 | ## 安装基础软件 9 | 10 | 安装 R ,安装 RStudio,安装 Rtools (Windows)或 XQuartz (Mac)。 11 | 12 | 软件及相关数据见以下链接: 13 | 14 | 链接: 15 | 16 | 密码:4i7p 17 | 18 | 录屏已上传。 19 | 20 | ## 安装 R 包 21 | 22 | ``` 23 | install.packages("tidyverse") 24 | ``` 25 | 26 | 安装完成后,加载该包。 27 | 28 | ``` 29 | library(tidyverse) 30 | ``` 31 | 32 | # 基本任务 33 | 34 | - R 中的数据结构 35 | - R 中的数据导入 36 | - R 的基础操作 37 | - 利用 **dplyr** 包进行数据管理 38 | - 新增变量 39 | - 选择变量 40 | - 筛选观测 41 | - 数据排序 42 | - 随机抽样 43 | - 分组统计 44 | - 管道操作 45 | - 利用 **stringr** 包进行文本数据分析 46 | - 基本字符串函数 47 | - 正则表达式基础 48 | 49 | 50 | # 在线教程 51 | 52 | - 《定量群学》微信公众号的系列推文 53 | - 本人微信朋友圈的系列转载(微信号:nkluxk) 54 | - 详细内容点击此处的 [GitHub 库](https://github.com/xkdog/DAUR) 55 | 56 | # 参考教材 57 | 58 | - 卡巴科夫:[《R 语言实战》](https://www.amazon.cn/gp/product/B01FSXCBMS/ref=pd_cp_14_1?ie=UTF8&psc=1&refRID=53CV03RWGW12KYZQYJJX)(2016)。 59 | - 任坤:[《R 语言编程指南》](https://www.amazon.cn/s/ref=nb_sb_noss?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=%E4%BB%BB%E5%9D%A4)(2017)。初学者阅读前7章即可。 60 | - [吕小康](http://zfxy.nankai.edu.cn/xk):[《R 语言统计学基础》](https://xkdog.github.io/)(2017)。 61 | - 薛毅:[《R 语言实用教程》](https://www.amazon.cn/R%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%94%A8%E6%95%99%E7%A8%8B-%E8%96%9B%E6%AF%85/dp/B00ODRG9EC/ref=sr_1_1?s=books&ie=UTF8&qid=1510975378&sr=1-1&keywords=%E8%96%9B%E6%AF%85)(2014)。 62 | - Hadley: [《高级 R 语言编程指南》](https://www.amazon.cn/%E9%AB%98%E7%BA%A7R%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8D%97-%E5%93%88%E5%BE%B7%E5%88%A9%C2%B7%E5%A8%81%E5%85%8B%E6%B1%89%E5%A7%86/dp/B01HEVCA6O/ref=sr_1_1?s=books&ie=UTF8&qid=1510975168&sr=1-1&keywords=%E9%AB%98%E7%BA%A7R%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8D%97)(2016),有[英文在线版](http://adv-r.had.co.nz/)。初学者阅读1-5章即可。 63 | - Hadley: [*R for Data Science*](http://r4ds.had.co.nz/),国内有纸质影印版[《数据科学:R 语言实现》](https://www.amazon.cn/%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6-R%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%8E%B0-R-for-Data-Science-Hadley-Wickham-Garrett-Grolemund/dp/B075TN1XZS/ref=sr_1_1?s=books&ie=UTF8&qid=1510975098&sr=1-1&keywords=r+for+data+science)(2017)。 64 | - [Bookdwon官网](https://bookdown.org/)上的若干公开电子书籍。 65 | 66 | 67 | # 相关展示代码 68 | 69 | 录屏已上传。将下列代码,拷至 R Script 或 RStudio 中,设定相关的工作目录后,即可察看效果。 70 | 71 | 72 | ``` 73 | # 总体说明:所有文件默认放置于当前工作夹中 74 | 75 | # setwd() # 设定工作目录,例如setwd("C:\\xkdog")或setwd("C:/xkdog") 76 | # getwd() # 查看当前工作目录 77 | 78 | 79 | ## Topic 1:修改文件名 80 | 81 | # 如何修改文件名:单个文件夹修改 82 | 83 | a <- list.files() # 列示文件夹内的文件 84 | b <- paste(2016, a, sep = "-") # 拼接向量 2016 与 a 85 | file.rename(a, b) # 重命名文件 86 | 87 | 88 | # 如何修改文件名:多个文件夹修改 89 | 90 | # 视自身文件夹路径而定,注意文件夹宜全为英文 91 | 92 | 93 | x <- list.files() # 列示文件夹内的文件 94 | y <- paste(getwd(), x, sep = "") # 拼接当前工作路径与 x 95 | rename = function(a, b) 96 | { 97 | for (i in 1:length(b)) 98 | { 99 | setwd(b[i]) 100 | c <- list.files() 101 | d <- paste(a[i], c, sep = "-") 102 | file.rename(c, d) 103 | print(list.files()) 104 | } 105 | } # 定义重命名函数 106 | rename(x, y) # 利用重命名函数进行重命名 107 | 108 | 109 | # Topic 2:计算多道选择题的错误率 110 | 111 | library(dplyr) # 载入 dplyr 包,以便进行数据框操纵 112 | pci_rate_clean <- read.csv("pci_rate_clean.csv") # 读入数据 113 | pci_rate_clean_TF <- pci_rate_clean == 1 # 取值为1定义为TRUE,否则为FALSE 114 | TF <- function(x) { sum(x) / length(x) } # 定义正确率函数 115 | error_rate_p <- apply(pci_rate_clean_TF, 1, TF) # 求个体正确率,长度同个体数 116 | error_rate_q <- apply(pci_rate_clean_TF, 2, TF) # 求每道题的正确率,长度同题目数 117 | result <- bind_cols(pci_rate_clean, 118 | error_rate_p = error_rate_p) # 把个体正确率并入数据框 119 | TF(result$error_rate_p > 0) # 计算至少做错一道误的个体占总体的比率 120 | 121 | # Topic 3:dplyr 与 stringr 文本数据处理 122 | 123 | library(readxl) # 载入 readxl 包,以便读入 Excel 文件 124 | library(dplyr) # 载入 dplyr 包,以便进行数据框操纵 125 | library(stringr) # 载入 stringr 包,以便进行字符串操纵 126 | x <- read_excel("PDSurveyBasic.xlsx") # 读入数据 127 | mins <- 128 |  str_extract(x$time2, "[:digit:]+") %>% as.numeric # 提取纯数字文本,并转为数值型向量 129 | x_new <- mutate(x, mins = round(mins / 60)) %>% 130 | filter(mins <= 60, 131 | mins >= 10, 132 | relationship > 1, 133 |         student > 1) # 生成新变量mins,并将其单位转为分;同时,根据提前设置的规则选定有效被试 134 | round(nrow(x_new) / nrow(x), 2) # 计算有效样本量,并保留两位小数 135 | 136 | 137 | ## 以下用于提取 IP 地址呈现的地理位置信息 138 | 139 | ip.location <- 140 | str_extract(x_new$ip, "(?<=\\().*(?=\\))") %>% 141 | str_split("-", n = 2, simplify = TRUE) %>% 142 | as_tibble %>% 143 | transmute(province = .[[1]], city = .[[2]]) 144 | 145 | 146 | ## 修改数据框,使之更为清洁 147 | 148 | clean.data <- 149 | select(x_new,-ip) %>% 150 | bind_cols(ip.location) %>% 151 | as_tibble 152 | 153 | ## 按先省份、再城市的方式,以各城市内的有效被试人数进行降序列表 154 | 155 | y <- 156 | group_by(ip.location, province, city) %>% 157 | count() %>% 158 | arrange(desc(n)) 159 | y 160 | ``` 161 | 162 | 163 | 164 | 165 | -------------------------------------------------------------------------------- /R4Eco201707.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "R语言在经济学中的应用" 3 | subtitle: "" 4 | author: "南开大学周恩来政府管理学院 吕小康" 5 | date: "`r Sys.Date()`" 6 | output: 7 | xaringan::moon_reader: 8 | css: zh-CN.css 9 | lib_dir: libs 10 | nature: 11 | highlightStyle: github 12 | highlightLines: true 13 | countIncrementalSlides: false 14 | --- 15 | 16 | # R简介 17 | 18 | ### R是一个免费自由且跨平台通用的统计计算与绘图软件。 19 | 20 | - 它有Windows、Mac、Linux等版本,均可免费下载使用。 21 | 22 | ### 从[R主页](https://www.r-project.org/)中选择[download R](https://cran.r-project.org/mirrors.html)链接可下载到对应操作系统的R安装程序。 23 | 24 | - 打开链接后的网页会提示选择相应的[CRAN](https://cran.r-project.org/mirrors.html)镜像站。目前全球有超过一百个CRAN镜像站 ,用户可选择就近下载。 25 | 26 | --- 27 | 28 | # R与STATA等统计软件的区别 29 | 30 | ### R为开源免费的软件,其他基本为商业付费软件。 31 | 32 | - 如果你有钱,可以只选贵的、不选对的;但如果你没钱…… 33 | 34 | ### R是一种脚本语言,强调英文命令操作。 35 | 36 | - R的学习比较费时、对汉字编码不友好,但掌握之后的自由性更强 37 | 38 | ### R在数据可视化上的表现更佳,选择更丰富。 39 | 40 | - R的统计绘图是它最有标志性的功能,可以制作达到出版的各种图形 41 | 42 | --- 43 | 44 | # R在经济学中的综合应用 45 | 46 | R及与之相关的配套开源软件(如RStudio)已构成一个丰富的数据分析网络生态,具有同类软件很难同时满足的多种可能性。 47 | 48 | ### 用于课程教学 49 | 50 | ### 用于数据获取与预处理 51 | 52 | ### 用于数据的计量分析 53 | 54 | ### 用于数据可视化 55 | 56 | ### 用于撰写学术报告 57 | 58 | …… 59 | 60 | --- 61 | 62 | # R 已可方便导入各类型的数据 63 | 64 | 利用[Hadley](http://hadley.nz/)等人开发的诸多R包,已可方便导入各种类型的数据,这为R成为一种“兼容并蓄”的统计分析软件奠定了重要基础。 65 | 66 | ### readxl包: xls or xlsx 67 | 68 | ```r 69 | library(readxl) 70 | read_excel("file.xlsx") 71 | ``` 72 | 73 | ### rvest包:在线文本 74 | 75 | 76 | ### data.table包:导入大数据文件(> 100 G) 77 | 78 | --- 79 | 80 | # R 已可方便导入各类型的数据 81 | 82 | ### Haven包: SAS, SPSS, STATA 83 | 84 | ```r 85 | # SAS 86 | read_sas("mtcars.sas7bdat") 87 | write_sas(mtcars, "mtcars.sas7bdat") 88 | 89 | # SPSS 90 | read_sav("mtcars.sav") 91 | write_sav(mtcars, "mtcars.sav") 92 | 93 | # Stata 94 | read_dta("mtcars.dta") 95 | write_dta(mtcars, "mtcars.dta") 96 | ``` 97 | 98 | 利用R,几乎可以分析类型任何类型的数据,而避免在各类统计软件之间相互转化和跟踪。 99 | 100 | --- 101 | 102 | # 作为课堂教学的辅助软件 103 | 104 | 可以作为两门经济学基础课程的教学辅助软件 105 | 106 | - 《概率论与数理统计》 107 | - 《计量经济学》 108 | 109 | 我本人在清华大学出版社2017年出版的[《R语言统计学基础》](https://www.amazon.cn/%E6%95%B0%E9%87%8F%E7%BB%8F%E6%B5%8E%E5%AD%A6%E7%B3%BB%E5%88%97%E4%B8%9B%E4%B9%A6-R%E8%AF%AD%E8%A8%80%E7%BB%9F%E8%AE%A1%E5%AD%A6%E5%9F%BA%E7%A1%80-%E5%90%95%E5%B0%8F%E5%BA%B7/dp/B06XGR6LJZ/ref=sr_1_1?ie=UTF8&qid=1490843285&sr=8-1&keywords=%E5%90%95%E5%B0%8F%E5%BA%B7),内容差不多覆盖经济学类入门概率论与数理统计的教学要求,全程使用R作为分析和绘图软件。 110 | 111 | 112 | 113 | 114 | 115 | --- 116 | 117 | ## 概率论与数理统计的课程教学 118 | 119 | 这里以抽样分布的教学设计为例进行说明。 120 | 121 | #### 抽样分布(sampling distribution)的基础知识 122 | 123 | #### 标准定义 124 | 125 | - 抽样分布是样本统计量的分布。这显然精确而“无用”,即不能帮助人真正理解什么是抽样分布。 126 | 127 | - 实质是重复抽样的假想前提下形成的一个统计推论框架,它在现实中是不一定存在的。 128 | 129 | --- 130 | 131 | ## 抽样分布的具体解释 132 | 133 | 134 | - 抽样分布是对同一总体,做出相同样本容量的、重复(无限) 多次的简单随机抽样取遍样本统计量的所有可能值后所体现出来的取值规律性。 135 | 136 | - 对这一规律性,采用概率论的基本知识加以描述,即可概括为某一**分布**(distribution),也即 $F(x) = P(X \leq x)$ 137 | 138 | - 如果能够找到 $F(x)$ 的精确数学表达形式,后续的统计推论即可基于这一概念框架而得到概率意义上的精准推导。 139 | 140 | --- 141 | 142 | ## 抽样分布的教学难点 143 | 144 | ### 理论框架的“非现实性” 145 | 146 | - 现实中的研究通常只能有一次抽样,不可能对同一总体进行反复抽样从而得到关于样本统计量的精确分布的直观感知 147 | 148 | 149 | ### 数据并非总是随机抽样获得的 150 | 151 | - 通过随机化实验,以及通过普通的观测收集的数据,也需要进行推论统计。但此时很难直接套用基于“重复抽样”获得的抽样分布理论。 152 | 153 | ### 某些统计量的抽样分布数学推导较为困难 154 | 155 | - 况且,能够找到精确数学形式的分布总是少见的。很多统计量本身就是很难找到精确分布,然而推论总是要做下去…… 156 | 157 | 158 | --- 159 | 160 | ## 建立经验感知的方式:模拟 161 | 162 | 抽样分布的建立需要一对互相联系的概念:总体(population)与样本(sample)。 163 | 164 | 不妨以这样的思路进行教学: 165 | 166 | -- 167 | 168 | - 先从假想的理论分布(如正态分布、二项分布、指数分布等)总体进行重复抽样,模拟某一简单样本统计量的分布,并与数学推导的结果进行对比解释; 169 | 170 | -- 171 | 172 | - 到假想的理论分布总体进行重复抽样,模拟某一很难或无法从数学推导获得精确分布的样本统计量的抽样分布; 173 | 174 | -- 175 | 176 | - 再到从实际的、不满足特定分布的总体进行重复抽样,模拟对应的样本统计量的分布,验证数学推导的结果是否能够应用于现实,并理解数学推导的局限性与模拟的自由性 177 | 178 | --- 179 | 180 | ## 样本均值等常见统计量的抽样分布示例 181 | 182 | 已知总体 $X \sim Exp(0.5)$,即服从某指数分布,注意该分布本身是右偏的,且是一无限总体。现从中抽取样本量为100的样本,重复10000次,每次计算如下样本统计量,再绘制这些样本统计量的的直方图,即可在一定程度上展示该些样本统计量的抽样分布形状,以便形成直观的感知。 183 | 184 | - 样本均值(sample mean) 185 | - 样本标准差(samlpe standard deviation) 186 | - 样本方差(sample variance) 187 | - 其他需要的样本统计量 188 | 189 | --- 190 | 191 | ```{r, echo = FALSE, fig.align='center'} 192 | opar <- par(no.readonly = T) 193 | par(mfrow = c(2, 2)) 194 | set.seed(123) 195 | hist( 196 | rexp(100, 0.5), 197 | prob = T, 198 | main = "Exponetial Distribution(lambda=0.5)", 199 | xlab = "X", 200 | breaks = 20, 201 | cex.main = 0.8 202 | ) 203 | abline(v = 2, col = "red", lwd = 3) 204 | sample_mean <- numeric(10000) 205 | for (i in 1:10000) { 206 | set.seed(i) 207 | samples <- rexp(100, 0.5) 208 | sample_mean[i] <- mean(samples) 209 | } 210 | hist( 211 | sample_mean, 212 | prob = T, 213 | main = "Sampling Distribution for Sample Mean", 214 | xlab = "Sample Mean", 215 | breaks = 30, 216 | cex.main = 0.8 217 | ) 218 | abline(v = 2, col = "red", lwd = 3) 219 | sample_sd <- numeric(10000) 220 | for (i in 1:10000) { 221 | set.seed(i) 222 | samples <- rexp(100, 0.5) 223 | sample_sd[i] <- sd(samples) 224 | } 225 | hist( 226 | sample_sd, 227 | prob = T, 228 | main = "Sampling Distribution for Sample SD ", 229 | xlab = "Sample SD", 230 | breaks = 30, 231 | cex.main = 0.8 232 | ) 233 | abline(v = 2, col = "red", lwd = 3) 234 | sample_variance <- numeric(10000) 235 | for (i in 1:10000) { 236 | set.seed(i) 237 | samples <- rexp(100, 0.5) 238 | sample_variance[i] <- var(samples) 239 | } 240 | hist( 241 | sample_variance, 242 | prob = T, 243 | main = "Sampling Distribution for Sample Variance", 244 | xlab = "Sample Variance", 245 | breaks = 30, 246 | cex.main = 0.8 247 | ) 248 | abline(v = 4, col = "red", lwd = 3) 249 | par(opar) 250 | ``` 251 | 252 | 左上图为给定总体的概率密度图,右上图为样本均值的抽样分布示意图;左下图为样本标准差的抽样分布示意图,右下图为样本方差的抽样分布示意图。红色虚线为虚线表示总体均值、 总体标准差和总体方差所在位置。 253 | 254 | --- 255 | 256 | ## 生成样本均值抽样分布的代码 257 | 258 | ```r 259 | sample_mean <- numeric(10000) 260 | for (i in 1:10000) { 261 | set.seed(i) 262 | samples <- rexp(100, 0.5) 263 | sample_mean[i] <- mean(samples) 264 | } 265 | hist( 266 | sample_mean, 267 | prob = T, 268 | main = "Sampling Distribution for Sample Mean", 269 | xlab = "Sample Mean", 270 | breaks = 30, 271 | cex.main = 0.8 272 | ) 273 | abline(v = 2, col = "red", lwd = 3) 274 | ``` 275 | 276 | 其余可交由学生思考复制。 277 | 278 | 279 | --- 280 | 281 | ### 真实的观测数据:Nile 流量 282 | 283 | `Nile`数据是`R`自带的数据,记录了尼罗河在埃及阿斯量(Ashwan) 地 284 | 区1871-1970 年这100年间的年流量值。这一数据服从什么特定的精确分布吗?--不清楚。 285 | 286 | 287 | ```{r, fig.align="center", fig.height=4, fig.width=4} 288 | hist(Nile, breaks = 30) 289 | abline(v = mean(Nile), col = "red", lty = 2, lwd = 3) 290 | ``` 291 | 292 | 但若以它为“总体”,再从中进行简单随机抽样,然后观察某些特定统计量(如样本均值、样本方差、样本中位数)的分布,仍可获得经验感知。 293 | 294 | --- 295 | 296 | ```{r, echo=FALSE, fig.align= "center"} 297 | opar <- par(no.readonly = T) 298 | x <- 299 | data.frame( 300 | a = numeric(10000), 301 | b = numeric(10000), 302 | c = numeric(10000), 303 | d = numeric(10000) 304 | ) 305 | par(mfrow = c(2, 2)) 306 | for (i in 1:10000) 307 | { 308 | set.seed(i) 309 | samples <- sample(Nile, 5) 310 | x$a[i] <- mean(samples) 311 | } 312 | 313 | hist( 314 | x$a, 315 | xlab = "Mean flow", 316 | main = "n=5", 317 | probability = T, 318 | xlim = c(600, 1200) 319 | ) 320 | abline( 321 | v = mean(Nile), 322 | lwd = 3, 323 | lty = 2, 324 | col = "red" 325 | ) 326 | 327 | for (i in 1:10000) 328 | { 329 | set.seed(i) 330 | samples <- sample(Nile, 10) 331 | x$b[i] <- mean(samples) 332 | } 333 | hist( 334 | x$b, 335 | xlab = "Mean flow", 336 | main = "n=10", 337 | probability = T, 338 | xlim = c(600, 1200) 339 | ) 340 | abline( 341 | v = mean(Nile), 342 | lwd = 3, 343 | lty = 2, 344 | col = "red" 345 | ) 346 | 347 | for (i in 1:10000) 348 | { 349 | set.seed(i) 350 | samples <- sample(Nile, 30) 351 | x$c[i] <- mean(samples) 352 | } 353 | hist( 354 | x$c, 355 | xlab = "Mean flow", 356 | main = "n=30", 357 | probability = T, 358 | xlim = c(600, 1200) 359 | ) 360 | abline( 361 | v = mean(Nile), 362 | lwd = 3, 363 | lty = 2, 364 | col = "red" 365 | ) 366 | 367 | 368 | for (i in 1:10000) 369 | { 370 | set.seed(i) 371 | samples <- sample(Nile, 50) 372 | x$d[i] <- mean(samples) 373 | } 374 | hist( 375 | x$d, 376 | xlab = "Mean flow", 377 | main = "n=50", 378 | probability = T, 379 | xlim = c(600, 1200) 380 | ) 381 | abline( 382 | v = mean(Nile), 383 | lwd = 3, 384 | lty = 2, 385 | col = "red" 386 | ) 387 | par(opar) 388 | ``` 389 | 390 | 红色虚线表示“总体”均值所在的位置。这是不是就是中心极限定理(Central Limit Theorem)告诉我们的道理呢? 391 | 392 | --- 393 | 394 | ## 部分代码示例 395 | 396 | 397 | ```r 398 | x <- 399 | data.frame( 400 | a = numeric(10000), 401 | b = numeric(10000), 402 | c = numeric(10000), 403 | d = numeric(10000) 404 | ) 405 | par(mfrow = c(2, 2)) 406 | for (i in 1:10000) 407 | { 408 | set.seed(i) 409 | samples <- sample(Nile, 5) 410 | x$a[i] <- mean(samples) 411 | } 412 | 413 | hist( 414 | x$a, 415 | xlab = "Mean flow", 416 | main = "n=5", 417 | probability = T, 418 | xlim = c(600, 1200) 419 | ) 420 | abline( 421 | v = mean(Nile), 422 | lwd = 3, 423 | lty = 2, 424 | col = "red" 425 | ) 426 | ``` 427 | 428 | 429 | --- 430 | ### Nile数据,其他样本统计量的抽样分布 431 | 432 | ```{r, echo=FALSE, fig.align = "center", fig.width=6, fig.height=6} 433 | opar <- par(no.readonly = T) 434 | x <- 435 | data.frame( 436 | a = numeric(10000), 437 | b = numeric(10000), 438 | c = numeric(10000), 439 | d = numeric(10000) 440 | ) 441 | par(mfrow = c(2, 2)) 442 | for (i in 1:10000) 443 | { 444 | set.seed(i) 445 | samples <- sample(Nile, 30) 446 | x$a[i] <- min(samples) 447 | } 448 | 449 | hist(x$a, main = "Sampling Distribution of Min", xlab = "River Flow") 450 | abline( 451 | v = min(Nile), 452 | lwd = 3, 453 | lty = 2, 454 | col = "red" 455 | ) 456 | 457 | for (i in 1:10000) 458 | { 459 | set.seed(i) 460 | samples <- sample(Nile, 30) 461 | x$b[i] <- max(samples) 462 | } 463 | hist(x$b, main = "Sampling Distribution of Max", xlab = "River Flow") 464 | abline( 465 | v = max(Nile), 466 | lwd = 3, 467 | lty = 2, 468 | col = "red" 469 | ) 470 | 471 | for (i in 1:10000) 472 | { 473 | set.seed(i) 474 | samples <- sample(Nile, 30) 475 | x$c[i] <- median(samples) 476 | } 477 | hist(x$c, main = "Sampling Distribution of Median", xlab = "River Flow") 478 | abline( 479 | v = median(Nile), 480 | lwd = 3, 481 | lty = 2, 482 | col = "red" 483 | ) 484 | 485 | 486 | for (i in 1:10000) 487 | { 488 | set.seed(i) 489 | samples <- sample(Nile, 30) 490 | x$d[i] <- quantile(samples, 0.25) 491 | } 492 | hist(x$d, main = "Sampling Distribution of First Quartile", xlab = "River Flow") 493 | abline( 494 | v = quantile(Nile, 0.25), 495 | lwd = 3, 496 | lty = 2, 497 | col = "red" 498 | ) 499 | par(opar) 500 | ``` 501 | 样本最小值、样本最大值、样本中位数、样本第一四分位数的抽样分布示意图(样本容量为30)。红色虚线分别表示“总体”最小值、最大值、中位数和第一四分位数所在的位置。 502 | 503 | --- 504 | 505 | ### 关于代码教学的建议 506 | 507 | 教师只需在课堂讲解说明并提供一个图形的原始代码,即可要求学生仿照此代码,自行绘制其他图形,并作为作业进行布置。如此可加深学生对抽样分布形成过程的直观认识。 508 | 509 | -- 510 | 511 | 实际上关于抽样分布还有一些基于`RStudio`的`shiny`平台搭建的动态呈现模式,例如[Nicole Radziwill](https://radziwill.shinyapps.io/sdm-clt)就制作了相关的简单结果展示。这可以作为课堂教学的参考。 512 | 513 | 如果教师本人精力允许,可以带领学生自行制作相关网页。这样收获更大。 514 | 515 | -- 516 | 517 | 实际上,有了重复抽样情形下的抽样分布及模拟,教师还可利用`R`进行自助分布(Bootstrap Distribution)、随机化分布(Randomization Distribution)等理论分布的模拟,如此可将推论的背景框架推广至其他观测数据或实验数据的情形。 518 | 519 | 520 | --- 521 | 522 | ## 计量经济学的课程教学 523 | 524 | 这里使用一个经常在计量经济学中使用到的数据(`Affairs`)进行示例。这是美国 *Psychology Today* 杂志于1969年采集的关于婚外情的数据。该数据经常用于广义线性模型的示例。 525 | 526 | ```{r, message=FALSE} 527 | if(!require(AER)) install.packages("AER") 528 | data("Affairs") 529 | head(Affairs) 530 | ``` 531 | 532 | --- 533 | 534 | ## OLS回归 535 | 536 | ```{r} 537 | fm_ols <- lm(affairs ~ age + yearsmarried + religiousness + occupation + rating, 538 | data = Affairs) 539 | summary(fm_ols) 540 | ``` 541 | 542 | --- 543 | 544 | ## OLS 回归 545 | 546 | ### 查看模型拟合值 547 | 548 | ```{r} 549 | fit <- fitted(fm_ols) 550 | head(fit) 551 | ``` 552 | 553 | ### 查看模型残差 554 | 555 | ```{r} 556 | re <- residuals(fm_ols) 557 | head(re) 558 | ``` 559 | 560 | --- 561 | 562 | ## 查看用于模型诊断的相关图示 563 | 564 | ```{r, fig.align='center', fig.width=6.5, fig.height=6.5} 565 | opar <- par(no.readonly = T) 566 | par(mfrow = c(2, 2)) 567 | plot(fm_ols) 568 | par(opar) 569 | ``` 570 | 571 | --- 572 | 573 | ## 关于回归假设诊断的一个常见范例 574 | 575 | 线性模型最大的优点可能在于数学形式上的简单性。但这仍依赖于许多基本假定(assumptions)。对这些假定进行检验,是经济学教学和实证研究环节中不可忽视的内容。 576 | 577 | 通过一些“极端”的教学示例,可培养学生检验模型基本假定的良好习惯。 578 | 579 | 580 | [Frank Anscombe](https://en.wikipedia.org/wiki/Frank_Anscombe)(1918-2001) 是20世纪著名的英国统计学家, 他于1973年发表了一篇具有深远影响的文章,讨论图形在统计检验中的作用。其所构造的一组数据经常被作为演示数据。 581 | 582 | ![](https://upload.wikimedia.org/wikipedia/en/d/d5/Francis_Anscombe.jpeg) 583 | 584 | 585 | --- 586 | 587 | ## Anscombe 四重奏(Anscombe’s Quartet) 588 | 589 | 请观察以下数据。 590 | 591 | ```{r} 592 | anscombe 593 | ``` 594 | 595 | x1, x2, x3这三列完全相同,x4 与前三例不同;y1, y2, y3, y4各不相同。 596 | 597 | --- 598 | 599 | ## Anscombe的“四个”回归方程 600 | 601 | ```{r} 602 | fit1 <- lm(y1 ~ x1, data = anscombe) 603 | coefficients(fit1) 604 | fit2 <- lm(y2 ~ x2, data = anscombe) 605 | coefficients(fit2) 606 | fit3 <- lm(y3 ~ x3, data = anscombe) 607 | coefficients(fit3) 608 | fit4 <- lm(y4 ~ x4, data = anscombe) 609 | coefficients(fit4) 610 | ``` 611 | 612 | --- 613 | 614 | ## Anscombe的“四个”线性相关系数 615 | 616 | ```{r, message=FALSE} 617 | attach(anscombe) 618 | cor(x1, y1) 619 | cor(x2, y2) 620 | cor(x3, y3) 621 | cor(x4, y4) 622 | detach(anscombe) 623 | ``` 624 | 625 | 626 | --- 627 | 628 | ## 相同的回归系数,相同的相关系数 629 | 630 | 从近似角度看,这几乎可以统一为一个回归方程: 631 | 632 | $$ \hat{y} = 0.5 x + 3 $$ 633 | 634 | 从近似的角度看,它们还拥有相同的相关系数:0.816。 635 | 636 | ## 但是,如果绘制各自的散点图…… 637 | 638 | --- 639 | 640 | ```{r, echo=FALSE, fig.align='center', fig.width=8, fig.height=8} 641 | attach(anscombe) 642 | opar <- par(no.readonly = T) 643 | par(mfrow = c(2, 2)) 644 | plot(x1, y1, col = "orange", pch = 20, cex = 2) 645 | abline(lm(y1~x1), col = "blue", lwd = 2) 646 | plot(x2, y2, col = "orange", pch = 20, cex = 2) 647 | abline(lm(y2~x2), col = "blue", lwd = 2) 648 | plot(x3, y3, col = "orange", pch = 20, cex = 2) 649 | abline(lm(y3~x3), col = "blue", lwd = 2) 650 | plot(x4, y4, col = "orange", pch = 20, cex = 2) 651 | abline(lm(y4~x4), col = "blue", lwd = 2) 652 | par(opar) 653 | detach(anscombe) 654 | ``` 655 | 656 | --- 657 | 658 | ## 结论:统计数字会骗人! 659 | 660 | -- 661 | 662 | ### 不能迷信回归系数 663 | 664 | -- 665 | 666 | ### 结合可视化进行模型检验有其优势 667 | 668 | -- 669 | 670 | ### 结合R来做可视化较为便利 671 | 672 | --- 673 | 674 | ## 相关代码 675 | 676 | ```r 677 | attach(anscombe) 678 | opar <- par(no.readonly = T) 679 | par(mfrow = c(2, 2)) 680 | plot(x1, y1, col = "orange", pch = 20, cex = 2) 681 | abline(lm(y1~x1), col = "blue", lwd = 2) 682 | plot(x2, y2, col = "orange", pch = 20, cex = 2) 683 | abline(lm(y2~x2), col = "blue", lwd = 2) 684 | plot(x3, y3, col = "orange", pch = 20, cex = 2) 685 | abline(lm(y3~x3), col = "blue", lwd = 2) 686 | plot(x4, y4, col = "orange", pch = 20, cex = 2) 687 | abline(lm(y4~x4), col = "blue", lwd = 2) 688 | par(opar) 689 | detach(anscombe) 690 | ``` 691 | 692 | --- 693 | 694 | # 广义线性模型 695 | 696 | 广义线性模型(Generalized Linear Models)的一般形式: 697 | 698 | $$f(\mu_Y)=\beta _0 + \beta _1 X_1 + \beta _2 X_2 + \cdots + \beta _k X_k=\beta _0 + \sum ^k _{j=1} \beta _j X_j$$ 699 | 700 | 其中 701 | - $f(\mu_Y)$表示响应变量的条件均值的某种函数(称为连接函数,link function)。 702 | 703 | - 此时对 $Y$ 不再有服从正态分布的要求,而可以服从任何指数分布族中的某一分布。 704 | 705 | - 设定好连接函数与分布类型后,就可以利用极大似然法通过多次迭代推导出各参数值。 706 | 707 | --- 708 | 709 | # 常用的广义线性模型 710 | 711 | - Probit/Logistic 回归模型 712 | - Poisson 回归模型 713 | - Negative Binomial 回归模型 714 | - Zero Inflation 回归模型 715 | - Tobit 回归模型 716 | - …… 717 | 718 | ## 这些都可通过R的相关函数方便求得。 719 | 720 | --- 721 | 722 | # 广义线性模型 723 | 724 | ## Probit 回归 725 | 726 | ```{r} 727 | fm_probit <- glm(I(affairs > 0) ~ age + yearsmarried + religiousness + occupation + rating, 728 | data = Affairs, family = binomial(link = "probit")) 729 | summary(fm_probit) 730 | ``` 731 | 732 | 注:`I(affairs > 0)`用于生成是否有婚外情的虚拟变量,> 0 则赋值为1,否则为0。 733 | 734 | --- 735 | 736 | ## Probit 回归 737 | 738 | ## 查看模型拟合值 739 | 740 | ```{r} 741 | fit <- fitted(fm_probit) 742 | head(fit) 743 | ``` 744 | 745 | 746 | 747 | --- 748 | 749 | ## Logistic/Logit 回归 750 | 751 | ```{r} 752 | fm_logit <- glm(I(affairs > 0) ~ age + yearsmarried + religiousness + occupation + rating, 753 | data = Affairs, family = binomial(link = "logit")) 754 | summary(fm_logit) 755 | ``` 756 | 757 | --- 758 | 759 | ## Poisson 回归 760 | 761 | ```{r} 762 | fm_pois <- glm(affairs ~ age + yearsmarried + religiousness + occupation + rating, 763 | data = Affairs, family = poisson) 764 | summary(fm_pois) 765 | ``` 766 | 767 | 768 | --- 769 | 770 | ## Negative Binomial 回归 771 | 772 | ```{r, message=FALSE} 773 | if(!require(MASS)) install.packages("MASS") 774 | fm_nb <- glm.nb(affairs ~ age + yearsmarried + religiousness + occupation + rating, 775 | data = Affairs) 776 | summary(fm_nb) 777 | ``` 778 | 779 | --- 780 | 781 | ## Zero Inflation 回归 782 | 783 | ```{r, message=FALSE} 784 | if(!require(pscl)) install.packages("pscl") 785 | fm_zero <- zeroinfl(affairs ~ age + yearsmarried + religiousness + occupation + rating | age + 786 | yearsmarried + religiousness + occupation + rating, data = Affairs) 787 | summary(fm_zero) 788 | ``` 789 | 790 | 791 | --- 792 | 793 | ## Tobit 回归 794 | 795 | ```{r, message=FALSE} 796 | library(AER) 797 | fm_tobit <- tobit(affairs ~ age + yearsmarried + religiousness + occupation + rating, 798 | data = Affairs) 799 | summary(fm_tobit) 800 | ``` 801 | 802 | --- 803 | 804 | # 在数据获取、预处理和可视化中的应用 805 | 806 | - tidyverse系列数据处理包 807 | - dplyr: 数据操纵 808 | - tidyr: 数据操纵 809 | - stringr: 文本数据操纵 810 | - rvest: 在线抓取文本 811 | - …… 812 | - 可视化系列数据处理包 813 | - ggplot2 814 | - ggtheme 815 | - ggvis 816 | - shiny 817 | - wordcloud2 818 | - …… 819 | 820 | --- 821 | 822 | ## 数据处理示例1:一手问卷调查数据 823 | 824 | [我们项目组](https://github.com/xkdog/Seminar)目前正在编制《中国医患社会心态调查问卷》,问卷已经基本完成编制并已进行预测试。对初测数据的统计分析工作正在进行。初测问卷使用问卷星填答,要求被调查者使用自身手机或在访问员的手机上完成填答。数据示例见Excel文件。 825 | 826 | 以下命令可简单地统计被试的地理位置分布。 827 | 828 | ```r 829 | library(readxl) 830 | library(stringr) 831 | library(tidyverse) 832 | PDSurveyBasic <- read_excel("PDSurveyBasic.xlsx") 833 | ip.location <- str_extract(PDSurveyBasic$ip, "(?<=\\().*(?=\\))") %>% 834 | str_split("-", n = 2, simplify = TRUE) %>% 835 | as_tibble %>% 836 | transmute(province = .[[1]], city = .[[2]]) %>% 837 | group_by(province) %>% 838 | summarise(n=n()) %>% 839 | arrange(desc(n)) 840 | ``` 841 | 842 | --- 843 | class: center 844 | 845 | ## 地理位置信息分布结果 846 | 847 | ```{r, echo=FALSE, message=FALSE, warning=FALSE} 848 | library(readxl) 849 | library(stringr) 850 | library(tidyverse) 851 | PDSurveyBasic <- read_excel("PDSurveyBasic.xlsx") 852 | ip.location <- str_extract(PDSurveyBasic$ip, "(?<=\\().*(?=\\))") %>% 853 | str_split("-", n = 2, simplify = TRUE) %>% 854 | as_tibble %>% 855 | transmute(province = .[[1]], city = .[[2]]) %>% 856 | group_by(province) %>% 857 | summarise(n=n()) %>% 858 | arrange(desc(n)) 859 | ip.location 860 | ``` 861 | 862 | 863 | --- 864 | 865 | ## 数据获取与处理示例2 866 | 867 | ### 政府工作报告抓取与分析 868 | 869 | 传统社会科学的量化分析以对数字数据(numeric data)的量化分析为主,对文本数据(text data)的分析较少。这主要是受研究工具的局限所致。 870 | 871 | R及Python等开源软件的出现,很大程度上改变这种现状,使得文本分析成为当下社会科学研究的一大潮流。 872 | 873 | 874 | [中国政府网](http://www.gov.cn/guowuyuan/baogao.htm)提供了自1954年以来所有的政府工作报告全文。这里以中国政府工作报告(2017)为例做一简单的R语言示例(该示例得益于雪晴数据网陈堰平老师的讲座)。 875 | 876 | 877 | --- 878 | 879 | ## 政府工作报告的抓取与简单分析 880 | 881 | [2017政府工作报告](http://www.gov.cn/premier/2017-03/16/content_5177940.htm) 882 | 883 | 884 | ```{r, message=FALSE, warning=FALSE} 885 | if (!require(rvest)) install.packages('rvest') 886 | if (!require(wordcloud2)) install.packages('wordcloud2') 887 | if (!require(jiebaR)) install.packages('jiebaR') 888 | if (!require(stringr)) install.packages('stringr') 889 | url2017 <- 890 | "http://www.gov.cn/premier/2017-03/16/content_5177940.htm" 891 | report2017 <- read_html(url2017) 892 | text2017 <- report2017 %>% 893 | html_nodes("p") %>% 894 | html_text() %>% 895 | paste(collapse = "") 896 | writeLines(text2017, "report2017.txt") 897 | library(jiebaR) 898 | cutter <- worker( 899 | bylines = T, 900 | user = "./UsrWords.txt", 901 | stop_word = "./stopWords.txt", 902 | output = "report2017output.txt" 903 | ) 904 | report_seg_file <- cutter["./report2017.txt"] 905 | report_segged <- 906 | readLines("./report2017output.txt", encoding = "UTF-8") 907 | report <- as.list(report_segged) 908 | doc.list <- strsplit(as.character(report), split = " ") 909 | term.table <- table(unlist(doc.list)) 910 | term.table <- sort(term.table, decreasing = TRUE) 911 | del <- term.table < 5 | nchar(names(term.table)) < 2 912 | term.table <- term.table[!del] 913 | vocabDF <- as.data.frame(term.table) 914 | ``` 915 | 916 | --- 917 | 918 | ## 政府工作报告的抓取与简单分析 919 | 920 | 921 | ```{r} 922 | head(vocabDF, 10) 923 | ``` 924 | 925 | 926 | --- 927 | 928 | ## 政府工作报告的抓取与简单分析 929 | 930 | ```{r} 931 | library(wordcloud2) 932 | wordcloud2(vocabDF, color = "random-light", backgroundColor = "grey") 933 | ``` 934 | 935 | --- 936 | 937 | 如何通过循环来遍历所有年份政府工作报告的链接,留待大家作为思考题。 938 | 939 | 940 | 提示如下: 941 | 942 | ```{r} 943 | url <- "http://www.gov.cn/guowuyuan/baogao.htm" 944 | reports <- read_html(url) 945 | links <- reports %>% 946 | html_nodes(".history_report a") %>% 947 | html_attr("href") %>% 948 | str_trim() 949 | head(links) 950 | ``` 951 | 952 | 953 | --- 954 | 955 | ## 数据获取、处理与可视化 956 | 957 | ### 经济学研究的常用数据、世界银行数据可使用两个R包获取: 958 | 959 | - [WDI](https://cran.r-project.org/web/packages/WDI/index.html) 960 | - [wbstats](https://cran.r-project.org/web/packages/wbstats/vignettes/Using_the_wbstats_package.html) 961 | 962 | 963 | ### 一个复制Hans Rosling的[Gapminder](https://www.gapminder.org/)软件的动态交互式气泡图 964 | 965 | - [Hans Rosling](https://www.ted.com/speakers/hans_rosling)的[TED演讲](https://www.ted.com/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen),[中文翻译版](http://open.163.com/movie/2011/12/L/6/M8H1NPQM9_M8H1USJL6.html) 966 | - [R中的复制](https://www.r-bloggers.com/new-r-package-to-access-world-bank-data/) 967 | 968 | --- 969 | 970 | ## ggplot系列图形 971 | 972 | 利用ggplot2及ggthemes、ggsci等包,可便捷产生符合特定杂志风格的图形。 973 | 974 | ### 常用ggplot系列可视化包 975 | 976 | - ggplot2 977 | - ggthemes 978 | - ggsci 979 | - ggcorrplot 980 | - …… 981 | 982 | --- 983 | 984 | ### ggplot2 原始风格 985 | 986 | ```{r ggplot2 style, fig.align='center', fig.width=7, fig.height=6} 987 | library(ggplot2) 988 | ggplot(iris) + 989 | geom_boxplot(aes(x = Species, y = Sepal.Length, fill = Species)) 990 | ``` 991 | 992 | --- 993 | ### *The Economist* 风格图形 994 | 995 | ```{r Economist style, message=FALSE, fig.height=5, fig.width=5, fig.align='center'} 996 | ggplot(iris) + 997 | geom_boxplot(aes(x = Species, y = Sepal.Length, fill = Species)) + 998 | ggthemes::theme_economist() 999 | ``` 1000 | 1001 | --- 1002 | 1003 | ### *The Wallstreet Journal* 风格图形 1004 | 1005 | ```{r wsj style, fig.align='center', fig.width=5, fig.height=5} 1006 | ggplot(iris) + 1007 | geom_boxplot(aes(x = Species, y = Sepal.Length, fill = Species)) + 1008 | ggthemes::theme_wsj() 1009 | ``` 1010 | --- 1011 | 1012 | ### Stata风格图形 1013 | 1014 | ```{r stata style, fig.align='center', fig.width=5, fig.height=5} 1015 | ggplot(iris) + 1016 | geom_boxplot(aes(x = Species, y = Sepal.Length, fill = Species)) + 1017 | ggthemes::theme_stata() 1018 | ``` 1019 | 1020 | --- 1021 | 1022 | ### *Nature* 风格 1023 | 1024 | ```{r ggsci, message=FALSE} 1025 | library("ggsci") 1026 | library("ggplot2") 1027 | library("gridExtra") 1028 | data("diamonds") 1029 | p1 = ggplot(subset(diamonds, carat >= 2.2), 1030 | aes(x = table, y = price, colour = cut)) + 1031 | geom_point(alpha = 0.7) + 1032 | geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) + 1033 | theme_bw() 1034 | p2 = ggplot(subset(diamonds, carat > 2.2 & depth > 55 & depth < 70), 1035 | aes(x = depth, fill = cut)) + 1036 | geom_histogram(colour = "black", binwidth = 1, position = "dodge") + 1037 | theme_bw() 1038 | ``` 1039 | 1040 | ```r 1041 | p1_npg = p1 + scale_color_npg() 1042 | p2_npg = p2 + scale_fill_npg() 1043 | grid.arrange(p1_npg, p2_npg, ncol = 2) 1044 | ``` 1045 | 1046 | --- 1047 | 1048 | ## Nature 风格 1049 | 1050 | ```{r nature style, fig.align='center', fig.height=4, fig.width=10, echo=FALSE} 1051 | p1_npg = p1 + scale_color_npg() 1052 | p2_npg = p2 + scale_fill_npg() 1053 | grid.arrange(p1_npg, p2_npg, ncol = 2) 1054 | ``` 1055 | 1056 | --- 1057 | 1058 | ### *Lancet* 风格 1059 | 1060 | ```{r lancent style, fig.align='center', fig.width=10, fig.height=5} 1061 | p1_lancet = p1 + scale_color_lancet() 1062 | p2_lancet = p2 + scale_fill_lancet() 1063 | grid.arrange(p1_lancet, p2_lancet, ncol = 2) 1064 | ``` 1065 | --- 1066 | ## 更多的R可视化图例 1067 | 1068 | - [RStudio图库](https://shiny.rstudio.com/gallery/) 1069 | 1070 | - [ggplot2图库](http://www.r-graph-gallery.com/portfolio/ggplot2-package/) 1071 | 1072 | - [ggthemes示例](https://cran.r-project.org/web/packages/ggthemes/vignettes/ggthemes.html) 1073 | 1074 | - [ggsci示例](https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html) 1075 | 1076 | --- 1077 | 1078 | # 用于撰写学术报告 1079 | 1080 | - rmarkdown: html 格式报告 1081 | - xaringan: html 格式幻灯片 1082 | - rticles: AER 等经济学类顶级刊物LaTeX模板 1083 | - stargazer: 生成LaTeX表格 1084 | 1085 | 1086 | --- 1087 | 1088 | # 结论与建议 1089 | 1090 | - R 对于经济学教学与研究来说,是一个“无价”而高效的工具。 1091 | - 无价的两层含义 1092 | - 本身是免费的 1093 | - 作用是巨大的 1094 | 1095 | -- 1096 | 1097 | - 通过RStudio 等IDE(集成开发环境),R已形成一个良好的数据分析生态 1098 | - 可导入SAS、STATA、SPSS等常见格式的数据 1099 | - 可用来生成动态化、交互式报告 1100 | - 几乎可直接用来撰写论文与书籍 1101 | - 有强大的社区支持 1102 | 1103 | - R 自身的学习周期较长,不易上手 1104 | - 这是包括Python等开源软件存在的一种通行问题 1105 | - 可能需要进一步加强基础课程建设来加以解决 1106 | 1107 | --- 1108 | 1109 | # 结论与建议 1110 | 1111 | 1112 | - 尽早让学生接触数据分析的基本流程 1113 | - 在没有概率论支撑的情况下就可引入数据分析的基本理念,培养面向数据的分析思维 1114 | 1115 | - 尽早、全面地引入计算工具,深度参与统计教学 1116 | - 对于科研型院校,可适当强调程序思维和编程操作的基础性地位 1117 | - 要将相关的数据分析的计算机技术当成基础数学三大模块(微积分、线性代数、概率论与数理统计)并列的模块加以重视 1118 | 1119 | 1120 | - 应更加突出可视化在数据分析中的作用 1121 | 1122 | 1123 | - 建立统一的、开放的、可编辑的数据展示与教学安全平台,对于节约教师的精力有很大的作用(GitHub可以作为一个有效的平台)。 1124 | 1125 | 1126 | --- 1127 | 1128 | # 常用资源 1129 | 1130 | - 计量经济学中的常用 R 包索引: 1131 | 1132 | 1133 | - 用R做计量分析网站: 1134 | 1135 | - Using R for Introductory Econometrics(Wooldridge 计量经济学导论配套R语言网站): 1136 | 1137 | - bookdown官方网站: 1138 | 1139 | 1140 | - *R for Data Science* 在线版本: 1141 | 1142 | --- 1143 | 1144 | class: center, middle 1145 | 1146 | # 谢谢观看! 1147 | 1148 | ### [吕小康](https://xkdog.github.io/) 1149 | ### xkdog@126.com 1150 | 1151 | ### 南开大学周恩来政府管理学院 1152 | 1153 | 本幻灯片由[谢益辉](https://yihui.name/)的 R 包 [**xaringan**](https://github.com/yihui/xaringan) 生成。原始文档可从以下链接下载: 1154 | 1155 | 1156 | 1157 | 简略版可从以下网址在线观看(图片未能正确显示): 1158 | 1159 | 1160 | 1161 | 1162 | --------------------------------------------------------------------------------