(数据科学学习手札19)R中基本统计分析技巧总结

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

1.描述性统计量部分

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

summary()

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

> #挂载鸢尾花数据
> data(iris)
> #计算鸢尾花各变量的基本描述统计量
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300
 Median :5.800   Median :3.000   Median :4.350   Median :1.300
 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
       Species
 setosa    :50
 versicolor:50
 virginica :50 

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

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

Hmisc包中的describe()函数:

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

> library(Hmisc)
> Hmisc::describe(iris)
iris 

 5  Variables      150  Observations
-------------------------------------------------------------------------------
Sepal.Length
       n  missing distinct     Info     Mean      Gmd      .05      .10
     150        0       35    0.998    5.843   0.9462    4.600    4.800
     .25      .50      .75      .90      .95
   5.100    5.800    6.400    6.900    7.255 

lowest : 4.3 4.4 4.5 4.6 4.7, highest: 7.3 7.4 7.6 7.7 7.9
-------------------------------------------------------------------------------
Sepal.Width
       n  missing distinct     Info     Mean      Gmd      .05      .10
     150        0       23    0.992    3.057   0.4872    2.345    2.500
     .25      .50      .75      .90      .95
   2.800    3.000    3.300    3.610    3.800 

lowest : 2.0 2.2 2.3 2.4 2.5, highest: 3.9 4.0 4.1 4.2 4.4
-------------------------------------------------------------------------------
Petal.Length
       n  missing distinct     Info     Mean      Gmd      .05      .10
     150        0       43    0.998    3.758    1.979     1.30     1.40
     .25      .50      .75      .90      .95
    1.60     4.35     5.10     5.80     6.10 

lowest : 1.0 1.1 1.2 1.3 1.4, highest: 6.3 6.4 6.6 6.7 6.9
-------------------------------------------------------------------------------
Petal.Width
       n  missing distinct     Info     Mean      Gmd      .05      .10
     150        0       22     0.99    1.199   0.8676      0.2      0.2
     .25      .50      .75      .90      .95
     0.3      1.3      1.8      2.2      2.3 

lowest : 0.1 0.2 0.3 0.4 0.5, highest: 2.1 2.2 2.3 2.4 2.5
-------------------------------------------------------------------------------
Species
       n  missing distinct
     150        0        3 

Value          setosa versicolor  virginica
Frequency          50         50         50
Proportion      0.333      0.333      0.333
-------------------------------------------------------------------------------

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(正态性检验)结果:

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

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

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

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

1.2 分组计算描述性统计量

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

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

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

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

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

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

> by(iris[,-5],iris$Species,psych::describe)
iris$Species: setosa
             vars  n mean   sd median trimmed  mad min max range skew kurtosis
Sepal.Length    1 50 5.01 0.35    5.0    5.00 0.30 4.3 5.8   1.5 0.11    -0.45
Sepal.Width     2 50 3.43 0.38    3.4    3.42 0.37 2.3 4.4   2.1 0.04     0.60
Petal.Length    3 50 1.46 0.17    1.5    1.46 0.15 1.0 1.9   0.9 0.10     0.65
Petal.Width     4 50 0.25 0.11    0.2    0.24 0.00 0.1 0.6   0.5 1.18     1.26
               se
Sepal.Length 0.05
Sepal.Width  0.05
Petal.Length 0.02
Petal.Width  0.01
-----------------------------------------------------------
iris$Species: versicolor
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 5.94 0.52   5.90    5.94 0.52 4.9 7.0   2.1  0.10
Sepal.Width     2 50 2.77 0.31   2.80    2.78 0.30 2.0 3.4   1.4 -0.34
Petal.Length    3 50 4.26 0.47   4.35    4.29 0.52 3.0 5.1   2.1 -0.57
Petal.Width     4 50 1.33 0.20   1.30    1.32 0.22 1.0 1.8   0.8 -0.03
             kurtosis   se
Sepal.Length    -0.69 0.07
Sepal.Width     -0.55 0.04
Petal.Length    -0.19 0.07
Petal.Width     -0.59 0.03
-----------------------------------------------------------
iris$Species: virginica
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 6.59 0.64   6.50    6.57 0.59 4.9 7.9   3.0  0.11
Sepal.Width     2 50 2.97 0.32   3.00    2.96 0.30 2.2 3.8   1.6  0.34
Petal.Length    3 50 5.55 0.55   5.55    5.51 0.67 4.5 6.9   2.4  0.52
Petal.Width     4 50 2.03 0.27   2.00    2.03 0.30 1.4 2.5   1.1 -0.12
             kurtosis   se
