R语言
视频链接:https://www.bilibili.com/video/BV19x411X7C6
数据分析过程
数据采集——数据存储——数据分析——数据挖掘——数据可视化——进行决策
1 Rstudio使用
1.1 入门
-
TAB补齐
- 蓝色:函数
- 数据框:方框
- 粉色:内置数据集
-
Alt+Shift+K:显示快捷键
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语言中字符串要加引号,否则会被当成是对象
- seq 生成等差数列
- rep 重复数字
必须为同一类型才能处理
向量化变成主要是因为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包
其他缺失数据
也是使用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()
- 参数:vector
- 返回值:vector
- apply()
- 参数:list,data,frame,array
- 返回值:vector,matrix
多参数计算
- mapply()
- 参数:vector,不限个数
- 返回值:vector,matrix
循环迭代
- lapply()
- 参数:list,data,frame
- 返回值:list
- 简化版:sapply()
- 可设置返回值vapply()
- 向量或者矩阵
- 递归版:rapply()
- 参数:list
- 返回值:list
环境空间遍历
- eapply()
- 参数:environment
- 返回值:list
> 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
- acast()
- dcast()
10.9 tidyr包
-
特点:较为简洁
-
每一列表示一个变量
-
每一行表示一个观测
-
一个变量和一个观测确定唯一值
gather()
- 收集成单列,按照key和value将想要的数据排成两列
spread()
- 与gather相反
unite():多列合并为一列
- 与seperate相反
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则是按照相反的顺序进行排序 |
- select()函数取子集
- 根据列名、或者字符开头或结尾来取
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
-
如果想要两次生成的随机数相同,可以
-
set.seed(66)#一个绑定号码 runif(50) runif(50) #这里生成的随机数与前边不同 set.seed(66) runif(50)#这里生成的随机数与前边相同
-
12.3 描述性统计函数
summary()
- 可以对数据集进行统计
fivenum()
- 同summary
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 相关性检验函数
- 分析后还是需要量化成P值来检验
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检验
- *度
- P值
分组数据相关性检验
参数检验
- 在总体分布形式已知(即数据分布已知,例如满足正态分布)的情况下,对总体分布的参数如均值、方差等进行推断的方法
非参数检验
- 在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而称为非参数检验
16. 绘图函数
R语言四大作图系统
- 基础绘图系统
- lattice包
- ggplot2包
- grid包
plot()
- 支持多种数据类型
par()
设置字体样式,颜色等参数
17.自定义函数
函数声明
myfun <- function(选项参数)
{
函数体
}