主要目标:
1.学习安装R和RStudio
2.了解其界面和R程辑包安装
如何安装R与Rstudio - 知乎 (zhihu.com) 这里有关于R和RStudio的相关知识,以及安装教程,可供参考。
R是用于统计分析、绘图的语言和操作环境。
相比于其他统计分析软件,R有一下几个特点:(摘录自百度百科“R语言”)
1.R是自由软件,完全免费,开放源代码;
2.R是可编程的语言。作为一种开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。学会之后可以编制自己的函数来扩展现有的语言。
3.所有R的函数和数据集是保存在程序包里面的。只有当一个包被载入时,它的内容才可以被访问。
4.R具有很强的互动性。除了图形输出是在另外的窗口以外,它的输入输出窗口都是在同一个窗口进行的,输入语法中如果出现错误会马上在窗口中得到提示,可以随时再现、编辑修改以前输入过的命令。输出图形可保存为多种格式。和其他编程语言和数据库之间有很好的借口。
5.如果加入R的帮助邮件列表,每天都可能会收到几十份关于R的邮件资讯,是全世界最大、最前沿的统计学家思维的聚集地。
R程辑包
R语言的使用,很大程度上是借助各式各样的R程辑包的辅助,R程辑包就是针对R的插件,不同的插件满足不同的需求,截至2013年3月6日,CRAN已经收录了各类程辑包4338个。例如用于经济计量、财经分析、人文科学研究以及人工智能。
R程辑包安装与使用
1、通过选择菜单:
Tools->install packages->在弹出的对话框中,选择你要安装的程辑包,然后确定。
2、使用命令
install.packages("package_name","dir")
package_name:是指定要安装的程辑包名,请注意大小写。
dir:程辑包安装的路径。默认情况下是安装在..\library 文件夹中的。可以通过本参数来进行修改,来选择安装的文件夹。
3、本地安装
如果你已经下载的相应的程辑包的压缩文件,则可以在本地来进行安装。
加载程辑包
包安装后,如果要使用程辑包的功能。必须先把程辑包加载到内存中(默认情况下,R启动后默认加载基本程辑包),加载包命令:
Library(“包名”)
Require(“包名”)
查看程辑包的相关信息
1、查看包帮忙
library(help="package_name")
主要内容包括:例如:包名、作者、版本、更新时间、功能描述、开源协议、存储位置、主要的函数
help(package = "package_name")
主要内容包括:包的内置所有函数,是更为详细的帮助文档
2、查看当前环境哪些包加载
find.package() 或者 path.package()
3、移除包出内存
detach()
4、把其它包的数据加载到内存中
data(dsname, package="package_name")
5、查看这个包里的包有数据
data( package="package_name")
6、列出所有安装的包
library()
RStudio是免费提供的开源集成开发环境(IDE)。RStudio提供了一个具有很多功能的环境,使R更容易使用,是在终端中使用R的绝佳选择。
RStudio的界面介绍和初步配置可参考:RStudio使用教程。
R语言和RStudio入门感性认识可参考:R语言入门第一颗:R和Rstudio
一、数据结构与数据集
编码基础
算数
赋值
函数
自定义一个函数,调用一个函数。
循环(loop)
R中的循环函数包括for,while,repeat
管道(pipe)
magrittr包提供了一种符号函数%>%,可以称这个符号为管道。具体含义就是“将上一个运行的结果放在下一个运行的函数的第一个参数的位置上
数据类型
基础数据类型
数值型:实数、整数、复数
逻辑型:TRUE、FALSE
字符型:任何用引号引起来的值
向量:用c函数创建向量
因子(factor)
因子与字符向量的主要区别在于因子向量的独特值(levels)是有限个数的。因子向量的所有元素都是由这些有限个数的独特值组成的。
数值之间的转换
as.numeeric 转换为数值型
as.character 转换为字符型
as.logical 转换为逻辑型
向量命名
names函数命名
访问向量的子集
[ 选择一个子集
[[ 选择一个元素
$ 不用括号的选择
特殊数据类型
日期
lubridate包中ymd函数
日期可以进行运算
时间序列
ts函数
多维数据类型
矩阵(matrix):matrix函数
列表(list):list函数
数据表(data frame 与 tibble)
读写数据
包中内置有数据,可以进行查看
内置数据集:data()
表格数据类型:通过readr包中的read_csv、read_excel等函数读取相应数据
R的专属类型数据:rds、RData
其他软件:SPSS,Stata,SAS
练习题
summaris函数使用可参考:数据整理—dplyr包(summarise系列)
二、数据清洗与准备
h1n1_data <- read.csv("h1n1_flu.csv",header=TRUE) ##header= ,第一行是否用作列名称,true则第一行用于列名称,具体数据从第二行开始,false则第一行即为具体数据。
波士顿房价数据集
将需要使用的数据集放在软件目录下,用data(BostonHousing)加载数据。dim()、head()
重复值处理
unique() 函数可以对数据进⾏整体去重, distinct() 函数可以针对某些列去重
# 整体去重
h1n1_data_de_dup1 <- unique(h1n1_data)
# 指定根据列respondent_id,h1n1_knowledge去重,并保留所有列
h1n1_data_de_dup2 <- distinct(h1n1_data, respondent_id, h1n1_knowledge, .keep_all = T) ##distinct函数在dplyr包里
缺失值识别与处理
缺失值识别:
y <- c(1, 2, 3, NA)
is.na(y) ##识别y中的缺失值
FALSE FALSE FALSE TRUE
> !complete.cases(y) ##识别y中的缺失值
FALSE FALSE FALSE TRUE
统计缺失值数量:
sum(is.na(h1n1_data)) # 数据集中总缺失数据量
21742
sum(is.na(h1n1_data["h1n1_knowledge"])) # 数据集中某⼀列缺失数据量
116
⽤ VIM 包⾥的 aggr() 函数,直观看⼀下具体的缺失情况
aggr(h1n1_data,cex.axis = .6,oma = c(9,5,5,1))
删除法
行删除:
h1n1_data_row_del1 <- h1n1_data[!complete.cases(h1n1_data), ] ##保留了所有有缺失值的行
h1n1_data_row_del2 <- na.omit(h1n1_data) ##删除了所有有缺失值的行
列删除:
dataset[,-5] ###去掉第五列
subset(dataset, select = -c(col1, col2)) ###去掉列col1和列col2
h1n1_data_col_del1 <- subset(h1n1_data, select = -c(health_insurance)) ##删除health_insurance列
简单插补法
拟合插补法
多重插补法
Task03 基础统计分析
一、多种方法获取描述性统计
基础方法
通过summary计算:
通过 sapply() 计算:
先定义函数
应用定义的函数
关于sapply函数(apply函数的一种)的使用,可参考学习:R语言:常用apply函数(apply,tapply,sapply,lapply)用法介绍
拓展包⽅法
通过pastecs包中的 stat.desc()函数计算描述性统计量
通过psych包中的describe()计算描述性统计量
二、分组计算描述性统计
基础方法
使⽤aggregate()分组获取描述性统计,aggregate函数(很强大!!)使用可参考网址:R语言-数据整形之aggregate函数
分组计算不同性别收⼊贫困计数
查尔斯河的房价中位数平均值
使⽤ by() 分组计算描述性统计量
三、频数表和列联表
频数表和列联表的R语言实现
R语言入门之频率表和列联表
四、相关
相关的类型:
Pearson、 Spearman和Kendall相关
房价数据的相关系数,默认是Pearson相关系数。
指定计算Spearman相关系数
城镇⼈均犯罪率与房价的相关系数
偏相关
指在控制⼀个或多个定量变量时,另外两个定量变量之间的相互关系。使⽤ggm 包中的 pcor() 函数计算偏相关系数
相关性的显著性检验
五、⽅差分析
⽅差分析(ANOVA)⼜称“变异数分析”或“F检验”,⽤于两个及两个以上样本均数差别的显著性检验
单因素⽅差分析
多因素⽅差分析
数据可视化
ggplot2包介绍
ggplot2包由Hadley Wickham编写,提供了⼀种基于Wilkinson所述图形语法的图形系统。ggplot2包的⽬标是提供⼀个全⾯的、基于语法的、连贯⼀致的图形⽣成系统,允许⽤户创建新颖的、有创新性的数据可视化图形。
ggplot2是⼀个⾮常经典的数据可视化R包,内容⾮常丰富,可以去官⽹进⾏更加详细的学习。
task5 模型
用R语言进行建模分析,了解模型的适⽤范围以及如何建模。
回归模型: 回归模型是⼀种有监督的、预测性的建模技术,它研究的是因变量和⾃变量之间的关系。
分类模型: 分类模型也是⼀种有监督的机器学习模型。与回归模型不同的是,其标签(因变量)通常是有限个数的定类变量。最常⻅的是⼆分类模型。
一、线性回归 Linear Regression
多元线性回归是⼀种最为基础的回归模型,其使⽤多个⾃变量和⼀个因变量利⽤OLS完成模型训练。多元线性回归模型使⽤ lm() 命令。
运⽤plot命令对模型进⾏诊断,各图含义参考
https://www.cnblogs.com/lafengdatascientist/p/5554167.html
plot(lr_model)
二、逐步回归分析 Stepwise Regression
利⽤逐步回归分析可以对模型中的变量进⾏优化。R语⾔中的 step() 命令,是以AIC信息统计量为准则,通过选择最⼩的
AIC信息统计量来达到提出或添加变量的⽬的。
对于逐步回归,⼀般有前向、后向、双向等逐步⽅式。本部分将基于已经实现的lr_model 进⾏双向逐步回归。前向和后向回归只需要更改step() 命令⾏中的 direstion 参数即可。具体内容参照 https://blog.csdn.net/qq_38204302/article/details/86567356
step_model <- step(lr_mode, direction = "both")
进一步学习可参考 :语言逐步回归
分类模型
将连续变量转化成⼆分类变量
逻辑回归 Logistics Regression
逻辑回归是⼀种⼴义的线性回归分析模型,利⽤sigmode将线性回归结果转化成概率的形式。下⾯展示了利⽤glm() 构建逻辑回归的过程。
# 分别对训练集和测试集进⾏预测
> lr_pred_train <- predict(lr_model, newdata = BostonHousingTrain, type = "response")
> lr_pred_test <- predict(lr_model, newdata = BostonHousingTest, type = "response")
## type = response 给出具体的预测概率,而 type = class按规定的阙值给出分类
# 计算训练集和测试集的auc
> calcAUC(lr_pred_train, BostonHousingTrain$medv)
[1] 0.9554211
> calcAUC(lr_pred_test, BostonHousingTest$medv)
[1] 0.9506969
通过计算,训练集上的auc取值为0.9554211,测试集上的auc取值为0.9506969,说明模型效果整体不错。
KNN
KNN模型是⼀种简单易懂、可以⽤于分类和回归的模型。其中 K 表示在新样本点附近(距离)选取K 个样本数据,通过在 K 个样本进⾏投票来判断新增样本的类型。
KNN模型较难的⼀点是确定超参数K,⽬前有⼀些指标和经验⽅法帮助确定最优K的取值。这部分内容会在后续进⾏讲解,这⾥使⽤
k=25进⾏建模。
KNN模型在测试集上的auc值为0.875784,相⽐于逻辑回归效果较差。
Decision Tree
决策树是⼀种基于树模型进⾏划分的分类模型,通过⼀系列if then决策规则的集合,将特征空间划分成有限个不相交的⼦区域,对于落在相同⼦区域的样本,决策树模型给出相同的预测值。下⾯构建了决策树的分类模型。
> plot(dt_model)
> text(dt_model)
在构建决策树模型的基础上,分别对训练集和测试集进⾏预测并计算auc取值。该模型在训练集上的auc取值为0.9281874,在测试集上的auc取值为0.8789199。
## 预测
> dt_pred_train <- predict(dt_model, newdata = BostonHousingTrain, type = "class")
> dt_pred_test <- predict(dt_model, newdata = BostonHousingTest, type = "class")
# 计算auc取值
> calcAUC(as.numeric(dt_pred_train), BostonHousingTrain$medv)
[1] 0.9308756
> calcAUC(as.numeric(dt_pred_test), BostonHousingTest$medv)
[1] 0.8789199
训练集和测试集间存在抖动,说明该模型可能出现过拟合。我们需要引⼊剪枝的操作来降低模型的过拟合,这部分供同学们⾃学。
随机森林 Random Forest
随机森林是⼀个包含多个决策树的分类器,可以⽤于分类和回归问题。在解决分类问题时,其输出的类别是由个别树输出的类别的众数⽽定。相⽐于单树模型,随机森林具有更好地泛化能⼒。
使⽤randomForest() 构建模型的过程中,可以通过 ntree 设定随机森林中包含的决策树数量。由于随机森林是对样本和变量的随机,因此可以通过important 展示变量的重要性排序。通过模型预测,随机森林模型在训练集上的auc为0.9615975,在测试集上的auc为0.9247387。
## 安装导入随机森林包
install.packages("randomForest")
library(randomForest)
## 构建随机森林模型
> rf_model <- randomForest(medv ~ ., BostonHousingTrain, ntree = 100, nodesize = 10) ### 学习资料中内容确实,括号内的参数内容不够
## 展示模型变量的重要性
> importance(rf_model)
## 预测
> rf_pred_train <- predict(rf_model, newdata = BostonHousingTrain, type = "class")
> rf_pred_test <- predict(rf_model, newdata = BostonHousingTest, type = "class")
# 计算auc取值
> calcAUC(as.numeric(rf_pred_train), BostonHousingTrain$medv)
[1] 0.9672619
> calcAUC(as.numeric(rf_pred_test), BostonHousingTest$medv)
[1] 0.9297909