在获取数据,并且完成数据的清洗之后,首要的事就是对整个数据集进行探索性的研究,这个过程中会利用到各种描述性统计量和推断性统计量来初探变量间和变量内部的基本关系,本篇笔者便基于R,对一些常用的数据探索方法进行总结:

1.描述性统计量部分

1.1 计算描述性统计量的常规方法

summary()

summary()函数提供了最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计:

  1. > #挂载鸢尾花数据
  2. > data(iris)
  3. > #计算鸢尾花各变量的基本描述统计量
  4. > summary(iris)
  5. Sepal.Length Sepal.Width Petal.Length Petal.Width
  6. Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
  7. 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
  8. Median :5.800 Median :3.000 Median :4.350 Median :1.300
  9. Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
  10. 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
  11. Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
  12. Species
  13. setosa :50
  14. versicolor:50
  15. virginica :50

利用sapply()通过自编函数进行偏度峰度的计算:

  1. > #自定义偏度峰度计算函数
  2. > skew_kurt <- function(x,na.omit=FALSE){
  3. + if(na.omit)
  4. + x <- x[!is.na(x)]
  5. + m <- mean(x)
  6. + n <- length(x)
  7. + skew <- sum((x-mean(x))^3/sd(x)^3)/n
  8. + kurt <- sum((x-m)^4/sd(x)^4)/n-3
  9. + return(c(skew=skew,kurtosis=kurt))
  10. + }
  11. > #利用sapply将偏度峰度计算扩展到数据框型变量
  12. > sapply(iris[,-5],skew_kurt)
  13. Sepal.Length Sepal.Width Petal.Length Petal.Width
  14. skew 0.3086407 0.3126147 -0.2694109 -0.1009166
  15. kurtosis -0.6058125 0.1387047 -1.4168574 -1.3581792

Hmisc包中的describe()函数:

Hmisc包中的describe()函数可返回变量和观测的数量、缺失值和唯一值的数目、平均值、分位数,以及五个最大的值和五个最小的值:

  1. > library(Hmisc)
  2. > Hmisc::describe(iris)
  3. iris
  4.  
  5. 5 Variables 150 Observations
  6. -------------------------------------------------------------------------------
  7. Sepal.Length
  8. n missing distinct Info Mean Gmd .05 .10
  9. 150 0 35 0.998 5.843 0.9462 4.600 4.800
  10. .25 .50 .75 .90 .95
  11. 5.100 5.800 6.400 6.900 7.255
  12.  
  13. lowest : 4.3 4.4 4.5 4.6 4.7, highest: 7.3 7.4 7.6 7.7 7.9
  14. -------------------------------------------------------------------------------
  15. Sepal.Width
  16. n missing distinct Info Mean Gmd .05 .10
  17. 150 0 23 0.992 3.057 0.4872 2.345 2.500
  18. .25 .50 .75 .90 .95
  19. 2.800 3.000 3.300 3.610 3.800
  20.  
  21. lowest : 2.0 2.2 2.3 2.4 2.5, highest: 3.9 4.0 4.1 4.2 4.4
  22. -------------------------------------------------------------------------------
  23. Petal.Length
  24. n missing distinct Info Mean Gmd .05 .10
  25. 150 0 43 0.998 3.758 1.979 1.30 1.40
  26. .25 .50 .75 .90 .95
  27. 1.60 4.35 5.10 5.80 6.10
  28.  
  29. lowest : 1.0 1.1 1.2 1.3 1.4, highest: 6.3 6.4 6.6 6.7 6.9
  30. -------------------------------------------------------------------------------
  31. Petal.Width
  32. n missing distinct Info Mean Gmd .05 .10
  33. 150 0 22 0.99 1.199 0.8676 0.2 0.2
  34. .25 .50 .75 .90 .95
  35. 0.3 1.3 1.8 2.2 2.3
  36.  
  37. lowest : 0.1 0.2 0.3 0.4 0.5, highest: 2.1 2.2 2.3 2.4 2.5
  38. -------------------------------------------------------------------------------
  39. Species
  40. n missing distinct
  41. 150 0 3
  42.  
  43. Value setosa versicolor virginica
  44. Frequency 50 50 50
  45. Proportion 0.333 0.333 0.333
  46. -------------------------------------------------------------------------------

