R语言入门--第六节(基本统计分析)

之前学了一些基本图形及数据操作的知识。接下来逐步开始探索数据的规律及分布特征。这一节主要学习了描述、评价数据特征及数据间的关系。

1、常用数学函数统计

注意此时数据对象为连续型变量!

(1)整体描述

  • summary() 函数依次返回 最小值,.25,.5(中位数),平均值,.75,最大值 6个统计量
mt <- mtcars[c("mpg", "hp", "wt", "am")]
summary(mt)
summary
  • 自建返回指定统计量的功能函数
  • function&sapply
mystats <- function(x, na.omit=FALSE){     #自建函数
  if (na.omit)
    x <- x[!is.na(x)]   #删除含有缺失值的观测
  m <- mean(x)          #返回平均值
  n <- length(x)        #返回观测数量
  s <- sd(x)            #返回标准差
  skew <- sum((x-m)^3/s^3)/n   #计算偏度
  kurt <- sum((x-m)^4/s^4)/n - 3    #计算峰度
  return(c(num=n, mean=m, stdev=s, skew=skew, kurtosis=kurt))   #返回的标签
}
myvars <- c("mpg", "hp", "wt")
sapply(mtcars[myvars], mystats)
#sapply()可以插入的典型函数有mean(),sd(),var()等

偏度与峰度是描述正态分布曲线的两个特征参数。简单来说,偏度是衡量随机变量概率分布的不对称性;峰度是研究数据分布陡峭或平滑的统计量。对于标准正态分布,二者均为0,详见文章

sapply

补充:其它几个包里的统计函数

library(Hmisc)
#观测数量、缺失值、唯一值、Info(关于变量的连续性的统计量),Gmd(基尼均差),平均值,分位数以及五个最大的值和五个最小的值
describe(mtcars[, myvars])

install.packages('pastecs')   #安装失败了
options()$repos
install.packages('pastecs', repos='http://cran.us.r-project.org')
library(pastecs)
#所有值,空值,缺失值的数量以及最小值,最大值,值域,合计,中位数,均值,平均数的标准误差,平均数置信度为0.95的置信区间,方差,标准差,变异系数。
stat.desc(mtcars[, myvars])

library(psych)
#非缺失值的数量,平均数,标准差中位数,截尾均值,绝对中位差,最小值,最大值,值域,偏度,峰度和平均值的标准误差
describe(mtcars[, myvars])

值得注意的是 Hmisc包与psych包含有同名函数describe(),二者均加载时,以后者被加载的包优先;或者执行Hmisc::describe()可指定执行。

(2)分组描述

  • aggregate()
myvars <- c("mpg", "hp", "wt")
aggregate(mtcars[myvars], by=list(mtcars$am), mean)
aggregate(mtcars[myvars], by=list(am=mtcars$am), sd)
#注意上述by=list的两种表述差异,第一个会自动添加一个group1
aggregate
  • aggregate() 的不足就是一次只能使用一个函数,而by() 函数弥补了上述的不足
dstats <- function(x)sapply(x, mystats)  # 函数套函数
myvars <- c("mpg", "hp", "wt")
by(mtcars[myvars], mtcars$am, dstats)
#注意by() 的三个参数依次:待分析数据-分组因子-统计函数
#可以把上面mystats的写法当做一个模板来用

2、分析类别型变量

2.1生成频数列联表(其实就是分类计数)

  • 注意此时的数据对象为类别型变量!

(1)分析单组数据

library(vcd)  #用到vcd包里的示例数据
mytable=table(Arthritis$Improved)   #显示各因子的频数
#列联表在R中是专门的一种存储格式,table
options("digits"=2)  # 这里修改一下小数点位数,默认为7
prop.table(mytable) # 显示比例格式
prop.table(mytable)*100 # 显示百分比格式
prop.table(mytable)

(2)分析两组数据

mytable <- xtabs(~ Treatment+Improved, data=Arthritis)
mytable
# 上述参数中,第一个变量Treatment设置为行名,第二个变量Improved设置为列名
margin.table(mytable,1)
#1表示第一个变量,即求每行的和。相当于对Treatment单组数据求列联表。
#2就表示第2个变量(Improved)
addmargins(mytable)   #一步到位,添加所有的和
prop.table(mytable, 1)   #以第一个变量(行名)总和求比例

