1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > r语言做绘制精美pcoa图_R语言统计与绘图:绘制QQ图

r语言做绘制精美pcoa图_R语言统计与绘图:绘制QQ图

时间:2019-07-23 21:38:38

相关推荐

r语言做绘制精美pcoa图_R语言统计与绘图:绘制QQ图

QQ图一般用来比较两组数字的分布,比如两个变量或两个向量。

在国外,顾客习惯性会给服用人员小费,给多少小费是一个经常被讨论的话题,今天使用的数据集为reshape2包的tips数据集,用来演示QQ图的绘制。

先来看看这个数据集:

1.加载数据集

install.packages("reshape2")#安装包

library(reshape2)#加载包

attach(tips)#绑定数据集

head(tips)#查看数据集前6行

数据集中有7个变量,主要用到tip变量。

2. 绘制密度图

数据集中有个tip变量(小费),我们先来看看tip变量的分布,比如说绘制个密度图。

plot(density(tip),#绘制密度图

main="绘制tip变量的密度图",#添加标题

col="blue",#设置线的颜色

lwd=2)#设置线宽

从上图可以看出tip变量分布是不均匀的,图形右边有一条长长的尾巴,这表明,有些顾客给出的小费比较多,但大多数顾客的小费在2-4之间。

大多数统计分析方法都要求数据分布为正态分布,或接近正态分布。

为了演示tip变量分布与正态分布之间的差别,我们在同一画板上绘制图形。

具体操作:先使用rnorm()函数生成一组数字,这组数字命名为ran,然后绘制ran的密度图,并使用ploygon()函数绘制填充曲线,然后使用lines()函数在同一图上绘制tip变量的密度图。

ran=rnorm(1000000)#生成一组随机数字

plot(density(ran),#绘制ran密度图

main="tip密度图与正态分布之间的差异",#设置图像标题

xlim=c(-4,10))#设置坐标轴范围

polygon(density(ran),col="burlywood")#绘制填充曲线

lines(density(tip),#添加曲线

col="blue",#设置曲线颜色

lwd=2)#设置曲线宽度

如上图所示,显示的信息比前面更多,但是毕竟这两组数字的均值不一致,所以图形重叠的不多,我们可以通过设置相关参数,来创建一个新的tip变量。

tip变量可以简单的方法转化为平均值为0,标准差为1的新变量newtip。

mean(tip)#计算tip均值

#[1]2.998279

sd(tip)#计算tip标准差

#[1]1.383638

newtip=(tip-2.998)/1.384#创建新变量newtip

plot(density(ran),#绘制正态分布图形

ylim=c(0,.48),#设置y范围

main="newtip变量与正态分布差异",#设置图形

xlim=c(-4,8))#设置x范围

polygon(density(ran),#设置填充曲线

col="burlywood")#设置颜色

lines(density(newtip),#添加曲线

col="blue",#设置曲线颜色

lwd=2)#设置线宽

3. 绘制QQ图

还有其他方法也可以比较这两种分布,从而得到不同的图形。

首先计算下tip变量的摘要信息:

summary(tip)

#Min.1stQu.MedianMean3rdQu.Max.

#1.0002.0002.9002.9983.56210.000

summary()函数会计算出tip变量的四分位间距,我们还可以通过quantile()函数计算变量的分位数。

比如说下面这个变量qtip可以计算tip变量0-1,每隔0.1的分位数结果。

qtip=quantile(tip,seq(0,1,.1))

qtip

#0%10%20%30%40%50%60%70%80%90%100%

#1.0001.5002.0002.0002.4762.9003.0163.4804.0005.00010.000

我们可以将tip变量的分位数与ran变量的分位数进行绘图,来确定这两个变量分布的一致性,因此这种图形也叫做分位数图或者QQ图。

下面来绘制图形,代码如下:

qtip2=quantile(tip,seq(0,1,.005))#计算tip变量的分位数结果

qqplot(ran,qtip2,#绘制QQ图

main="QQ图",#设置图形标题

xlim=c(-3,3),#设置x范围

col="skyblue2")#设置颜色

qqline(qtip2,#设置参考线

col="burlywood",#设置颜色

lwd=2)#设置线宽

grid(lty="dotted",#设置网格

col="gray75")#设置颜色

如上图可以看出,即使tip变量中间大部分范围都接近于正态分布,但其两端仍相距甚远,这表明tip变量不接近正态分布,进行正态分布分析可能是不明智的。

如果你知道做了绘制QQ图的原理,那么你可以使用下面这个函数来快速制作QQ图,而不用创建分位数变量。

qqnorm(tip,#绘制图形的变量

main="快速绘制QQplot",#图形标题

col="blue",#设置颜色

ylab="tipquantiles")#设置y轴标签

qqline(tip,#设置参考线

col="burlywood",#设置颜色

lwd=2)#设置线宽

grid(lty="dotted",#设置网格

col="gray75")#设置颜色

4. 对数转换

如前所述,tip变量不是正态分布的,我们可以通过转换来是数据达到正态分布,比如说对数变换。

logtip=log10(tip)#设置对数转换

qqnorm(logtip,#绘图变量

main="log10(tip)的QQ图",

col="blue4")#设置颜色

qqline(logtip,#设置参考线

col="burlywood3",#设置颜色

lwd=2)#设置线宽

参考资料

Graphing Data with R,John Jay Hilfiger著既往专辑

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。