pastecs包中的stat.desc()函数计算描述性统计量:

stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95),其中x是一个数据框或 时间序列(非数值型的部分只会返回空值),若basic=TRUE(默认值),则计算x中所有变量的值、空值、缺失值的数量,以及最小值、最大值、值域,还有总和。若desc=TRUE(默认值),则计算中位数、平均数、平均数的标准误差、平均数置信度为95%的置信区间、方差、标准差以及变异系数。若norm=TRUE(非默认),则返回正态分布统计量,包括偏度和峰度(以及他们的统计显著程度)和Shapiro-Wilk(正态性检验)结果:

  1. > library(pastecs)
  2. > stat.desc(iris)
  3. Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  4. nbr.val 150.00000000 150.00000000 150.0000000 150.00000000 NA
  5. nbr.null 0.00000000 0.00000000 0.0000000 0.00000000 NA
  6. nbr.na 0.00000000 0.00000000 0.0000000 0.00000000 NA
  7. min 4.30000000 2.00000000 1.0000000 0.10000000 NA
  8. max 7.90000000 4.40000000 6.9000000 2.50000000 NA
  9. range 3.60000000 2.40000000 5.9000000 2.40000000 NA
  10. sum 876.50000000 458.60000000 563.7000000 179.90000000 NA
  11. median 5.80000000 3.00000000 4.3500000 1.30000000 NA
  12. mean 5.84333333 3.05733333 3.7580000 1.19933333 NA
  13. SE.mean 0.06761132 0.03558833 0.1441360 0.06223645 NA
  14. CI.mean.0.95 0.13360085 0.07032302 0.2848146 0.12298004 NA
  15. var 0.68569351 0.18997942 3.1162779 0.58100626 NA
  16. std.dev 0.82806613 0.43586628 1.7652982 0.76223767 NA
  17. coef.var 0.14171126 0.14256420 0.4697441 0.63555114 NA

psych包中的describe()计算描述性统计量:

在psych包中,可以通过describe()来计算非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位数、最小值、最大值、值域、偏度、峰度和平均值的标准误差(注意,此方法会将因子型变量当成数值型来计算):

  1. > library(psych)
  2. > psych::describe(iris)
  3. vars n mean sd median trimmed mad min max range skew
  4. Sepal.Length 1 150 5.84 0.83 5.80 5.81 1.04 4.3 7.9 3.6 0.31
  5. Sepal.Width 2 150 3.06 0.44 3.00 3.04 0.44 2.0 4.4 2.4 0.31
  6. Petal.Length 3 150 3.76 1.77 4.35 3.76 1.85 1.0 6.9 5.9 -0.27
  7. Petal.Width 4 150 1.20 0.76 1.30 1.18 1.04 0.1 2.5 2.4 -0.10
  8. Species* 5 150 2.00 0.82 2.00 2.00 1.48 1.0 3.0 2.0 0.00
  9. kurtosis se
  10. Sepal.Length -0.61 0.07
  11. Sepal.Width 0.14 0.04
  12. Petal.Length -1.42 0.14
  13. Petal.Width -1.36 0.06
  14. Species* -1.52 0.07

1.2 分组计算描述性统计量

在比较多组个体或观测时,关注的焦点经常是各组的描述性统计信息,而不是样本整体的描述性统计信息。同样地,在R中完成这个任务有若干种方法:

利用aggregate()来对数据数组求描述性统计量:

aggregate(data,by,fun),其中data为待考察的数据所在的数据框,至少有两列,其中一列为分组依据的类别型数据,即by,fun为对分组后数据采取的运算,且fun只能为返回单值的简单函数(很遗憾):

  1. > aggregate(iris[,1:4],by=list(Species=iris$Species),mean)
  2. Species Sepal.Length Sepal.Width Petal.Length Petal.Width
  3. 1 setosa 5.006 3.428 1.462 0.246
  4. 2 versicolor 5.936 2.770 4.260 1.326
  5. 3 virginica 6.588 2.974 5.552 2.026
  6. > aggregate(iris[,1:4],by=list(Species=iris$Species),sd)
  7. Species Sepal.Length Sepal.Width Petal.Length Petal.Width
  8. 1 setosa 0.3524897 0.3790644 0.1736640 0.1053856
  9. 2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527
  10. 3 virginica 0.6358796 0.3224966 0.5518947 0.2746501

利用by()函数来计算更复杂的分组数据描述性统计量:

by(data,INDICES,FUN),其中data为输入的数据框,INDICES是一个因子型或几个因子型变量组成的list,是分组依据,FUN是任意函数(包括自编函数):

  1. > by(iris[,-5],iris$Species,psych::describe)
  2. iris$Species: setosa
  3. vars n mean sd median trimmed mad min max range skew kurtosis
  4. Sepal.Length 1 50 5.01 0.35 5.0 5.00 0.30 4.3 5.8 1.5 0.11 -0.45
  5. Sepal.Width 2 50 3.43 0.38 3.4 3.42 0.37 2.3 4.4 2.1 0.04 0.60
  6. Petal.Length 3 50 1.46 0.17 1.5 1.46 0.15 1.0 1.9 0.9 0.10 0.65
  7. Petal.Width 4 50 0.25 0.11 0.2 0.24 0.00 0.1 0.6 0.5 1.18 1.26
  8. se
  9. Sepal.Length 0.05
  10. Sepal.Width 0.05
  11. Petal.Length 0.02
  12. Petal.Width 0.01
  13. -----------------------------------------------------------
  14. iris$Species: versicolor
  15. vars n mean sd median trimmed mad min max range skew
  16. Sepal.Length 1 50 5.94 0.52 5.90 5.94 0.52 4.9 7.0 2.1 0.10
  17. Sepal.Width 2 50 2.77 0.31 2.80 2.78 0.30 2.0 3.4 1.4 -0.34
  18. Petal.Length 3 50 4.26 0.47 4.35 4.29 0.52 3.0 5.1 2.1 -0.57
  19. Petal.Width 4 50 1.33 0.20 1.30 1.32 0.22 1.0 1.8 0.8 -0.03
  20. kurtosis se
  21. Sepal.Length -0.69 0.07
  22. Sepal.Width -0.55 0.04
  23. Petal.Length -0.19 0.07
  24. Petal.Width -0.59 0.03
  25. -----------------------------------------------------------
  26. iris$Species: virginica
  27. vars n mean sd median trimmed mad min max range skew
  28. Sepal.Length 1 50 6.59 0.64 6.50 6.57 0.59 4.9 7.9 3.0 0.11
  29. Sepal.Width 2 50 2.97 0.32 3.00 2.96 0.30 2.2 3.8 1.6 0.34
  30. Petal.Length 3 50 5.55 0.55 5.55 5.51 0.67 4.5 6.9 2.4 0.52
  31. Petal.Width 4 50 2.03 0.27 2.00 2.03 0.30 1.4 2.5 1.1 -0.12
  32. kurtosis se
  33. Sepal.Length -0.20 0.09
  34. Sepal.Width 0.38 0.05
  35. Petal.Length -0.37 0.08
  36. Petal.Width -0.75 0.04
  37. >
  38. > #前面定义过的偏度峰度自编函数作为sapply的参数跟在FUN位置的后面
  39. > by(iris[,-5],iris$Species,sapply,skew_kurt)
  40. iris$Species: setosa
  41. Sepal.Length Sepal.Width Petal.Length Petal.Width
  42. skew 0.1129778 0.03872946 0.1000954 1.179633
  43. kurtosis -0.4508724 0.59595073 0.6539303 1.258718
  44. -----------------------------------------------------------
  45. iris$Species: versicolor
  46. Sepal.Length Sepal.Width Petal.Length Petal.Width
  47. skew 0.09913926 -0.3413644 -0.5706024 -0.02933377
  48. kurtosis -0.69391378 -0.5493203 -0.1902555 -0.58731442
  49. -----------------------------------------------------------
  50. iris$Species: virginica
  51. Sepal.Length Sepal.Width Petal.Length Petal.Width
  52. skew 0.1110286 0.3442849 0.5169175 -0.1218119
  53. kurtosis -0.2032597 0.3803832 -0.3651161 -0.7539586

