Footsteps on my way !
perl/linux/测序分析

[转]在R中统计数据的频数或者密度分布并图形化

在进行数据分析之前,我们往往要首先对数据有一个大致的了解。对于统计性的数据,最好首先看看数据是如何分布,并把分布图示化,可以帮助我们确定后续的分析策略。现在,以R中著名的iris数据为例来计算其中一组数据的分布情况。

> data(iris)
> names(iris)
[1] “Sepal.Length” “Sepal.Width”  “Petal.Length” “Petal.Width” 
[5] “Species”
> length(iris$Sepal.Length)
[1] 150
1. 最简单的办法:hist
hist可以很直接的看到各组数据的Frequency或者Density分布情况,计算Frequency或者Density依据参数而定,比较粗糙。
> hist(iris$Sepal.Length)

572d4a6cgdbf46aec46d0&690

#通过breaks参数可以设置计算分布的数据区间

> hist(iris$Sepal.Length,breaks=seq(4,8,by=1))
572d4a6cgdbf46af52040&690
2. 可选的办法:density
查看density的帮助文档,可以发现函数density计算的是数据的核心密度(kernal density)分布,大多数时候该函数并非我们想要的。但是有些时候,density可以帮助我们计算数据的密度分布,计算结果是continuous的,图形化的结果也是continuous的曲线。density的计算可以通过bw参数(bandwidth)来控制,bw参数最直观的影响就是曲线的平滑性。默认的bw是通过函数bw.nrd0()计算得出,也可以手动设置。
> plot(density(iris$Sepal.Length))
572d4a6cgdbf46b0e253f&690
#改变bw参数来改变density的结果
> plot(density(iris$Sepal.Length,bw=0.2))
572d4a6cgdbf46b03fce6&690
3. 计算频度分布并用barplot作图
我经常用的办法,比较繁琐一些,但是感觉图形化的结果也更美观。首先用cut和table计算数据的频数分布,在用barplot作图。table函数计算的是每个数据在数据集中出现的次数,但是无法计算数据区间内的数据频数分布,需要用cut辅助。
> summary(iris$Sepal.Length)#看数据的分布区间
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.300   5.100   5.800   5.843   6.400   7.900 
> m<-seq(4,8,by=1)#设置一个区间范围
> table(cut(iris$Sepal.Length,m))#计算各个区间的频数
(4,5] (5,6] (6,7] (7,8] 
   32    57    49    12 
barplot(table(cut(iris$Sepal.Length,m)))#作图
572d4a6cgdbf49080d355&690
>barplot(table(cut(iris$Sepal.Length,seq(4,8,by=0.1))))#更详细的频数分布
572d4a6cgdbf4906c0bf9&690
>plot(table(cut(prot$V1,m)),type=”b”) #有的时候可以画成线图(更具数据决定)
拓展:
R语言中cut的功能:将数字变量如数组按给定区间[分段向量]进行分割;
用法:
cut(数据源,分段向量),例如:
cut(mydata$Age,c(-Inf,0,18,24,34,44,54,64,Inf))
 所以方法3中还可以自定义区间如:table(cut(data$V1,c(0,1,5,10,50,100,Inf)))

尊重他人劳动成果,转载请注明出处:Bluesky's blog » [转]在R中统计数据的频数或者密度分布并图形化

分享到:更多 ()

相关推荐

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #0
    杨李

    dadsd

    admin7年前 (2016-07-20)回复