R语言统计与绘图:绘制QQ图 |
您所在的位置:网站首页 › r语言qqline › 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.998279sd(tip) # 计算tip标准差# [1] 1.383638newtip = (tip-2.998)/1.384 # 创建新变量newtipplot(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. 1st Qu. Median Mean 3rd Qu. Max. # 1.000 2.000 2.900 2.998 3.562 10.000summary()函数会计算出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.000 1.500 2.000 2.000 2.476 2.900 3.016 3.480 4.000 5.000 10.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 = "快速绘制QQ plot", # 图形标题 col = "blue", # 设置颜色 ylab = "tip quantiles") # 设置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著 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |