R语言
视频链接:https://www.bilibili.com/video/BV19x411X7C6
数据分析过程
数据采集——数据存储——数据分析——数据挖掘——数据可视化——进行决策
1 Rstudio使用
1.1 入门
1.2 基础
- list.files() / dir() :查看工作目录下的文件
- 变量赋值前不需要进行声明
1.3 Rpackage的移植
Rpack <- installed.package()[,1]
save(Rpack,file="Rpack.Rdata")
#在新设备上可以load加载处Rpack里边的内容,再逐一下载
for (i in Rpack) install.packages(i)
2 数据结构
2.1 R对象
2.2 向量
- 用于存储数值型、字符型或逻辑性数据的一维数组
- 用函数c创建向量
注意:R语言中字符串要加引号,否则会被当成是对象
必须为同一类型才能处理
向量化变成主要是因为R语言是统计软件,高效率,避免循环
向量索引
-
R中向量是从1开始而不是从0开始
-
如果使用负值来索引表示输出除了这个数以外的数字
#索引该位置的数字,但是不能同时出现正负号
> x[c(4:18)]
[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#可以使用逻辑值向量输出逻辑值为T的数字,数量可以不用对应上,但是逻辑值多的会出现缺失情况
y[c(T,T,T,F,F,F)]
y[y>5]#把y>5的输出
y[y>5 & y<9]
#字符串访问
>z <- c("one","two","three")
>"one" %in% z
TRUE
> v
[1] 1 2 3 4 5 6
> v[20]=4
> v
[1] 1 2 3 4 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
> append(x = v,values = 99,after = 4)
[1] 1 2 3 4 99 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
向量运算
元素个数不相等时会将个数少的进行循环使用,且数量上必须是倍数关系
逻辑运算:x>5 大于5的向量位置上会变为TRUE,其余变为FALSE
ceiling | 返回不小于X的最小整数 |
---|
floor | 返回不大于X的最大整数 |
trunc | 返回整数部分 |
round | 四舍五入,第一个参数是向量,第二个是保留的位数(digits) |
sinif | 与round差不多,第二个参数是保留的数字数量 |
统计函数
sum | 求和 |
---|
max/min | 返回最大或最小值 |
range | 返回最大值和最小值 |
mean | 均值 |
var | 方差 |
median | 中位数 |
prod | 连乘的积 |
which | 返回索引值 |
| |
2.3 矩阵
- 要求每个元素数据格式一样
- 一般是先按列排布,可以设置byrow=T设置为按行排布
matrix:创建矩阵,可以把原有一维向量合理分配到新矩阵中
> x <- 1:20
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> v <- matrix(x,4,5)
> v
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
#矩阵行列重命名
> cname <- c("C1","C2","C3","C4","C5")
> rname <- c("R1","R2","R3","R4")
> dimnames(v) <- list(rname,cname)
> v
C1 C2 C3 C4 C5
R1 1 5 9 13 17
R2 2 6 10 14 18
R3 3 7 11 15 19
R4 4 8 12 16 20
dim
#分配维数
> dim(x) <- c(4,5)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
矩阵的索引
m[2,] | 访问第二行 |
---|
m[1,2] | 访问一行二列的数字 |
m[1,c(2,3,4)] | 访问第一行二三四列的数字 |
m[-1,2] | 去除第一行,取第二列 |
- 如果给矩阵赋值了也可以通过行列名称来索引
- 要注意访问的是行还是列,如果是单独访问行或者列的话,要在前或者后加上逗号
矩阵运算
colSums | 每一列的和 |
---|
rowSums | 每一行的和 |
colMeans | 每一列的平均值 |
diag | 返回对角线位置的值 |
m*n | 矩阵的内积 |
m %*% n | 矩阵的外积 |
t(m) | 将m进行转置 |
2.4 数组
> z <- array(1:24)
> z
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> dim1 <- c("A1","A2")
> dim2 <- c("B1","B2","B3")
> dim3 <- c("C1","C2","C3","C4")
> v <- array(z,c(2,3,4),dimnames = list(dim1,dim2,dim3))
> v
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , C3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
B1 B2 B3
A1 19 21 23
A2 20 22 24
2.5 列表
- 一些对象的有序集合,可以存储若干向量,矩阵,数据框甚至其他列表的组合
- 最复杂、最重要
- 是一维数据集合
list():生成列表
可以赋名称,类似于字典
> a <- (1:20)
> a
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> b <- "Hello"
> b
[1] "Hello"
> c <- matrix(a,4,5)
> c
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
#创建列表
> mlist <- list(a,b,c)
> mlist
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[[2]]
[1] "Hello"
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> mlist[1]
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#同时访问多个列表元素就需要用到向量
mlist$ (后边会自动引出列表元素)
> mlist$first
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
使用一个中括号表示引用列表第一个元素,使用两个中括号表示引用列表第一个元素的本身
> class(mlist[1])
[1] "list"
> class(mlist[[1]])
[1] "integer"
添加列表元素同样需要两个中括号
删除列表元素:给该位置赋值NULL
2.6 数据框
- 表格式的数据结构,旨在模拟数据集
- 是由数据构成的一个矩形数组,行表示观测,列表示变量,矩阵必须为同一数据类型
- 本质是一个列表,列表元素是向量,每一列必须具有相同的长度,所以数据框是矩形结构,而且数据框的列必须命名
- excel就是一个数据框的结构
data.frame():制作数据框
索引会出现行名列名
索引方式与上边类似
- 使用lm进行线性回归时只需要给出列名即可
- attach:加载数据框,这样就可以不用$符号来加载数据,即可以直接输入列名来得到数据
- detach:取消加载,执行后就需要带上数据框名$列名才能得到数据
- with(mtcars,(hp)):也起到相同效果,第一个元素是数据框名字,第二个是列名
2.7 因子 factor
- 变量分类(可能值称为一个水平 level
- 名义型变量:相互独立,没有顺序
- 有序型变量
- 连续型变量:连续的关系
- 名义型变量和有序型变量被称为因子,factor,这些分类变量的可能值称为一个水平level,例如good,better,best,都成为一个level,由这些水平值构成的向量就称为因子
- 作用:适合用于记录某项研究中研究对象满足的不同处理水平或者其他类型的分类变量
- 应用
- 计算频数、独立性检验、相关性检验、方差分析、主成分分析、因子分析等等
- 在很多绘图工具都是要使用到因子
table() | 分类统计因子中含有的level |
---|
cut() | 分割函数 |
2.8 时间序列(time series)
时间序列的处理
ts():生成时间序列
3.缺失数据
- NA表示缺失值,不可用(not available),存储缺失信息,不一定就是0,缺失值和值为0是完全不同的
- 当向量中有NA时求sum结果时NA,此时需要sum(向量,na.rm=TRUE)
is.na(a) | 检查a中是否有NA,有就返回TRUE,可以用来测试数据集 |
---|
colSums() | 检测缺失值数目 |
oa.omit() | 去掉向量中的NA值 |
处理缺失值包
识别缺失值
- 删除缺失值
- 无效实例(行删除)omit.na()
- 有效实例(配对删除法) 一些函数有可用选项
- 最大似然估计mvmle包
- 插补缺失值
- 单个插补(简单) Hmisc包
- 多重插补MI包、Mice包、amelia包、mitools包
其他缺失数据
-
缺失数据NaN,代表不可能的值
-
Inf表示无穷,分为正无穷Inf和负无穷Inf,代表无穷大或者无穷小
也是使用is.na()检查缺失值,返回TRUE和FALSE
4. 字符串
处理字符串的函数(R语言中字符串也满足正则表达式,可以使用正则表达式)
nchar() | 返回向量元素中字符串的长度(包含空格),就算元素不是字符串也会转换成字符串来处理 |
---|
length() | 返回向量元素个数 |
paste() | 粘贴字符串,后边元素加个sep="-"表示用-连接,当一个向量有多个字符串时是在各个元素后分别添加 |
substr() | 提取字符,可以提取每个字符串元素的start到stop |
toupper / tolower | 将字符串转换为大写 / 小写 |
gsub() | 首字母大小写转换 |
strsplit() | 分割字符串 |
5.获取数据
5.1 利用键盘获取数据
> patientID <- c(1, 2, 3, 4)
> admdate <- c("10/15/2009","11/01/2009","10/21/2009","10/28/2009")
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> data <- data.frame(patientID,age,diabetes,status)
> data
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
> data2 <- data.frame(patientID=character(0),admdate=character(0),age=numeric(),diabetes=character(),status=character())
> data2 <- edit(data2) #输入这个会弹出一个方框可以修改数据,未定义的数据就是NA,一定要像这样找个变量保存,不然编辑器中修改的数据无法保存
> data2
patientID admdate age diabetes status
1 5 <NA> NA <NA> <NA>
2 6 <NA> NA <NA> <NA>
3 7 <NA> NA <NA> <NA>
4 5 <NA> NA <NA> <NA>
#也可以使用fix函数,可以直接保存
5.2 通过读取存储在外部文件上的数据
5.3 通过访问数据库系统来获取数据
6.读取文件
6.1 read.table()
- 将文件放在工作空间目录下
- 使用read.table(“文件名”),保存到一个变量中
- 注:一般是用来读取txt换个csv文件
- 可以使用head()和tail()两个函数来查看前几行和最后几行
- 可以使用全路径
- sep设置文件使用了什么分隔符,txt默认是空格,csv文件则要设置sep=","
- header=TRUE,表示第一行数据作为标题而不是数据
- skip设置跳过某些内容,设置skip=5,表示从第六行读取数据
- nrows=100,表示读取到一百行,可以与skip搭配使用
- na.string:处理缺失值信息,如果已知使用了什么符号作为缺失值,那么可以将缺失值替换为NA
- stringAsFactors:控制字符串是否转换为因子(一般设置为FALSE)
- 可以读取剪切板上的数据
- 在excel中选取某一部分,read.table(“clipboard”,header =T,sep="\t")
- 也可以直接使用readClipboard()来读取剪切板上的信息
6.2 read.csv()
6.3 read.delim()
- 其他read函数是read.table的简化版本,默认的分割形式不一样
6.4 读取网络文件
- 可以是csv,txt文本文件,遵循html等协议
- 不过容易出问题,爬虫吧
6.5 压缩文件
> read.table(gzfile("input.txt.gz"))
6.6 读取不规范文件
- readLine()
- 可以根据每一行、每个单元来读取文件
- 设置参数n限制读入行数
- scan()
- 每次读取一个单元
- 第一个参数表示文件地址
- what:期望读入的单元
7.写入文件
7.1 write.table()
- 默认保存在工作空间目录下,路径必须存在,R文件不会创建新的目录
- 可以指定新的分隔符,保存成不同类型的文件
- 写入文件时会把行号也写进去,可以添加参数row.names=FALSE取消将行号写入,如果行号是自带的可以使用负索引将行号去除掉
- 默认会给字符串添加双引号,可以将quote设置为FALSE去除
- na调整缺失值
- 同名文件会覆盖,可以将参数append设置为TRUE,设置为追加写入
- 可以直接写成压缩文件,文件扩展名也要对应上
- 想要将R的结果写成其他软件支持的格式可以使用foreign包
8. 读写excel文件
- 如果excel文件中包含了很多宏就不太适合直接读取
- openxlsx仅适用于打开xlsx文件
install.packages(openxlsx)
library(openxlsx)
a<-read.xlsx("exercise1.xlsx",sheet=1)#文件名+sheet的序号,简单粗暴
写入xlsx文件
#将文件内容写入变量a中
> a <- read.xlsx("data.xlsx")
> library(openxlsx)
> write.xlsx(a,file = "c.xlsx",sheetName = "she")
9.读写R格式文件
- 保存数据集,R会对存储为内部文件格式的数据进行自动压缩处理,并且会存储所有与带存储对象相关的R元数据
- 如果数据中包含了因子,日期和时间或者类的属性等信息就体现了作用
RDS文件
案例中使用了软件自带数据集iris
> saveRDS(iris,file = "iris.RDS")
> iris <- readRDS("E:/mathmodel/R_studio/RS_project/iris.RDS") #双击打开RDS文件自动导入
> x <- readRDS("iris.RDS")
RData文件
- 保存多个类型变量,类似于工程文件
- 保存了包、文件、信息等数据
save.image() 保存工作空间
load 加载工作空间
10.数据转换
- 转换成函数成处理的数据
- as.data.frame可以强制转换为数据框格式
- 矩阵可以直接转换为数据框,而数据框不能直接转换为矩阵,因为含有不同类型的数据
10.1 取子集
方法一
> who <- read.csv("WHO.csv")
> who1 <- who[c(1:50),c(1:10)]
> View(who1)
> who4 <- who[which(who$CountryID>50 &who$CountryID<=100),]#注意逗号
方法二
> who5 <- subset(who,who$CountryID>50 & who$CountryID<=100)
随机抽样
> x <- 1:20
> sample(x,10)#replace参数默认为F,无重复抽样
[1] 13 5 11 1 17 4 8 20 6 12
> who7 <- who[sort(sample(who$CountryID,30,replace = F)),]
10.2 删除固定行
使用了自带数据集mtcars
mtcars[-1:-5,] #删除固定行
mtcars[,-1:-5] #删除固定列
10.3 数据框的合并
cbind(两个数据集) #添加一列
rbind(两个数据集) #添加一行 要求两个数据集要有相同的列名
当有重叠时不会删除重复项
duplicated(数据集) #判断行名是否有重复值,返回T和F
data4[duplicated(data4),] #取出重复部分
data4[!duplicated(data4),] #取出非重复部分
也可以直接unique()函数一步到位
unique(data4)
10.4 数据翻转
T()函数
rev()函数
transform()函数
transform(women,height=height*2.54) #这样women数据集中的height列就变成了原来的2.54倍
10.5 数据框的排序
- sort只能用于向量的排序,不能用于数据框
- order函数也可以对向量排序,但返回的是索引而不是排序后的向量
- 如果要取相反顺序那么在order前加上-号即可,就是rev函数的效果
- 也可以同时对多个进行排序
10.6 数据框计算(apply系列函数)
巧妙之处在于FUN这个参数
apply()
-
适用于数据框或者矩阵
-
MARGIN=1对行操作 ,=2对列操作
-
FUN:所使用的函数
分组计算
- tapply()
- apply()
- 参数:list,data,frame,array
- 返回值:vector,matrix
多参数计算
- mapply()
- 参数:vector,不限个数
- 返回值:vector,matrix
循环迭代
- lapply()
- 参数:list,data,frame
- 返回值:list
- 简化版:sapply()
- 递归版:rapply()
环境空间遍历
> state.name
[1] "Alabama" "Alaska" "Arizona" "Arkansas"
[5] "California" "Colorado" "Connecticut" "Delaware"
[9] "Florida" "Georgia" "Hawaii" "Idaho"
[13] "Illinois" "Indiana" "Iowa" "Kansas"
[17] "Kentucky" "Louisiana" "Maine" "Maryland"
[21] "Massachusetts" "Michigan" "Minnesota" "Mississippi"
[25] "Missouri" "Montana" "Nebraska" "Nevada"
[29] "New Hampshire" "New Jersey" "New Mexico" "New York"
[33] "North Carolina" "North Dakota" "Ohio" "Oklahoma"
[37] "Oregon" "Pennsylvania" "Rhode Island" "South Carolina"
[41] "South Dakota" "Tennessee" "Texas" "Utah"
[45] "Vermont" "Virginia" "Washington" "West Virginia"
[49] "Wisconsin" "Wyoming"
> state.division
[1] East South Central Pacific Mountain West South Central
[5] Pacific Mountain New England South Atlantic
[9] South Atlantic South Atlantic Pacific Mountain
[13] East North Central East North Central West North Central West North Central
[17] East South Central West South Central New England South Atlantic
[21] New England East North Central West North Central East South Central
[25] West North Central Mountain West North Central Mountain
[29] New England Middle Atlantic Mountain Middle Atlantic
[33] South Atlantic West North Central East North Central West South Central
[37] Pacific Middle Atlantic New England South Atlantic
[41] West North Central East South Central West South Central Mountain
[45] New England South Atlantic Pacific South Atlantic
[49] East North Central Mountain
9 Levels: New England Middle Atlantic South Atlantic ... Pacific
> tapply(state.name,state.division,FUN=length) #操作的是因子
New England Middle Atlantic South Atlantic East South Central
6 3 8 4
West South Central East North Central West North Central Mountain
4 5 7 8
Pacific
5
10.7 数据的中心化与标准化
数据中心化:指数据集中的给想数据减去数据集的均值
数据标准化:指在中心化之后再除以数据集的标准差
scale()函数
10.8 reshape2包
> library(reshape2)
> head(airquality)
> names(airquality) <- tolower(names(airquality))
> head(airquality)
> aql <- melt(airquality)
> head(aql)
> head(airquality)
ozone solar.r wind temp month day
> aql <- melt(airquality,id.vars=c("month","day"))
> aql
month day variable value
10.9 tidyr包
-
特点:较为简洁
-
每一列表示一个变量
-
每一行表示一个观测
-
一个变量和一个观测确定唯一值
gather()
- 收集成单列,按照key和value将想要的数据排成两列
spread()
unite():多列合并为一列
separate():一列分开为多列
- col=x 要操作的列名
- into=c(“A”,“B”):拆分后的列名
- seq:设置分隔符
10.10 dplyr包
- 可以操作单表格、也可以操作双表格
- 调用时要用双冒号,放置于同名函数发生歧义
dplyr::distinct() | 去除重复行叠加 |
---|
dplyr::filter() | 匹配项,使用布尔运算去除一些数值 |
dplyr::slice() | 切片,取出任意行 |
sample_n(数据集,10) | 随机抽取10行 |
sample_frac(数据集,0.1) | 按照0.1比例进行随机抽取 |
arrange | 排序(如果加上desc则是按照相反的顺序进行排序 |
10.11 链式操作符%>%
- 实现将一个函数的输出传递给下一个函数,作为下一个函数的输入
- 可以使用多个链式操作符来内容传递
11. R函数
- 选项参数
- 常用选项
- file:接一个文件
- data:一般指要输入一个数据框
- x:表示单独的一个对象,一般都是向量,也可以是矩阵或者列表
- x和y:函数需要两个输入变量
- x,y,z:函数需要三个输入变量
- formula:公式
- na.rm:删除缺失值
- …:表示与其他函数类似
- 调节参数
- main:字符串,不能是向量
- na.rm:TRUE或者FALSE
- axis:side参数只能是1到4(确定图形区域的位置)
- fig:包含四个元素的向量
12. 数据统计函数
12.1 函数
d | 概率密度函数 |
---|
p | 分布函数 |
q | 分布函数的反函数 |
r | 产生相同分布的随机 |
给正态分布normal前加上dpqr前缀就构成函数名
-
rNormal:正态分布的随机数函数
-
其他概率分布函数也是如此
-
了解分布就可以绘制出各种曲线
分布名称 | 缩写 | 分布名称 | 缩写 |
---|
Beta分布 | beta | Logistic分布 | logis |
二项分布 | binom | 多项分布 | multinom |
柯西分布 | cauchy | 负二项分布 | nbinom |
(非中心)卡方分布 | chisq | 正态分布 | norm |
指数分布 | exp | 泊松分布 | pois |
F分布 | f | Wilcoxon符号秩分布 | signrank |
Gamma分布 | gamma | t分布 | t |
几何分布 | geom | 均匀分布 | unif |
超几何分布 | hyper | Weibull分布 | weibull |
对数正态分布 | lnorm | Wilcoxon秩和分布 | wilcox |
12.2 生成随机数runif()
-
默认生成0到1的数
-
可以调节参数min和max
-
如果想要两次生成的随机数相同,可以
12.3 描述性统计函数
summary()
fivenum()
aggregate()
- 统计函数,按照自己设定的信息对某些数值进行分组
- 一次只能通过一个函数来计算,返回一个函数值
summaryBy()
- 一次完成多个分组,多个统计函数,结果展现在一个表格内
13. 频数统计函数
13.1 table()
- 可以直接完成对频数的统计
- 或者也可以将列名设置成因子,用split函数进行分割,按照不同的数值分成不同的数据框
- 可以完成一维或者二维的统计
13.2 xtabs()
- addmargins()
- 添加到列联表的行或者列中
- 第二个参数 1表示行 2表示列
- ftabs()函数可以将结果转换为评估式的列联表
14. 独立性检验函数
-
P值
- 假设检验
- P值是一个通过计算得到的概率值,也就是在原假设为真时,得到最大的或者超出所得到的检验统计量值的概率,
- 一般将P值定位到0.05,当p<0.05时拒绝原假设,p>0.05不拒绝原假设
14.1 卡方检验
> library(vcd)
> mytable <- table(Arthritis$Treatment,Arthritis$Improved)
> mytable
None Some Marked
Placebo 29 7 7
Treated 13 7 21
> chisq.test(mytable)
Pearson's Chi-squared test
data: mytable
X-squared = 13.055, df = 2, p-value = 0.001463
> mytable <- table(Arthritis$Sex,Arthritis$Improved)
> chisq.test(mytable)
Pearson's Chi-squared test
data: mytable
X-squared = 4.8407, df = 2, p-value = 0.08889
Warning message:
In chisq.test(mytable) : Chi-squared approximation may be incorrect
14.2 Fisher检验
> mytable <- xtabs(~Treatment+Improved,data=Arthritis)
> fisher.test(mytable)
Fisher's Exact Test for Count Data
data: mytable
p-value = 0.001393
alternative hypothesis: two.sided
14.3 Cochran-Mantel-Haenszel检验
- 两个名义变量在第三个变量中都是独立的(需要三个变量,变量顺序对结果有影响
> mytable <- xtabs(~Treatment+Improved+Sex,data=Arthritis)
> mantelhaen.test(mytable)
Cochran-Mantel-Haenszel test
data: mytable
Cochran-Mantel-Haenszel M^2 = 14.632, df = 2, p-value = 0.0006647
> mytable <- xtabs(~Sex+Treatment+Improved,data=Arthritis)
> mantelhaen.test(mytable)
Mantel-Haenszel chi-squared test with continuity correction
data: mytable
Mantel-Haenszel X-squared = 2.0863, df = 1, p-value = 0.1486
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
0.8566711 8.0070521
sample estimates:
common odds ratio
2.619048
15. 相关性函数
15.1 相关性分析函数
cor()
- 相关性分析都是使用这个函数
- 可以计算pearson(默认)、kendall和spearman三个相关系数,其他系数只能R的扩展包(ggm)实现
- 可以取单独几列进行比较
cov()
- 计算协方差
- 衡量两个变量的总体误差
- 反映的问题与cor()差不多
ggm包
-
pcor(u,s)函数用来计算偏相关系数
-
u是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余数值为条件变量的下标
jsbl <- c(1,5) #要计算的相关系数的变量下标
tjbl <- c(2,3,6) #条件(控制)变量的下标,即要排除影响的变量的下标
u <- c(jsbl,tjbl)
-
s <- cov(pcordata) #变量的协方差
-
r <- pcor(u,s) #偏相关系数
15.2 相关性检验函数
cor.test()
- 可以计算pearson(默认)、kendall和spearman三个相关系数,其他系数只能R的扩展包(ggm)实现
> cor.test(state.x77[,3],state.x77[,5])
Pearson's product-moment correlation
data: state.x77[, 3] and state.x77[, 5]
t = 6.8479, df = 48, p-value = 1.258e-08
alternative hypothesis: true correlation is not equal to 0
#置信区间:由样本统计量所构造的总体参数的估计区间,在统计学中一个概率样本的置信区间是对这个样本的某个总体参数的区间估计,置信区间展现的是这个参数的真实值由一定概率落在测量结果的周围的程度,置信区间给出的是被测量参数的测量值的可信程度
95 percent confidence interval: #置信区间
0.5279280 0.8207295
sample estimates:
cor
0.7029752
corr.test()
- 在psych包中,可以递归处理
- 计算了相关系数还给出了检测值
pcor.test()
分组数据相关性检验
-
T检验
- 比较两个平均数差异是否显著
- 主要用于含量较小(小于30个),总体标准差未知的正态分布数据
参数检验
- 在总体分布形式已知(即数据分布已知,例如满足正态分布)的情况下,对总体分布的参数如均值、方差等进行推断的方法
非参数检验
- 在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而称为非参数检验
16. 绘图函数
R语言四大作图系统
- 基础绘图系统
- lattice包
- ggplot2包
- grid包
plot()
par()
设置字体样式,颜色等参数
17.自定义函数
函数声明
myfun <- function(选项参数)
{
函数体
}
🔺18.数据分析实战
18.1 线性回归
> fit <- lm(weight ~ height,data = women)
> fit
Call:
lm(formula = weight ~ height, data = women)
Coefficients:
(Intercept) height
-87.52 3.45
> summary(fit)
Call:
lm(formula = weight ~ height, data = women)
Residuals: #残差:真实值与预测值的差 下边是残差分布,残差值越小越精确
Min 1Q Median 3Q Max
-1.7333 -1.1333 -0.3833 0.7417 3.1167
Coefficients: #检验 weight = 3.45height -87.52
Estimate Std. Error t value Pr(>|t|)
(Intercept) -87.51667 5.93694 -14.74 1.71e-09 *** #截距项
height 3.45000 0.09114 37.85 1.09e-14 *** #系数
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #星星评定标准
Residual standard error: 1.525 on 13 degrees of freedom #残差标准误差
Multiple R-squared: 0.991, Adjusted R-squared: 0.9903 #R方判定系数 (0~1) 判断模型拟合质量 99.1%表示模型能表示99.1%的数据
F-statistic: 1433 on 1 and 13 DF, p-value: 1.091e-14 #F统计量,表示模型是否显著,用P值来衡量,p越小越显著
#判断模型顺序:从下到上
#先判断F,如果不小于0.05那么模型没有价值了,小于0.05再看R方
summary | 展示拟合模型的详细结果 |
---|
coefficients | 列出拟合模型的模型参数(截距项和斜率 |
confint | 提供模型参数的置信区间 |
fitted | 列出拟合模型的预测值 |
residuals | 列出拟合模型的残差值 |
anova | 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表 |
vcov | 列出模型参数的协方差矩阵 |
AIC | 输出赤池信息统计量 |
plot | 生成评价拟合模型的诊断图 |
predict | 用拟合模型对新的数据集预测响应变量值 |
#接上边
> plot(women$height,women$weight)
> abline(fit)
#拟合后生成曲线
#提高拟合度
> fit2 <- lm(weight ~ height+I(height^2),data = women) #增加一次,如果要三次就得再加I(height^3)
> lines(women$weight,fitted(fit2),col="red") #颜色区分
18.2 多元线性回归
> states <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
> class(states)
[1] "data.frame"
> fit <- lm(Murder~Population+Illiteracy+Income+Frost,data=states)
> fit
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost,
data = states)
Coefficients:
(Intercept) Population Illiteracy Income Frost
1.235e+00 2.237e-04 4.143e+00 6.442e-05 5.813e-04
> summary(fit)
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost,
data = states)
Residuals:
Min 1Q Median 3Q Max
-4.7960 -1.6495 -0.0811 1.4815 7.6210
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.235e+00 3.866e+00 0.319 0.7510
Population 2.237e-04 9.052e-05 2.471 0.0173 *
Illiteracy 4.143e+00 8.744e-01 4.738 2.19e-05 ***
Income 6.442e-05 6.837e-04 0.094 0.9253
Frost 5.813e-04 1.005e-02 0.058 0.9541
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared: 0.567, Adjusted R-squared: 0.5285
F-statistic: 14.73 on 4 and 45 DF, p-value: 9.133e-08
> options(digits = 4)
> coef(fit)
(Intercept) Population Illiteracy Income Frost
1.235e+00 2.237e-04 4.143e+00 6.442e-05 5.813e-04
判断变量关系(AIC函数)
-
多个变量时,要注意变量两两之间的关系,不确定两个变量的关系可以用冒号,如下
-
> fit <- lm(mpg~hp+wt+hp:wt,data=mtcars) #这两个变量由交互关系,但时不清楚是什么关系,那么可以用冒号连接
> summary(fit)
Call:
lm(formula = mpg ~ hp + wt + hp:wt, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-3.063 -1.649 -0.736 1.421 4.551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 49.80842 3.60516 13.82 5.0e-14 ***
hp -0.12010 0.02470 -4.86 4.0e-05 ***
wt -8.21662 1.26971 -6.47 5.2e-07 ***
hp:wt 0.02785 0.00742 3.75 0.00081 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.15 on 28 degrees of freedom
Multiple R-squared: 0.885, Adjusted R-squared: 0.872
F-statistic: 71.7 on 3 and 28 DF, p-value: 2.98e-13
-
赤池信息准则
- 考虑了模型的拟合度和用来拟合的参数数目
- 计算得到的AIC越小越好,表示可以用越少的变量来表达模型的拟合度
- 参数较多,判断时可以使用逐步回归法和全子集回归法
- 逐步回归法:每次减少 / 增加一个变量直到数值不变(mars包中的stepAIC()函数)
- 全子集回归法(leaps包中的regsbusets()函数)
- 取所有模型计算出最佳模型
- 但是如果变量过多需要的时间更长
-
拟合效果最佳但是没有实际意义也是没有用的
18.3 回归诊断
18.4 方差分析
-
用于两个及两个以上样本均数差别的显著性检验。方差分析也是回归分析的一种,只不过线性回归的因变量一般是连续性变量,而当自变量是因子时,研究关注的重点通常会从预测转不同组之间差异的比较。
-
aov()函数来进行分析(变量顺序很重要)
设计 | 表达式 |
---|
单因素ANOVA | y~A |
含单个协变量的单因素ANCOVA | y~x+A |
双因素ANOVA | y~A*B |
含两个协变量的双因素ANCOVA | y~x1+x2+A*B |
随机化区组 | y~B+A(B是区组因子) |
单因素组内ANOVE | y~A+Error(Subject/A) |
含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA | y~B*W+Error(Subject/W) |
18.5 功效分析
- 回归分析和方差分析都可以拿来建模和判断数据之间的关系
- 可以办证过户在给定置信度的情况下判断检测到给定效应值时所需的样本量,反过来它也可以在给定置信度水平情况下,计算在某样本量内能检测到给定效应值的概率
理论基础(给出其中三个可以推出第四个)
- 样本大小指的是实验设计中每种条件 / 组中观测的数目
- 显著性水平(也称alpha),由Ⅰ型错误的概率来定义,也可以把它看做时发现效应不发生的概率
- 功效通过Ⅰ减去Ⅱ型错误的概率来定义,可以把它看作是真实效应发生的概率
- 效应值指的是在备择或研究假设下效应的量,效应值的表达式依赖于假设检验中使用的统计方法
线性回归功效分析案例
18.6 广义线性模型
- 模型类型较多,线性回归和方差分析都是基于正态分布的假设,广义线性模型扩展了线性模型的框架,它包含了非正态因变量的分析
glm()函数
- 与lm()类似,但多了参数:概率分布family和相应默认的连接函数link
- 推导依据是极大似然法估计
泊松回归
- 用来为计数资料和列联表建模的一种回归分析,泊松回归假设因变量是泊松分布,并假设它的平均值的对数可被未知参数的线性组合建模
Logistic回归
- 当通过一系列连续性或类别型预测变量来预测二值型结果变量时是一个非常有用的工具
18.7 主成分分析 / 因子分析
主成分分析
- 与因子分析都是用来简化多变量复杂关系的监测方法
- 一种数据降维技巧,将大量相关变量转化为一组很少的不相关变量,这些无关的变量称为主成分,主成分其实是对原始变量重新进行线性组合,将原先众多具有一定相关性的指标重新组合为一组新的相互独立的综合指标
- princomp()函数或者psych包中的函数principal()
因子分析
- 一系列用来发现一组变量的潜在结构的方法,通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系,是主成分的推广
- 比主成分分析难在找公共因子,并对其进行表述和解释
主成分分析与因子分析的步骤
- 数据预处理
- 选择分析模型
- 判断要选择的主成分 / 因子数目(用碎石图来分析:fa.parallel()函数)
- 选择主成分 / 因子
- 旋转主成分 / 因子(可选的)
- 解释结果
- 计算主成分或因子得分,这步也是可选的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)