R(13):第三章:3.2数据的分布

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/82715075

《统计建模与R软件》薛毅

第3章 数据描述性分析

3.2 数据的分布

总结:绘制图形语法,直方图hist(),密度估计函数density(),绘图需配合plot()绘图,例如:plot(density(w), col=“blue”),茎叶图stem(),

3.2.2 直方图、经验分布图与QQ图

1. 直方图

直方图(histogram),将数据取值的范围分成若干区间(一般是等间隔的),在等间隔的情况下,每个区间长度称为组距。
R语言中,用函数hist()画出样本的直方图:
hist(x, breaks=“Sturges”, freq=NULL, probability=!freq, include.lowest=TRUE, right=TRUE, density=NULL, angle=45, col=NULL, border=NULL, main=paste(“Histogram of”, xname), xlim=range(breaks), ylim=NULL, xlab=xname, ylab, axes=TRUE, plot=TRUE, labels=FLASE, nclass=NULL, …)
其中x是由样本构成的向量。breaks规定直方图的组距:
freq是逻辑变量,col表示直方图中填充的颜色。

2. 核密度估计函数

核密度估计(kernel density estimate)函数density(),其目的是用已知样本估计密度,具体函数为:
density(x, bw=“nrd0”, adjust=1, kernel=c(“gaussian”, “epanechnikov”, “rectangular”, “triangular”, “biweight”, “cosine”, “optcosine”), window=kenrnel, width, give.Rken=FALSE, n=512, from, to, cut=3, na.rm=FLASE)
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> hist(w, freq=FALSE)#纵轴显示密度
这里写图片描述
> hist(w, freq=TRUE)#纵轴显示频率
> plot(density(w), col="blue")#绘制密度分布图
这里写图片描述

3. 经验分布

若要看总体分布函数F(x),可用经验分布函数(empirical distribution function)作估计。用函数ecdf()绘制样本的经验分布函数,其用法为:
ecdf(x)
plot(x, …, ylab=“Fn(x)”, verticals=FLASE, col.01line=“gray70”)
其中,在函数ecdf()中的x是由观察值得到的数值型向量,而在函数plot()中的x是由函数ecdf()生成的向量,verticals是逻辑变量,当verticals=TRUE是表示画竖线;(FLASE,默认值)否则不画竖线。
> plot(ecdf(w), verticals=TRUE, do.p=FALSE)
这里写图片描述
其中do.p是逻辑变量,当do.p=FALSE时表示不画点处的记号;否则画记号。

4. QQ图

3.2.3 茎叶图、箱线图及五数总括

1. 茎叶图

与直方图比较,茎叶图更能细致地看出数据分布地结构。
R语言中,用stem()函数作茎叶图,其命令如下:
> x <- c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 92, 100)
> stem(x)
The decimal point is 1 digit(s) to the right of the |
2 | 5
3 |
4 | 5
5 | 045
6 | 148
7 | 25589
8 | 1344456667999
9 | 012
10 | 0
最终的绘图结果是, 竖线前面是整数部分,竖线后面是零头部分。
9 | 012表示,90,91,92,3 | 表示数值集合中,没有30到39之间的数出现。

2. 箱线图

boxplot()是绘制箱线图的函数,例如:
> boxplot(x)
这里写图片描述
在箱线图中,上(Q3)下(Q1)四分位数分别确定出中间箱体的顶部和底部。箱体中间的粗线是中位数(me)所在的位置。由箱体向上下伸出的垂直部分称为“触须”,表示数据的分布范围,最远点为1.5倍四分位数间距。超出此范围的点称为异常值点,异常值点用“o”号表示。

箱线图也可以自己设定绘图的形状
boxplot(x, …, range=1.5, width=NULL, varwidth=FLASE, notch=FLASE, outline=TRUE, names, plot=TRUE, border=par(“fg”), col=NULL, log="", pars=list(boxwex=0.8, staplewex=0.5, outwex=0.5), horizontal=FLASE, add=FALSE, at=NULL)
其中x是由数据构成的数值型向量,或者是列表,或者是数据框, 可以是一组数据,也可以是单组数据;range是“触须”的范围(默认值为1.5);notch是逻辑变量,当notch=TRUE(默认值为FALSE)时,画出的箱线图带有切口;outline时逻辑变量,当outline=FALSE(默认值为TRUE)时,不标明异常值点;col时颜色变量;horizontal=TRUE(默认值为FLASE)时,将把箱线图绘制成水平状;add时逻辑变量,当add=TRUE时,在原图上画图,否则(默认值为FLASE)替换上一张图。
可以用boxplot()函数作两样本的均值检验,考查两个样本的均值是否相同。
> A <- c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
> B <- c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97)
> boxplot(A, B, notch=T, names=c('A','B'), col=c(2,3))
绘制箱线图
从图形可以看出,第一组均值高于第二组均值。
由于使用了参数notch=T,画出的箱线图带有切口,col=x(2,3),所以关于A的箱线图是红色(2表示红色),关于B的箱线图是绿色(3表示绿色),也可以将参数写成col=c(‘red’, ‘green’)。

3. 五数总括

最小值min()、下四分位数quantile(x, 1/4)、中位数median()、上四分位数quantile(x, 3/4)、最大值max()。
这5个数称为样本的数据的五数总括。
函数fivenum()用来计算样本的五数总括,使用格式为:
fivenum(x, na.rm=TRUE)
其中x是样本数据;na.rm是逻辑变量,当na.rm=TRUE(默认值)时,在计算五数总括之前,所有的NA和NAN数据将被去掉。
例如:
> x <- c(25, 45, 50, 54, 55, 61, 64, 72, 75, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 91, 92, 100)
> fivenum(x)
[1] 25.0 73.5 84.0 88.0 100.0
> median(x)
[1] 84
> quantile(x, 3/4)
75%
88
> quantile(x, 1/4)
25%
73.5
> min(x)
[1] 25
> max(x)
[1] 100

3.2.4 正态性检验与分布拟合检验

在总体满足某种类型的分布时,配一条适合于总体的概率尼姆曲线或总体分布函数曲线。然而,所配曲线是否合适,则需要进行统计检验。这里介绍两种检验方法,正态分布检验和分布函数的拟合检验。

1.正态性W检验方法

利用Shapiro-Wilk(夏皮罗-威尔克)W统计量作正态性检验,因此称这种检验方法为W检验方法。
在R语言中,函数shapiro.test()提供W统计量和相应的p值,当p值小于某个显著性水平(比如0.05)时,则认为样本不是来自正态分布的总体;否则认为样本是来自正态分布的总体。
函数shapiro.test()的使用格式为:
shapiro.test(x),其中x是由数据构成的向量,并且向量长度在3-5000之间。
例如:
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> shapiro.test(w)
Shapiro-Wilk normality test
data: w
W = 0.96862, p-value = 0.8371
得出p值为0.8371>0.05,因此,认为样本来自正态分布的总体,与QQ图得到的结论相同。
> a <- runif(100, min=2, max=4)#作用是产生100个随机数,最小是2,最大是4
> shapiro.test(a)
Shapiro-Wilk normality test
data: a
W = 0.94609, p-value = 0.0004626
p值为0.0004626<0.05,认为样本不是来自正态分布的总体,这是来自均匀分布的随机数。

2.经验分布的Kolmogorov-Smirnov检验方法

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/82715075