Sepal.Length    -0.20 0.09
Sepal.Width      0.38 0.05
Petal.Length    -0.37 0.08
Petal.Width     -0.75 0.04
>
> #前面定义过的偏度峰度自编函数作为sapply的参数跟在FUN位置的后面
> by(iris[,-5],iris$Species,sapply,skew_kurt)
iris$Species: setosa
         Sepal.Length Sepal.Width Petal.Length Petal.Width
skew        0.1129778  0.03872946    0.1000954    1.179633
kurtosis   -0.4508724  0.59595073    0.6539303    1.258718
-----------------------------------------------------------
iris$Species: versicolor
         Sepal.Length Sepal.Width Petal.Length Petal.Width
skew       0.09913926  -0.3413644   -0.5706024 -0.02933377
kurtosis  -0.69391378  -0.5493203   -0.1902555 -0.58731442
-----------------------------------------------------------
iris$Species: virginica
         Sepal.Length Sepal.Width Petal.Length Petal.Width
skew        0.1110286   0.3442849    0.5169175  -0.1218119
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为任意函数:

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

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

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

> library(psych)
> describeBy(iris[,-5],iris$Species)

 Descriptive statistics by group
group: setosa
             vars  n mean   sd median trimmed  mad min max range skew kurtosis
Sepal.Length    1 50 5.01 0.35    5.0    5.00 0.30 4.3 5.8   1.5 0.11    -0.45
Sepal.Width     2 50 3.43 0.38    3.4    3.42 0.37 2.3 4.4   2.1 0.04     0.60
Petal.Length    3 50 1.46 0.17    1.5    1.46 0.15 1.0 1.9   0.9 0.10     0.65
Petal.Width     4 50 0.25 0.11    0.2    0.24 0.00 0.1 0.6   0.5 1.18     1.26
               se
Sepal.Length 0.05
Sepal.Width  0.05
Petal.Length 0.02
Petal.Width  0.01
-----------------------------------------------------------
group: versicolor
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 5.94 0.52   5.90    5.94 0.52 4.9 7.0   2.1  0.10
Sepal.Width     2 50 2.77 0.31   2.80    2.78 0.30 2.0 3.4   1.4 -0.34
Petal.Length    3 50 4.26 0.47   4.35    4.29 0.52 3.0 5.1   2.1 -0.57
Petal.Width     4 50 1.33 0.20   1.30    1.32 0.22 1.0 1.8   0.8 -0.03
             kurtosis   se
Sepal.Length    -0.69 0.07
Sepal.Width     -0.55 0.04
Petal.Length    -0.19 0.07
Petal.Width     -0.59 0.03
-----------------------------------------------------------
group: virginica
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 6.59 0.64   6.50    6.57 0.59 4.9 7.9   3.0  0.11
Sepal.Width     2 50 2.97 0.32   3.00    2.96 0.30 2.2 3.8   1.6  0.34
Petal.Length    3 50 5.55 0.55   5.55    5.51 0.67 4.5 6.9   2.4  0.52
Petal.Width     4 50 2.03 0.27   2.00    2.03 0.30 1.4 2.5   1.1 -0.12
             kurtosis   se
Sepal.Length    -0.20 0.09
Sepal.Width      0.38 0.05
Petal.Length    -0.37 0.08
Petal.Width     -0.75 0.04

2.频数表与列联表

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

> table(iris$Species)

    setosa versicolor  virginica
        50         50         50 

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

> table(mtcars$cyl,mtcars$am)

     0  1
  4  3  8
  6  4  3
  8 12  2

利用xtabs()生成列联表:

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

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

> prop.table(table(iris$Species))

    setosa versicolor  virginica
 0.3333333  0.3333333  0.3333333
> prop.table(table(mtcars$cyl,mtcars$am))

          0       1
  4 0.09375 0.25000
  6 0.12500 0.09375
  8 0.37500 0.06250

按行或列生成比例:

> #按行生成比例
> prop.table(table(mtcars$cyl,mtcars$am),1)

            0         1
  4 0.2727273 0.7272727
  6 0.5714286 0.4285714
  8 0.8571429 0.1428571
> #按列生成比例
> prop.table(table(mtcars$cyl,mtcars$am),2)

            0         1
  4 0.1578947 0.6153846
  6 0.2105263 0.2307692
  8 0.6315789 0.1538462

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

> #添加边际频数和
> addmargins(table(mtcars$cyl,mtcars$am))

       0  1 Sum
  4    3  8  11
  6    4  3   7
  8   12  2  14
  Sum 19 13  32