利用doBy中的summaryBy()来分组计算描述性统计量:

summaryBy(x1+x2+x3~by,data,FUN),其中data为目标数据框,x1,x2,x3,by均为data中的变量,且by为分组依据变量,FUN为任意函数:

  1. > library(doBy)
  2. > data(mtcars)
  3. > summaryBy(mpg+wt~cyl,data=mtcars,FUN=summary)
  4. cyl mpg.Min. mpg.1st Qu. mpg.Median mpg.Mean mpg.3rd Qu. mpg.Max. wt.Min.
  5. 1 4 21.4 22.80 26.0 26.66364 30.40 33.9 1.513
  6. 2 6 17.8 18.65 19.7 19.74286 21.00 21.4 2.620
  7. 3 8 10.4 14.40 15.2 15.10000 16.25 19.2 3.170
  8. wt.1st Qu. wt.Median wt.Mean wt.3rd Qu. wt.Max.
  9. 1 1.8850 2.200 2.285727 2.62250 3.190
  10. 2 2.8225 3.215 3.117143 3.44000 3.460
  11. 3 3.5325 3.755 3.999214 4.01375 5.424
  12. > summaryBy(mpg+wt~cyl,data=mtcars,FUN=skew_kurt)
  13. cyl mpg.skew mpg.kurtosis wt.skew wt.kurtosis
  14. 1 4 0.2591965 -1.6450119 0.3001262 -1.3559552
  15. 2 6 -0.1583137 -1.9069714 -0.2221115 -1.9839377
  16. 3 8 -0.3628186 -0.5655154 0.9877797 -0.7126583

利用psych包中的describeBy()分组计算概述统计量:

psych中的describeBy(data,by),其中data为目标数据框,by为分组依据的数据:

  1. > library(psych)
  2. > describeBy(iris[,-5],iris$Species)
  3.  
  4. Descriptive statistics by group
  5. group: setosa
  6. vars n mean sd median trimmed mad min max range skew kurtosis
  7. Sepal.Length 1 50 5.01 0.35 5.0 5.00 0.30 4.3 5.8 1.5 0.11 -0.45
  8. Sepal.Width 2 50 3.43 0.38 3.4 3.42 0.37 2.3 4.4 2.1 0.04 0.60
  9. Petal.Length 3 50 1.46 0.17 1.5 1.46 0.15 1.0 1.9 0.9 0.10 0.65
  10. Petal.Width 4 50 0.25 0.11 0.2 0.24 0.00 0.1 0.6 0.5 1.18 1.26
  11. se
  12. Sepal.Length 0.05
  13. Sepal.Width 0.05
  14. Petal.Length 0.02
  15. Petal.Width 0.01
  16. -----------------------------------------------------------
  17. group: versicolor
  18. vars n mean sd median trimmed mad min max range skew
  19. Sepal.Length 1 50 5.94 0.52 5.90 5.94 0.52 4.9 7.0 2.1 0.10
  20. Sepal.Width 2 50 2.77 0.31 2.80 2.78 0.30 2.0 3.4 1.4 -0.34
  21. Petal.Length 3 50 4.26 0.47 4.35 4.29 0.52 3.0 5.1 2.1 -0.57
  22. Petal.Width 4 50 1.33 0.20 1.30 1.32 0.22 1.0 1.8 0.8 -0.03
  23. kurtosis se
  24. Sepal.Length -0.69 0.07
  25. Sepal.Width -0.55 0.04
  26. Petal.Length -0.19 0.07
  27. Petal.Width -0.59 0.03
  28. -----------------------------------------------------------
  29. group: virginica
  30. vars n mean sd median trimmed mad min max range skew
  31. Sepal.Length 1 50 6.59 0.64 6.50 6.57 0.59 4.9 7.9 3.0 0.11
  32. Sepal.Width 2 50 2.97 0.32 3.00 2.96 0.30 2.2 3.8 1.6 0.34
  33. Petal.Length 3 50 5.55 0.55 5.55 5.51 0.67 4.5 6.9 2.4 0.52
  34. Petal.Width 4 50 2.03 0.27 2.00 2.03 0.30 1.4 2.5 1.1 -0.12
  35. kurtosis se
  36. Sepal.Length -0.20 0.09
  37. Sepal.Width 0.38 0.05
  38. Petal.Length -0.37 0.08
  39. Petal.Width -0.75 0.04

2.频数表与列联表

利用table()生成一维列联表:

  1. > table(iris$Species)
  2.  
  3. setosa versicolor virginica
  4. 50 50 50

利用table()生成二维列联表:

  1. > table(mtcars$cyl,mtcars$am)
  2.  
  3. 0 1
  4. 4 3 8
  5. 6 4 3
  6. 8 12 2

利用xtabs()生成列联表:

  1. > xtabs(~cyl,data=mtcars)
  2. cyl
  3. 4 6 8
  4. 11 7 14
  5. > xtabs(~cyl+am,data=mtcars)
  6. am
  7. cyl 0 1
  8. 4 3 8
  9. 6 4 3
  10. 8 12 2

利用prop.table()将频数转化成比例值:

  1. > prop.table(table(iris$Species))
  2.  
  3. setosa versicolor virginica
  4. 0.3333333 0.3333333 0.3333333
  5. > prop.table(table(mtcars$cyl,mtcars$am))
  6.  
  7. 0 1
  8. 4 0.09375 0.25000
  9. 6 0.12500 0.09375
  10. 8 0.37500 0.06250

按行或列生成比例:

  1. > #按行生成比例
  2. > prop.table(table(mtcars$cyl,mtcars$am),1)
  3.  
  4. 0 1
  5. 4 0.2727273 0.7272727
  6. 6 0.5714286 0.4285714
  7. 8 0.8571429 0.1428571
  8. > #按列生成比例
  9. > prop.table(table(mtcars$cyl,mtcars$am),2)
  10.  
  11. 0 1
  12. 4 0.1578947 0.6153846
  13. 6 0.2105263 0.2307692
  14. 8 0.6315789 0.1538462

利用addmargins()为列联表添加边际和:

  1. > #添加边际频数和
  2. > addmargins(table(mtcars$cyl,mtcars$am))
  3.  
  4. 0 1 Sum
  5. 4 3 8 11
  6. 6 4 3 7
  7. 8 12 2 14
  8. Sum 19 13 32
  9. >
  10. > #添加边际频率和
  11. > addmargins(prop.table(table(mtcars$cyl,mtcars$am)))
  12.  
  13. 0 1 Sum
  14. 4 0.09375 0.25000 0.34375
  15. 6 0.12500 0.09375 0.21875
  16. 8 0.37500 0.06250 0.43750
  17. Sum 0.59375 0.40625 1.00000

利用gmodels包中的CrossTable()函数来创建SPSS风格的二维列联表:

