-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path01-intro.Rmd
More file actions
438 lines (350 loc) · 19.8 KB
/
01-intro.Rmd
File metadata and controls
438 lines (350 loc) · 19.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
# 第二章 计量资料的统计描述
日期: 2020-11-10
作者:wxhyihuan
## 描述统计
描述统计学(广义上的描述统计学,Descriptive statistics)是统计学的一个分支,旨在概括、描述和呈现一系列值或数据集(比如对单样本的分析)。
由于难以识别数据中的任何模式,没有任何准备或没有任何汇总度量的长系列值通常无法提供信息。
描述统计通常是统计分析的第一步,也是统计分析的重要组成部分。它允许通过检测潜在的异常值(即似乎与其他数据分离的数据点)、
收集或编码错误来检查数据的质量。它还有助于“理解”数据,如果表述得当,描述性统计是进一步分析的一个很好的起点。
位置与离散度量是两种不同的总结数据的测量方法。其中一些给出了关于数据位置的理解,另一些给出了关于数据分散性的理解。
在实践中,这两种度量方法经常一起使用,以便以最简洁和完整的方式总结数据。
位置度量允许查看数据位于“何处”,围绕哪个值。换句话说,位置度量可了解什么是总体趋势,即数据整体的“位置”。
它主要包括:*平均值,中位数,四分位数,第三、四分位数,众数,最大值,最小值等*。
常见的离散度量,它有助于了解离散度和数据的可变性(在何种程度上分布被压缩或拉伸):*范围,标准偏差,方差,四分位间距,变异系数*。
## 测试数据
```{r tab1, tidy=FALSE, echo=FALSE}
RBC<-read.table("ExampleData/02-01.txt",sep="\t")
opts <- options(knitr.kable.NA = "")
knitr::kable(
RBC, caption = '某医院用随机抽样的方法检测了138名正常成年女子的红细胞数目(RBC, $*10^{12}/L$),其测量结果如下表:',
booktabs = TRUE,align='c')
```
## 数据输入和频率统计
### 读取数据,并将数据转换成单列形式
```{r , tidy=FALSE}
RBC<-read.table("ExampleData/02-01.txt",sep="\t")
RBC<-as.matrix(RBC)
RBC_q <- c()
for (i in seq(1:nrow(RBC))){
RBC_q <- c(RBC_q, RBC[i,])
}
RBC_v<-as.vector(RBC_q)
RBC_v<-na.omit(RBC_v)
```
### 计算极差, max()/min()/range()
```r
#range(RBC_v) 返回最小值和最大值
rge<-max(RBC_v)-min(RBC_v)
rge
## [1] 2.39
```
### 确定组段数和组距
可以参考PAST软件中的the zero-stage rule of Wand 1997方式计算分段“最佳”个数。$h=3.49min(s,IQ/1.349)n^{1/3}$,其中s是样本标准差,IQ是四分位数范围。
```r
#sd()计算标准差,quantile()计算分位数
s<-sd(RBC_v)
## [1] 0.4457298
quan<-quantile(RBC_v,c(0.25,0.75))
iq<-quan[2]-quan[1]
## 0.565
h<-3.49*min(s,iq/1.349)*(length(RBC_v)^(1/3))
## 7.553617
h<-ceiling(h)
## 8
i<-rge/h
```
### 计算频数分布
根据计算的短组段数(h=8),极差值(rge=2.39))和组距(i=rge/h=0.3164)计算各组段的频数。
```r
breaks = seq(min(RBC_v), max(RBC_v), length.out = 8)
RBC_v.cut = cut(RBC_v, breaks, right=T,include.lowest=T)
RBC_v.freq = table(RBC_v.cut)
## [3.07,3.41) [3.41,3.75) [3.75,4.09) [4.09,4.44) [4.44,4.78)
## 4 17 29 51 23
## [4.78,5.12) [5.12,5.46)
## 9 4
hist(RBC_v, right=FALSE,
breaks = breaks, labels =TRUE,
freq = TRUE, col = "#A8D6FF",
border = "white", ylim=c(0, max(RBC_v.freq)))
hist(RBC_v, right=FALSE,
breaks = breaks, labels =TRUE,
freq = FALSE, col = "#A8D6FF",
border = "white", ylim=c(0,1))
lines(density(RBC_v),col="red",lwd=2)
```
```{r histgrah, echo=FALSE, out.width="49%",out.height="49%",fig.show='hold', fig.cap ='红细胞含量的频数分布',fig.align='center' }
knitr::include_graphics(c('image/a1e3904af844b14d3b57d1448690aea.png','image/5ba23e818daa7c71b147707f9b5dfd6.png'))
```
## 描述性统计的度量
### 算术平均值
算术均数简称均值(mean),用于反映组呈对称分布的变量值在数量上的平均水平。
```r
mean(RBC_v)
## [1] 4.227029
```
### 几何平均值
几何均数(geometric mean)可用于反映一组经 **对数转换** 后呈对称分布的变量值在数量上的平均水平。
```r
exp(mean(log(RBC_v)))
## [1] 4.203676
```
### 中位数与百分位数
中位数(median)是将n个变量值从小到大排列,位置居于中间的那个数。当为奇数时取位次居中 的变量值,当n为偶数时取位次居中的两个变量值的均数。
它适用于各种分布类型的资料,尤其是偏态分 布资料和一端或两端无确切数值的资料。
```r
#中位数(=50百分位)
median(RBC_v)
quantile(RBC_v, 0.5)
## 4.23
#百分位
quantile(RBC_v, c(0.1, 0.25, 0.5,0.75,0.9))
## 10% 25% 50% 75% 90%
##3.6670 3.9625 4.2300 4.5275 4.7750
```
### 极差
极差即一组变量值的最大值与最小值之差。
```r
max(RBC_v)-min(RBC_v)
range(RBC_v)
```
### 四分位间距
四分位数(quartile)是把全部变量值分为四部分的分位数,即第1四分位数(Q .=Ps)、第2四分位数 M=P)、第3四分位数 (Qu=Ps)。 四分位数间距(quartile range)是由第3四分位数和第1四分位数相减行得,
记为 R.它般和中位数起描述偏态分们资料的分布特征
```r
#四分位间距interquartile range
IQR(RBC_v)
## 0.565
quantile(RBC_v, 0.75)-quantile(RBC_v, 0.25)
## 0.565
```
### 方差与标准差
方差(variance,var)也称均方差(mean Square deviation),反映一组数据的平均离散水平。
标准差(standard deviation,sd)是方差的正平方根,其单位与原变量值的单位相同。
```r
#计算标准差
sd(RBC_v)
## [1] 0.4457298
#计算方差
var(RBC_v)
## [1] 0.1986751
sd(RBC_v)^2
(sum((RBC_v-mean(RBC_v))^2))/(length(RBC_v)-1)
## 0.1986751
```
### 变异系数
变异系数(Cefficient of variation,CV),当进行两个或多个资料变异程度的比较时,如果度量单位与平均数相同,
可以直接利用标准差来比较。如果单位和(或)平均数不同时,比较其变异程度就不能采用标准差,
而需采用标准差与平均数的比值(相对值)来比较。标准差与平均数的比值称为变异系数,。
变异系数可以消除单位和(或)平均数不同对两个或多个资料变异程度比较的影响。
```r
sd(RBC_v)/mean(RBC_v)*100
## [1] 10.54475
raster::cv(RBC_v)
## [1] 10.54475
```
### 其他的描述统计
#### Summary
R语言中,可以使用summary()来计算最小,第1四分位数,中位数,平均值,第3,4分位数和最大值的数据集的所有数值变量。
```r
dat <- iris
summary(dat)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
## Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
```
#### 众数
众数(Mode)是指在统计分布上具有明显集中趋势点的数值,代表数据的一般水平。 也是一组数据中出现次数最多的数值,有时众数在一组数中有好几个。
可以利用table()和sort()来寻找数据集中的众数。
```r
# 计算每个元素的出现的次数
RBC_t <- table(RBC_v)
# 对计算的次数进行排序
sort(RBC_t, decreasing = TRUE)
## 4.26 4.36 3.96 4.02 4.2 3.76 3.97 4.01 4.16 4.21 4.23 4.28 4.29 4.56 4.61 4.76
## 7 5 4 4 4 3 3 3 3 3 3 3 3 3 3 3
## 3.59 3.64 3.67 3.72 3.83 3.89 4.03 4.04 4.12 4.25 4.32 4.42 4.57 4.66 4.69 3.07
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
## 3.21 3.27 3.39 3.42 3.52 3.6 3.61 3.62 3.66 3.68 3.69 3.71 3.77 3.79 3.91 3.98
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 4.13 4.14 4.17 4.18 4.19 4.24 4.27 4.3 4.31 4.33 4.34 4.41 4.47 4.49 4.54 4.55
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 4.63 4.68 4.71 4.75 4.81 4.83 4.89 4.92 4.95 4.98 5.01 5.03 5.11 5.12 5.23 5.24
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 5.28 5.46
## 1 1
#或者结合 which()函数确定众数和其次数
RBC_t[which(((RBC_t==max(RBC_t))==T))]
## 4.26
## 7
```
## 正态分布和标准正态分布
[正态分布](https://zh.wikipedia.org/zh-cn/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83)(Normal distribution)又名高斯分布(Gaussian distribution),是一个非常常见的连续概率分布。
**正态分布**在统计学上十分重要,经常用在自然和社会科学来代表一个不明的随机变量。
可以说,弄懂正态分布是灵活运用统计学中各种假设检验方法、理解p值,均数置信区间的前提。
R包含有很丰富的正态分布相关的[函数功能](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/Normal.html),
比如概率密度函数dnorm(),概率累积分布函数pnorm(),正态分位函数qnorm()和用来生成特定正态分布数据序列的函数rnorm(),
以及检测数据时候符合正态分布的方法,这里主要做下面一些介绍。
### 概率密度函数dnorm()
[概率密度函数(Probability density function)](https://zh.wikipedia.org/zh-cn/%E6%A9%9F%E7%8E%87%E5%AF%86%E5%BA%A6%E5%87%BD%E6%95%B8),R中即为dnorm(),
它可以给出了指定均值和标准差下每个点的**概率分布的高度**,
越高就代表着这个点/区间的概率越密集(大)。概率密度函数有时也被称为概率分布函数,但这种称法可能会和累积分布函数pnorm()混淆。
```{r dnorm, fig.cap ='概率密度函数示例', out.width="49%", out.height="49%", fig.align='center'}
#在-10~10区间等分的 100个 数据集x
x <- seq(-10, 10, by = .1)
#创建一个均值是2.5,标准差是0.5正态分布 y
y <- dnorm(x, mean = 2.5, sd = 0.5)
#将 y 中的落在x数据集上的数据画出来
plot(x,y,col="red",pch=20)
```
### 概率累积分布函数pnorm()
[累积分布函数(Cumulative Distribution Function)](https://zh.wikipedia.org/wiki/%E7%B4%AF%E7%A7%AF%E5%88%86%E5%B8%83%E5%87%BD%E6%95%B0),R中即为pnorm(),
又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布,它给出一个正态分布中小于一个给定数字的累计概率(即指定定点的左边范围的曲线面积)。
```{r pnorm, fig.cap ='累积分布函数示例', out.width="49%", out.height="49%", fig.align='center'}
#在-10~10区间等分的 40个 数据集x
x <- seq(-10, 10, by = .5)
#创建一个均值是2.5,标准差是0.5正态分布 y
y <- pnorm(x, mean = 2.5, sd = 0.5)
#将 y 中的落在x数据集上的累计概率画出来
plot(x,y,col="red",pch=20)
```
### 正态分位函数qnorm()
正态分位函数,R中即为qnorm(),它可以给出一个累积分布概率达到指定值的数字。
```{r qnorm, fig.cap ='正态分位函数示例', out.width="49%", out.height="49%", fig.align='center'}
#在0~1区间等分的 50个 数据集x
x <- x <- seq(0, 1, by = 0.02)
#创建一个均值是2,标准差是1正态分布 y
y <- qnorm(x, mean = 2, sd = 1)
#将 y 中的落在x数据集上的数字画出来
plot(x,y,col="red",pch=20)
```
### 生成正态分布函数rnorm()
rnorm()函数用于生成符合指定均值和标准差的分布为正态分布的随机数,默认是标准正态分布,即均值为0,标准差1的正态分布。
```{r rnorm, fig.cap ='随机正态分布数据示例', out.width="49%", out.height="49%", fig.align='center'}
#设置随机种子,便于重复后续的数据选取
set.seed(50)
#在标准正态分布中随机选取50个数据
y <- rnorm(50)
#对选区的数据绘制频率分布图
hist(y,col="#A8D6FF",labels =TRUE)
```
## 正态分布检验
许多计量资料的分析方法要求数据分布是正态或近似正态,因此对原始独立测定数据进行正态性检验是十分必要的。通过绘制数据的频数分布直方图来定性地判断数据分布正态性。
以下正态检验的资料整理自:
1. [用R语言做正态分布检验](https://blog.csdn.net/u013524655/article/details/41053105?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-7&spm=1001.2101.3001.4242)
2. [How to test the normality assumption](https://www.statsandr.com/blog/do-my-data-follow-a-normal-distribution-a-note-on-the-most-widely-used-distribution-and-how-to-test-for-normality-in-r/)
正态性检验主要有三类方法:
1. 计算综合统计量
如动差法、夏皮罗-威尔克Shapiro-Wilk 法(W 检验) 、达戈斯提诺D′Agostino 法(D 检验) 、Shapiro-Francia 法(W′检验)。
2. 正态分布的拟合优度检验
如皮尔逊χ2 检验 、对数似然比检验 、柯尔莫哥洛夫Kolmogorov-Smirov 法检验。
3. 图示法(正态概率图Normal Probability plot)
如分位数图(Quantile Quantileplot ,简称QQ 图) 、百分位数(Percent Percent plot ,简称PP 图) 和稳定化概率图(Stablized Probability plot ,
简称SP 图) 等。
统计软件中常用的正态性检验方法
1. 用偏态系数和峰态系数检验数据正态性
偏态系数Sk,它用于检验不对称性;峰态系数Ku,它用于检验峰态。 S k= 0, K u= 0 时, 分布呈正态, S k> 0 时, 分布呈正偏态,S k < 0 时, 分布呈负偏态。适用条件:样本含量应大于200
2. 用夏皮罗-威尔克(Shapiro-Wilk)法检验数据正态性
即W检验,1965 年提出,适用于样本含量n ≤50 时的正态性检;。
3. 用达戈斯提诺(D′Agostino)法检验数据正态性
即D检验,1971提出,正态性D检验该方法效率高,是比较精确的正态检验法。
4. Shapiro-Francia 法
即W′检验,于1972 年提出,适用于50 < n < 100 时的正态性检验。
5. QQ图或PP图
散点聚集在固定直线的周围,可以认为数据资料近似服从正态分布
**常用的规则**:
**SPSS 规定**:当样本含量3 ≤n ≤5000 时,结果以Shapiro - Wilk (W 检验) 为难,当样本含量n > 5000 结果以Kolmogorov - Smirnov 为准。
**SAS 规定**:当样本含量n ≤2000 时,结果以Shapiro - Wilk (W 检验) 为准,当样本含量n >2000 时,结果以Kolmogorov - Smirnov (D 检验) 为准。
参考:
刘庆武,胡志艳,如何用SPSS、SAS 统计软件进行正态性检验,湘南学院学报(自然科学版),2005
朱红兵,何丽娟,在SPSS10.0 中进行数据资料正态性检验的方法,首都体育学院学报,2004
### 直方图
直方图显示了分布的分布范围和形状,因此它是评估正态性的一个很好的起点。本文开始测试的红细胞浓度遵循正态曲线,因此数据似乎遵循正态分布。
```r
hist(RBC_v, right=FALSE,
breaks = breaks, labels =TRUE,
freq = FALSE, col = "#A8D6FF",
border = "white", ylim=c(0,1))
lines(density(RBC_v),col="red",lwd=2)
```
```{r histtest, echo=FALSE, out.width="49%",out.height="49%",fig.show='hold', fig.cap ='正态分布检验与直方图',fig.align='center' }
knitr::include_graphics('image/5ba23e818daa7c71b147707f9b5dfd6.png')
```
### 概率密度图
概率密度图图提供了关于数据是否服从正态分布的直观判断。它们类似于直方图,因为它们也允许分析分布的传播和形状。但是,它们是直方图的平滑版本。
```r
maintxt<-paste("N=",length(RBC_v),",","Mean=",round(mean(RBC_v),3),",","Sd=",round(s,3))
plot(density(RBC_v),col="red",lwd=2,main = maintxt)
```
```{r densitytest, echo=FALSE, out.width="49%",out.height="49%",fig.show='hold', fig.cap ='正态分布检验与密度图',fig.align='center' }
knitr::include_graphics('image/Densitytest.png')
```
### QQ-plot
有的数据从直方图和密度图很难检验正态性,因此建议用qq图来确证这些图。QQ-plot,又称正态图。在QQ-plots中,
我们只需要确定数据点是否沿着直线(有时也称为Henry’s line),而不是查看数据的扩散情况(如直方图和密度图)。
如果点靠近参考线并且在置信区间内,则认为满足了正态性假设。点与参考线之间的偏差越大,偏离置信区间越远,
满足正态条件的可能性就越小。这12个成年人的身高似乎服从正态分布,因为所有的点都在置信区间内。
如果qq图所示的非正态分布(系统地偏离参考线)时,通常第一步是对数据进行对数变换,
并重新检查对数变换后的数据是否正态分布。可以应用log()函数进行对数变换。
另外,qq图也是评估回归分析的残差是否服从正态分布的一种方便的方法。
```{r qqPlottest1,results="hide",message=FALSE, warning=FALSE, echo=FALSE, out.width="49%",out.height="49%", fig.cap ='难以判断正态分布的密度图',fig.align='center'}
set.seed(42)
dat_hist <- data.frame(
value = rnorm(12, mean = 165, sd = 5)
)
plot(density(dat_hist$value),lwd=2,col="blue",main=" ")
```
```{r qqplot,results="hide",message=FALSE, warning=FALSE, out.width="49%",out.height="49%", fig.cap ='正态分布检验与QQ-plot (1)', fig.align='center'}
#qqPlot是car包中的函数,因此需要载入包,可以使用groups参数,同时对多组数据分别处理
library(car)
set.seed(42)
dat_hist <- data.frame( value = rnorm(12, mean = 165, sd = 5))
qqPlot(dat_hist$value)
```
```r
library(car)
qqPlot(as.numeric(RBC_v),ylab="RBC", main="RBC QQ-plot")
```
```{r qqplot1, echo=FALSE, out.width="49%",out.height="49%", fig.cap ='正态分布检验与QQ-plot (2)',fig.align='center'}
knitr::include_graphics('image/qqPlot.png')
```
### 正态检验
上述3种方法是对常态的目视检查。然而,目测有时可能不可靠,因此也有可能通过统计检验正式检验数据是否服从正态分布。
这些正态性检验将数据的分布与正态分布进行比较,以评估观察结果是否显示出偏离正态性的重要偏差。
最常用的两种正态性检验是Shapiro-Wilk检验(K检验)和Kolmogorov-Smirnov检验(D检验)。两种测试都有相同的假设,即:
***H0*** : 数据服从正态分布
***H1*** : 数据不服从正态分布
正态性检验推荐使用Shapiro-Wilk检验,因为它比Kolmogorov-Smirnov检验提供更好的效用。
在R中,正态性的Shapiro-Wilk检验可以通过函数shapiro.test()进行。
```r
set.seed(42)
dat_hist <- data.frame( value = rnorm(12, mean = 165, sd = 5))
shapiro.test(dat_hist$value)
## Shapiro-Wilk normality test
##
## data: dat_hist$value
## W = 0.9, p-value = 0.5
```
从输出中,我们看到p-value>0.05意味着我们不拒绝数据服从正态分布的原假设。
该检验与qq图的方向相同,qq图与正态性没有显著偏差(因为所有点都在置信区间内)。
```r
shapiro.test(RBC_v)
## Shapiro-Wilk normality test
##
## data: as.numeric(RBC_v)
## W = 1, p-value = 0.4
```
对RBC数据同样的结果。
注意的是,在实践中,正态检验通常被认为过于保守,因为对于大样本(n>50),对正态条件的一个
小偏差可能会导致违反正态判断的条件。由于正态性检验是一种假设检验,所以随着样本量的增加,其检测较小差
异的能力也会增加。因此,随着观测数的增加,Shapiro-Wilk检验变得非常敏感,甚至对正态性的一个
微小偏差也非常敏感。所以,根据正态性检验,数据不服从正态分布,尽管偏离正态分布的情况可以忽略不计,但数据
实际上服从正态分布。因此,通常情况下,正态性条件的验证是基于本文所介绍的所有方法的组合,即目视检验
(使用直方图和q-q图)和正式化检验(例如使用shapio-wilk检验)。
R中还有其他一些正态检验的方法,比如 ks.test() 函数实现Kolmogorov-Smirnov Test(D检验),
是对经验分布的拟合检验,检验的是经验分布函数和假设总体分布函数的差异,适应于大样本(n>5000)。
另外有一些package包含了丰富的检验函数,比如fBasics,nortest等。