>
> #添加边际频率和
> addmargins(prop.table(table(mtcars$cyl,mtcars$am)))

            0       1     Sum
  4   0.09375 0.25000 0.34375
  6   0.12500 0.09375 0.21875
  8   0.37500 0.06250 0.43750
  Sum 0.59375 0.40625 1.00000

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

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

> library(gmodels)
> CrossTable(mtcars$cyl,mtcars$am)

   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

Total Observations in Table:  32 

             | mtcars$am
  mtcars$cyl |         0 |         1 | Row Total |
-------------|-----------|-----------|-----------|
           4 |         3 |         8 |        11 |
             |     1.909 |     2.790 |           |
             |     0.273 |     0.727 |     0.344 |
             |     0.158 |     0.615 |           |
             |     0.094 |     0.250 |           |
-------------|-----------|-----------|-----------|
           6 |         4 |         3 |         7 |
             |     0.006 |     0.009 |           |
             |     0.571 |     0.429 |     0.219 |
             |     0.211 |     0.231 |           |
             |     0.125 |     0.094 |           |
-------------|-----------|-----------|-----------|
           8 |        12 |         2 |        14 |
             |     1.636 |     2.391 |           |
             |     0.857 |     0.143 |     0.438 |
             |     0.632 |     0.154 |           |
             |     0.375 |     0.062 |           |
-------------|-----------|-----------|-----------|
Column Total |        19 |        13 |        32 |
             |     0.594 |     0.406 |           |
-------------|-----------|-----------|-----------|

3.独立性检验

3.1 卡方独立性检验

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

> library(vcd)
> data("Arthritis")
>
> #这里利用with挂载mtcars以简化变量名的输入过程
> with(chisq.test(table(Improved,Sex)),data=Arthritis)

    Pearson‘s Chi-squared test

data:  table(Improved, Sex)
X-squared = 4.8407, df = 2, p-value = 0.08889

3.2 Fisher精确检验

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

> with(fisher.test(table(Improved,Sex)),data=Arthritis)

    Fisher‘s Exact Test for Count Data

data:  table(Improved, Sex)
p-value = 0.1094
alternative hypothesis: two.sided

4.列联表相关性的度量

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

> with(assocstats(table(Improved,Treatment)),data=Arthritis)
                    X^2 df  P(> X^2)
Likelihood Ratio 13.530  2 0.0011536
Pearson          13.055  2 0.0014626

Phi-Coefficient   : NA
Contingency Coeff.: 0.367
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‘:

> data(iris)
> cor(iris[,-5],method=‘pearson‘)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
> cor(iris[,-5],method=‘spearman‘)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1667777    0.8818981   0.8342888
Sepal.Width    -0.1667777   1.0000000   -0.3096351  -0.2890317
Petal.Length    0.8818981  -0.3096351    1.0000000   0.9376668
Petal.Width     0.8342888  -0.2890317    0.9376668   1.0000000
> cor(iris[,-5],method=‘kendall‘)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   1.00000000 -0.07699679    0.7185159   0.6553086
Sepal.Width   -0.07699679  1.00000000   -0.1859944  -0.1571257
Petal.Length   0.71851593 -0.18599442    1.0000000   0.8068907
Petal.Width    0.65530856 -0.15712566    0.8068907   1.0000000

5.2 偏相关系数

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

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

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

5.3 相关性的显著性检验

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

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

> #以鸢尾花第2,4列数据作为条件变量来计算第1,3列数据的偏相关系数
> cor.test(iris[,1],iris[,3])

    Pearson‘s product-moment correlation

data:  iris[, 1] and iris[, 3]
t = 21.646, df = 148, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.8270363 0.9055080
sample estimates:
      cor
0.8717538

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

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

> library(psych)
> data(iris)
>
> corr.test(x=iris[,-5],use=‘complete‘,method=‘pearson‘)
Call:corr.test(x = iris[, -5], use = "complete", method = "pearson")
Correlation matrix
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length         1.00       -0.12         0.87        0.82
Sepal.Width         -0.12        1.00        -0.43       -0.37
Petal.Length         0.87       -0.43         1.00        0.96
Petal.Width          0.82       -0.37         0.96        1.00
Sample Size
[1] 150
Probability values (Entries above the diagonal are adjusted for multiple tests.)
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length         0.00        0.15            0           0
Sepal.Width          0.15        0.00            0           0
Petal.Length         0.00        0.00            0           0
Petal.Width          0.00        0.00            0           0

 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值小于α时拒绝原假设:

> t.test(iris[,1],iris[,2])

    Welch Two Sample t-test