addmargins(mytable)    #添加边际和
mytable
  • 如上列联表 表示两组治疗方法下,各自三种治疗程度的病人数

(3)分析三组数据,详见p141

mytable <- xtabs(~ Treatment+Sex+Improved, data=Arthritis)
mytable

2.2类别性变量独立性检验

  • 原假设为两类变量相互独立。比如研究治疗方法变量与效果(无效,有效,明显有效)变量是否独立;即治疗方法的不同是否会影响效果的改变。(目的是希望不独立的,即有影响的)

(1)卡方独立性检验

  • chisp.test(), 参数为二维列联表
mytable <- xtabs(~Treatment+Improved, data=Arthritis)
chisq.test(mytable)  
#p值大于0.05,则两变量互不影响;越小说明两类变量关联程度越大
chisq.test

(2)Fisher精确检验

  • fisher.test() 参数为不能为2×2的列联表
fisher.test(mytable)

3、定量变量之间的相关系数

  • 我理解的定量变量就是连续型变量
  • 还要注意的是为两组不同类型变量的独立性检验与显著性评价,比如收入与犯罪率关系。

3.1 相关系数的计算

  • 相关系数(-1~1之间)可以用来描述定量变量之间的关系,正负表示正/负相关,绝对值越大,相关性越大。
  • R可计算很多种类型相关系数,常用Pearson积差相关系数,其衡量了两个定量变量之间的线性相关程度。
  • 常用函数cor(x, use= , method= ) ,常用的三个参数为:

(1)x 为待分析的矩阵;
(2)use= 指定缺失数据的处理方式。默认设置为everything(遇到缺失数据,相关系数计算结果设为missing);其它类型还有all.obs(遇到缺失数据则报错);complete.obs(遇到则删除行);pairwise.complete.obs(遇到则成对删除)
(3)method= 指定要计算的R相关系数类型。默认设置为Pearson,此外还可以设置为Spearson类型,Kendall类型;

states<- state.x77[,1:6]
cor(states)   #结果如下图,对角线结果肯定是1
#指定分析某些变量间的关系
x <- states[,c("Population", "Income", "Illiteracy", "HS Grad")]
y <- states[,c("Life Exp", "Murder")]
cor(x,y)
cor(states)
  • 函数cov() 用来计算协方差。协方差与相关系数有一定联系,其为正值时表示两变量正相关;反之,为负相关。详见文章
cov(states)

3.2 相关性的显著性检验

  • 即验证上面计算的相关性的可信度
  • 常用的原假设为变量间不相关(即总体的相关系数为0)进行假设检验,求p值;
    注意p值越小,反映该相关系数越可信;而不是表明相关系数越高。
  • 函数为cor.test(x,y, alternative= , method= ),3个参数依次为:

(1)x,y 为待检测的变量;
(2)alternative指定双侧检验/单侧检验,默认为two.side(相关系数不等于0);当假设相关系数小于0时,less;大于0,greater;
(3)method= 指定要计算的相关类型,默认为pearman;

cor.test(states[,3], states[,5])
#cor.test() 只能用于单次计算,psych包的corr.test()可以实现批量计算
library(psych)
corr.test(states, use="complete")
#返回的第一个矩阵是相关性,第二个矩阵是显著性p值;
#同样corr.test可以计算三种相关系数,默认为pearman;
#参数use=pairwise/complete分别表示缺失值执行成对删除/成行删除
corr.test

4、t 检验

  • 第3点是研究变量间是否存在联系(一般主观希望存在联系,也就是不独立)
  • 此处目标是评价两组相同类型的变量(如评价药物疗效控制组与对照组的血药浓度),而主观希望越独立,则越有意义(凸显了药的作用)
  • 如果实验结果是用类别性变量表示的,就用第二点列联表方法计算(我觉得一般不多吧);若实验结果是连续型变量,则应用 t 检验
  • 注意计算时一般是两组连续型变量,有时有的结果用一组二分变量(对照组为0,实验组为1),和一组对应的全部的实验结果的连续型变量。
  • 还要注意的是实验结果的连续型变量分布要符合正态分布,以及方差齐性,否则不能用t检验(参见5)。