CrossTable()函数有很多选项,可以做许多事情:计算(行、列、单元格)的百分比;指定小数位数;进行卡方、Fisher和McNemar独立性检验;计算期望和的残差;将缺失值作为一种有效值;进行行和列标题的标注;生成SPSS风格的输出:

  1. > library(gmodels)
  2. > CrossTable(mtcars$cyl,mtcars$am)
  3.  
  4. Cell Contents
  5. |-------------------------|
  6. | N |
  7. | Chi-square contribution |
  8. | N / Row Total |
  9. | N / Col Total |
  10. | N / Table Total |
  11. |-------------------------|
  12.  
  13. Total Observations in Table: 32
  14.  
  15. | mtcars$am
  16. mtcars$cyl | 0 | 1 | Row Total |
  17. -------------|-----------|-----------|-----------|
  18. 4 | 3 | 8 | 11 |
  19. | 1.909 | 2.790 | |
  20. | 0.273 | 0.727 | 0.344 |
  21. | 0.158 | 0.615 | |
  22. | 0.094 | 0.250 | |
  23. -------------|-----------|-----------|-----------|
  24. 6 | 4 | 3 | 7 |
  25. | 0.006 | 0.009 | |
  26. | 0.571 | 0.429 | 0.219 |
  27. | 0.211 | 0.231 | |
  28. | 0.125 | 0.094 | |
  29. -------------|-----------|-----------|-----------|
  30. 8 | 12 | 2 | 14 |
  31. | 1.636 | 2.391 | |
  32. | 0.857 | 0.143 | 0.438 |
  33. | 0.632 | 0.154 | |
  34. | 0.375 | 0.062 | |
  35. -------------|-----------|-----------|-----------|
  36. Column Total | 19 | 13 | 32 |
  37. | 0.594 | 0.406 | |
  38. -------------|-----------|-----------|-----------|

3.独立性检验

3.1 卡方独立性检验

利用chisq.test()来进行卡方独立性检验,p值大于0.05(α)时,独立:

  1. > library(vcd)
  2. > data("Arthritis")
  3. >
  4. > #这里利用with挂载mtcars以简化变量名的输入过程
  5. > with(chisq.test(table(Improved,Sex)),data=Arthritis)
  6.  
  7. Pearson's Chi-squared test
  8.  
  9. data: table(Improved, Sex)
  10. X-squared = 4.8407, df = 2, p-value = 0.08889

3.2 Fisher精确检验

利用fisher.test()函数进行Fisher精确检验。Fisher精确检验的原假设为:边界固定的列联表中行和列相互独立,p值小于α时拒绝原假设:

  1. > with(fisher.test(table(Improved,Sex)),data=Arthritis)
  2.  
  3. Fisher's Exact Test for Count Data
  4.  
  5. data: table(Improved, Sex)
  6. p-value = 0.1094
  7. alternative hypothesis: two.sided

4.列联表相关性的度量

利用vcd包中的assocstats()函数可以用来计算二维列联表的phi系数、列联系数和Cramer‘s V系数:

  1. > with(assocstats(table(Improved,Treatment)),data=Arthritis)
  2. X^2 df P(> X^2)
  3. Likelihood Ratio 13.530 2 0.0011536
  4. Pearson 13.055 2 0.0014626
  5.  
  6. Phi-Coefficient : NA
  7. Contingency Coeff.: 0.367
  8. Cramer's V : 0.394

5.变量间相关性

5.1 Pearson、Spearman和Kendall相关系数

Pearson积差相关系数衡量了两个定量变量之间的线性相关程度;Spearman等级相关系数则衡量分级定序变量之间的相关程度;Kendall’s Tau相关系数也是一种非参数的等级相关度量。