data:  iris[, 1] and iris[, 2]
t = 36.463, df = 225.68, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 2.63544 2.93656
sample estimates:
mean of x mean of y
 5.843333  3.057333 

>
> t.test(iris[,1],iris[,1]-0.01)

    Welch Two Sample t-test

data:  iris[, 1] and iris[, 1] - 0.01
t = 0.10458, df = 298, p-value = 0.9168
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.1781698  0.1981698
sample estimates:
mean of x mean of y
 5.843333  5.833333 

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

原文地址:https://www.cnblogs.com/feffery/p/8612412.html

时间: 2024-08-02 09:42:17

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

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

一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供了一系列方法来完成几乎全部类型的文本信息的处理工作,下面一一介绍: 二.re.compile() 在前一篇文章中我们使用过这个方法,它通过编译正则表达式参数,来返回一个目标对象的匹配模式,进而提高了正则表达式的效率,主要参数如下: pattern:输入的欲编译正则表达式,需将正则表达式包裹在''内传

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

一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集实战 2.1 数据要求 这次我们需要采集的数据是知名旅游网站马蜂窝下重庆区域内所有景点的用户评论数据,如下图所示: 思路是,先获取所有景点的poi ID,即每一个景点主页url地址中的唯一数字: 这一步和(数据科学学习手札33)基于Python的网络数据采集实战(1)中做法类似,即在下述界面: 翻页

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

一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原生ggplot2图像进行美化,掌握它之后你就可以创作出更具特色和美感的数据可视化作品. 二.基础内容 2.1 安装 不同于常规的R包,ggthemr并没有在CRAN上发布,因此我们需要使用devtools中的install_github()直接从github上安装它,参照github上ggthemr

(数据科学学习手札23)决策树分类原理详解&amp;Python与R实现

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画成图形很像一棵树的枝干,故称决策树.在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系. 一.初识决策树 决策树是一种树形结构,一般的,一棵决策树包含一个根结点,若干个内部结点和若干个叶结点: 叶结点:树的一个方向的最末端,表示结果的输出: 根结点:初始样

(数据科学学习手札62)详解seaborn中的kdeplot、rugplot、distplot与jointplot

一.简介 seaborn是Python中基于matplotlib的具有更多可视化功能和更优美绘图风格的绘图模块,当我们想要探索单个或一对数据分布上的特征时,可以使用到seaborn中内置的若干函数对数据的分布进行多种多样的可视化,本文以jupyter notebook为编辑工具,针对seaborn中的kdeplot.rugplot.distplot和jointplot,对其参数设置和具体用法进行详细介绍. 二.kdeplot seaborn中的kdeplot可用于对单变量和双变量进行核密度估计并

(数据科学学习手札81)conda+jupyter玩转数据科学环境搭建

本文示例yaml文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用Python进行数据分析时,很多时候都在解决环境搭建的问题,不同版本.依赖包等问题经常给数据科学工作流的搭建和运转带来各种各样令人头疼的问题,本文就将基于笔者自己摸索出的经验,以geopandas环境的搭建为例,教你使用conda+jupyter轻松搞定环境的搭建.管理与拓展. 图1 2 虚拟环境的搭建与使用 2.1 使用con

(数据科学学习手札70)面向数据科学的Python多进程简介及应用

本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 进程是计算机系统中资源分配的最小单位,也是操作系统可以控制的最小单位,在数据科学中很多涉及大量计算.CPU密集型的任务都可以通过多进程并行运算的方式大幅度提升运算效率从而节省时间开销,而在Python中实现多进程有多种方式,本文就将针对其中较为易用的几种方式进行介绍. 二.利用multiprocessing实现多进程 multiprocessin

(数据科学学习手札73)盘点pandas 1.0.0中的新特性

本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Python的数据分析领域最重要的包,而就在最近,pandas终于迎来了1.0.0版本,对于pandas来说这是一次更新是里程碑式的,删除了很多旧版本中臃肿的功能,新增了一些崭新的特性,更加专注于高效实用的数据分析,本文就将针对pandas 1.0.0在笔者眼中比较重要的特性进行介绍,对于想要完整彻底了解新版

(数据科学学习手札54)Python中retry的简单用法

一.简介 retry是一个用于错误处理的模块,功能类似try-except,但更加快捷方便,本文就将简单地介绍一下retry的基本用法. 二.基本用法 retry: 作为装饰器进行使用,不传入参数时功能如下例所示: from retry import retry @retry() def demo(): print('错误') raise demo() 我们编写了每次运行都会通过raise报错的自定义函数demo(),利用默认参数的retry()进行装饰,运行结果如下: 可以看到,retry()