4.1 独立样本的t检验

  • 独立样本定义是两个样本是从两个总体中独立抽取的。即一个样本的元素与另一个样本的元素相互独立的。我的理解就是对照组与实验组的数据分别来自两组独立的小鼠。
t.test(y1, y2)     #一般格式
t.test(y~x, data)    #x为二分变量
  • 例子:利用MASS包的数据,研究美国南方与北方的监禁率Prob是否有显著差异;其中表示南北方的So用二分变量表示。
library(MASS)
t.test(Prob ~ So, data=UScrime)
#一般p值越小(<0.05),越有依据拒绝原假设(二者相同)
t.test

4.2 非独立样本的t检验

  • 关于非独立样本,我的理解是实验数据来自同一组小鼠。比如给药前测一次小鼠血糖,给药后再测一次该组小鼠的血糖,比较血糖的高低。术语叫做前-后设计(pre-post design)
sapply(data[c("y1","y2")], function(x)(c(mean=mean(x),sd=sd(x))))
#先观察下两组数据的均值差异是否足够大
#注意下function() 函数的用法
with(data, t.test(y1, y2, paired=TRUE))

有时实验设计多于两组,需要使用方差分析(ANOVA),见R语言入门--第八节(方差分析) - 简书

5、非参数检验

  • 这一小节是针对第4点t检验而补充的。
  • 因为 t 检验对变量是有条件的,那就是你的数据要符合正态分布与方差齐性。
  • 如果不符合(比如数据存在严重偏倚或呈有序关系),盲目使用t检验是不可取的,此时需要采用非参数检验。

5.1Wilcoxon秩和检验

  • 又称为Mann-Whitney U检验。
  • 这一点是对比4.1 ,针对独立样本的方法
wilcox.test(y1,y2)     #一般格式
wilcox.test(y~x,data)    #x为二分变量

例子:还是以上面那个南北方监禁率差异的研究

with(UScrime, by(Prob, So, median))
#首先大致观察下两组数据的中位数差异
wilcox.test(Prob ~ So, data=UScrime)

5.2Wilcoxon符号秩检验

  • 这一点是对比4.2,针对非独立样本的方法
    with(UScrime, by(Prob, So, median))
sapply(data[c("y1", "y2")], median)
#做到这里,我觉得无论是4.2的求均值,还是这里的求中位数,目的都是先从数据分布上判断是否有差异,然后再进行检验
with(data, wilcox.test(y1, y2, paired=TRUE))

小彩蛋:进行t检验前,如何知道一组数据是否符合正态分布、方差齐性?

  • shapiro.test() 若返回p值大于0.05,则数据符合正态分布;
  • bartlett.test(y ~ x ) 若返回p值小于0.05,说明数据在不同水平下是等方差的。注意这里的y为所有变量结果,x为分组因子。比如:
a=as.data.frame(state.x77)
a1=c(a$Income,a$Illiteracy)  #各有50个数据,总共100个
a2=c(rep(1,50),rep(2,50))
bartlett.test(a1,a2)

关于本文提到的统计检验原理,今后有机会再专门学习一下。部分参考教材《R语言实战(第2版)》,侵删~
--寒假自学R语言的生信小白

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 《R语言与统计分析》的读书笔记 本书的重点内容及感悟: 第三章 概率与分布 1、随机抽样 通过sample()来实...
    格式化_001阅读 6,637评论 1 12
  • 《R语言实战》笔记系列 本章学习大纲 1.描述性统计分析 2.频数表和列联表 3.相关系数和协方差 4.t检验 5...
    一日如十年阅读 1,269评论 0 1
  • 参考: R语言实战 因为书中列举的方法和知识点比较多,没必要全都掌握,会一种,其他的了解即可。我就简要地整理一下我...
    王诗翔阅读 3,348评论 2 11
  • 1. 简述相关分析和回归分析的区别和联系。 回归分析和相关分析都是研究两个或两个以上变量之间关系的方法。 广义上说...
    安也也阅读 8,681评论 0 3
  • 但愿我的恶 都用来 做恶梦
    pampa阅读 225评论 0 0