R语言入门

主要目标:

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






一、数据结构与数据集



编码基础

算数

赋值

R Studio中给变量赋值常用“<-”符号,代表将右边的值赋给左边的变量。这个符号可以通过快捷键Alt+-来输入。

函数

自定义一个函数,调用一个函数。

循环(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系列)





二、数据清洗与准备


首先安装程辑包install.packages("####"),别忘了双引号。

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检验”,⽤于两个及两个以上样本均数差别的显著性检验

单因素⽅差分析


从输出结果的F检验值来看, p<0.05⽐较显著,说明是否在查尔斯河对房价有影响

多因素⽅差分析







数据可视化

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

本次R语言学习,到此告一段落。我的感受是,学习一门语言就要多用,多练,就像所有语言学习过程一样,只有多用,多练,在使用的过程中不断犯错误,并不断找原因,改正错误,才能不断掌握这门语言的规律,也才能慢慢地学会这门语言。对于R语言来说,我已经能够“咿咿呀呀”了。

你可能感兴趣的:(R语言入门)