利用cor(x,use,method)函数来计算这三种相关系数,其中x为矩阵或数据框;use指定确实数据的处理方式,可选的方式为all.obs(假设不存在缺失数据,即遇到缺失数据时将报错)、everything(遇到缺失数据时,相关系数的计算结果将被设为missing)、complete.obs(行删除)以及pairwise.complete.obs(成对删除);method指定相关系数的类型,可选类型有pearson、spearman或kendall;默认参数为use='everything'和method='pearson':

  1. > data(iris)
  2. > cor(iris[,-5],method='pearson')
  3. Sepal.Length Sepal.Width Petal.Length Petal.Width
  4. Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
  5. Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
  6. Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
  7. Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
  8. > cor(iris[,-5],method='spearman')
  9. Sepal.Length Sepal.Width Petal.Length Petal.Width
  10. Sepal.Length 1.0000000 -0.1667777 0.8818981 0.8342888
  11. Sepal.Width -0.1667777 1.0000000 -0.3096351 -0.2890317
  12. Petal.Length 0.8818981 -0.3096351 1.0000000 0.9376668
  13. Petal.Width 0.8342888 -0.2890317 0.9376668 1.0000000
  14. > cor(iris[,-5],method='kendall')
  15. Sepal.Length Sepal.Width Petal.Length Petal.Width
  16. Sepal.Length 1.00000000 -0.07699679 0.7185159 0.6553086
  17. Sepal.Width -0.07699679 1.00000000 -0.1859944 -0.1571257
  18. Petal.Length 0.71851593 -0.18599442 1.0000000 0.8068907
  19. Petal.Width 0.65530856 -0.15712566 0.8068907 1.0000000

5.2 偏相关系数

偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系;

利用ggm包中的pcor(u,s)函数计算偏相关系数,其中u是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余的数值为条件变量(即要排除影响的变量)的下标。s为变量的协方差阵:

  1. > library(ggm)
  2. >
  3. > data(iris)
  4. >
  5. > #以鸢尾花第2,4列数据作为条件变量来计算第1,3列数据的偏相关系数
  6. > pcor(c(1,3,2,4),cov(iris[,-5]))
  7. [1] 0.7190656

5.3 相关性的显著性检验

在变量间相关性假设检验中,常用的原假设为变量间不相关(即总体的相关系数为0);

利用cor.test(x,y,alternative,method)对单个的相关系数进行检验,其中的x与y为要检验相关性的变量,alternative用来指定进行双侧检验或单侧检验(取值为'two.side'、'less'、'greater'),而method用以指定要计算的相关类型('pearson'、'kendall'、'spearman'):

  1. > #以鸢尾花第2,4列数据作为条件变量来计算第1,3列数据的偏相关系数
  2. > cor.test(iris[,1],iris[,3])
  3.  
  4. Pearson's product-moment correlation
  5.  
  6. data: iris[, 1] and iris[, 3]
  7. t = 21.646, df = 148, p-value < 2.2e-16
  8. alternative hypothesis: true correlation is not equal to 0
  9. 95 percent confidence interval:
  10. 0.8270363 0.9055080
  11. sample estimates:
  12. cor
  13. 0.8717538

p值小于0.05,拒绝原假设,判定变量间不独立。

利用psych中的corr.test()同时进行多变量间的相关显著性检验:

  1. > library(psych)
  2. > data(iris)
  3. >
  4. > corr.test(x=iris[,-5],use='complete',method='pearson')
  5. Call:corr.test(x = iris[, -5], use = "complete", method = "pearson")
  6. Correlation matrix
  7. Sepal.Length Sepal.Width Petal.Length Petal.Width
  8. Sepal.Length 1.00 -0.12 0.87 0.82
  9. Sepal.Width -0.12 1.00 -0.43 -0.37
  10. Petal.Length 0.87 -0.43 1.00 0.96
  11. Petal.Width 0.82 -0.37 0.96 1.00
  12. Sample Size
  13. [1] 150
  14. Probability values (Entries above the diagonal are adjusted for multiple tests.)
  15. Sepal.Length Sepal.Width Petal.Length Petal.Width
  16. Sepal.Length 0.00 0.15 0 0
  17. Sepal.Width 0.15 0.00 0 0
  18. Petal.Length 0.00 0.00 0 0
  19. Petal.Width 0.00 0.00 0 0
  20.  
  21. To see confidence intervals of the correlations, print with the short=FALSE option

6 t检验

检验两组样本是否有明显区别,常用t检验:

6.1 独立样本的t检验

利用t.test(x,y)来进行t检验,原假设是两个样本来自同一总体,p值小于α时拒绝原假设:

  1. > t.test(iris[,1],iris[,2])
  2.  
  3. Welch Two Sample t-test
  4.  
  5. data: iris[, 1] and iris[, 2]
  6. t = 36.463, df = 225.68, p-value < 2.2e-16
  7. alternative hypothesis: true difference in means is not equal to 0
  8. 95 percent confidence interval:
  9. 2.63544 2.93656
  10. sample estimates:
  11. mean of x mean of y
  12. 5.843333 3.057333
  13.  
  14. >
  15. > t.test(iris[,1],iris[,1]-0.01)
  16.  
  17. Welch Two Sample t-test
  18.  
  19. data: iris[, 1] and iris[, 1] - 0.01
  20. t = 0.10458, df = 298, p-value = 0.9168
  21. alternative hypothesis: true difference in means is not equal to 0
  22. 95 percent confidence interval:
  23. -0.1781698 0.1981698
  24. sample estimates:
  25. mean of x mean of y
  26. 5.843333 5.833333

以上就是R中基本统计分析的主要内容,如有意见望指出。

(数据科学学习手札19)R中基本统计分析技巧总结的更多相关文章

  1. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  2. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  3. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  4. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  5. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  6. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  7. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  8. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  9. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

随机推荐

  1. submit text3 常用快捷键

    Ctrl+D : 选择单词,重复可增加选择下一个相同的单词 Ctrl+F : 查找内容 Ctrl+G : 跳转到指定行 Ctrl+H : 替换 Ctrl+J : 合并行(已选择需要合并的多行时) Ct ...

  2. zt dup() 和 dup2()

    dup() 和 dup2() 2011-10-07 11:06:31|  分类: Linux学习心得 |字号 订阅   dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个fi ...

  3. ANT 的Table表格样式修改方法

    注:(大家在给页面添加参数或者方法的时候,记得写上注释,方便别人查看) 1.表格行选中样式添加:(可以去beijing,精子库质控统计查看例子) (咱们以前页面上的表格都是在hover时显示选中效果, ...

  4. bootstrapTable refresh 方法使用简单举例

    本文就bootstrapTable refresh 方法如何传递参数做简单举例说明. 下面代码中,一个table,一个button,单击button会触发刷新表格操作. <!DOCTYPE ht ...

  5. UVa 1606 - Amphiphilic Carbon Molecules

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. 【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)

    点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的 ...

  7. SpringMVC学习记录四——功能开发及参数绑定

    9       商品修改功能开发 9.1      需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据 ...

  8. 【洛谷P2746】[USACO5.3]校园网Network of Schools

    校园网Network of Schools 第一问:Tarjan缩点,搞出每一个连通块,入度为零的连通块是需要必须接受新软件副本的,统计数量即可 第二问:要让整个图构成一个环,显然要将入度为零点和出度 ...

  9. 【luogu P4137 Rmq Problem / mex】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4137 求区间内最大没出现过的自然数 在add时要先判断会不会对当前答案产生影响,如果有就去找下一个答案. # ...

  10. java类的初始化程序块以及被实例化时候的执行顺序

    初始化块:在类实例化过程中初始化执行顺序是先执行静态初始化块,然后执行普通初始化块,最后执行构造函数,而且静态初始化只在第一次被实例化时执行且只执行一次.public class HelloWorld ...