往期文章中,我們已經(jīng)學(xué)會了使用圖形探索數(shù)據(jù),例如可以用條形圖了解類別變量的分布,用堆砌條形圖或分組條形圖比較不同類別的組間差異。同時(shí),我們也學(xué)會了使用直方圖、密度圖、箱線圖以及點(diǎn)圖了解連續(xù)型變量的分布,比較組間差異。
而圖形探索數(shù)據(jù)之后,通常的做法是進(jìn)行描述性統(tǒng)計(jì)分析。
本期的R語言實(shí)現(xiàn)過程較為簡單,但重要的是理解各個(gè)統(tǒng)計(jì)量的意義,統(tǒng)計(jì)量數(shù)值的大小能說明什么問題?
大家看的愉快。
1
數(shù)據(jù)集
本期使用Motor Trend雜志的車輛路試(mtcars)數(shù)據(jù)集。我們關(guān)注的變量是每加侖汽油行駛的英里數(shù)(mpg)、馬力(hp)、車重(wt)。
#創(chuàng)建一個(gè)自己想調(diào)取的變量集
myvars <- c('mpg','hp','wt')
#查看所需數(shù)據(jù)集
head(mtcars[myvars])
|
| mpg | hp | wt |
| --- | --- | --- | --- |
| Mazda RX4 | 21.0 | 110 | 2.620 |
| Mazda RX4 Wag | 21.0 | 110 | 2.875 |
| Datsun 710 | 22.8 | 93 | 2.320 |
| Hornet 4 Drive | 21.4 | 110 | 3.215 |
| Hornet Sportabout | 18.7 | 175 | 3.440 |
| Valiant | 18.1 | 105 | 3.460 |
2
入門
我們首先從基礎(chǔ)安裝包入手,利用summary( )函數(shù)獲取統(tǒng)計(jì)量。
#創(chuàng)建一個(gè)自己想調(diào)取的變量集
myvars <- c('mpg','hp','wt')
#查看所需數(shù)據(jù)集
summary(mtcars[myvars])
mpg | hp | wt |
---|---|---|
Min. :10.40 | Min. : 52.0 | Min. :1.513 |
1st Qu.:15.43 | 1st Qu.: 96.5 | 1st Qu.:2.581 |
Median :19.20 | Median :123.0 | Median :3.325 |
Mean :20.09 | Mean :146.7 | Mean :3.217 |
3rd Qu.:22.80 | 3rd Qu.:180.0 | 3rd Qu.:3.610 |
Max. :33.90 | Max. :335.0 | Max. :5.424 |
summary( )函數(shù)提供了最小值、最大值、四分位數(shù)和數(shù)值型變量的均值,以及因子和邏輯型變量的頻數(shù)統(tǒng)計(jì)。我們也可以使用apply( )函數(shù)或sapply( )函數(shù)計(jì)算選擇的任意統(tǒng)計(jì)量。
他們的使用格式為:sapply( x, FUN, options)
其中 x 是你的數(shù)據(jù)框,F(xiàn)UN是任意函數(shù)。如果指定了options,他們將被傳遞給FUN。例如你可以在這里插入mean( ),sd( ),var( ),min( ),max( ),median( ),length( ),range( ),quantile( )。函數(shù)fivenum( )可以返回圖基五總數(shù)(最小值、下四分位數(shù),中位數(shù)、上四分位數(shù)、最大值)。
#創(chuàng)建一個(gè)計(jì)算函數(shù)FUN
#將行刪除設(shè)為FALSE
mystats <- function(x,na.omit=F){
#如果存在缺失值
if(na.omit)
#找一個(gè)不缺失數(shù)據(jù)填補(bǔ)那個(gè)缺失值
x <- x(!is.na(x))
#計(jì)算均值
m <- mean(x)
#計(jì)算變量長度
n <- length(x)
#計(jì)算標(biāo)準(zhǔn)差
s <- sd(x)
#計(jì)算偏度
skew <- sum((x-m)^3/s^3)/n
#計(jì)算峰度
kurt <- sum((x-m)^4/s^4)/n - 3
#返回計(jì)算數(shù)據(jù)
return(c(n=n,mean=m,stdev=s,skew=skew,kurtosis=kurt))
}
#計(jì)算所選統(tǒng)計(jì)量
sapply(mtcars[myvars],mystats)
mpg | hp | wt | |
---|---|---|---|
n | 32.000000 | 32.0000000 | 32.00000000 |
mean | 20.090625 | 146.6875000 | 3.21725000 |
stdev | 6.026948 | 68.5628685 | 0.97845744 |
skew | 0.610655 | 0.7260237 | 0.42314646 |
kurtosis | -0.372766 | -0.1355511 | -0.02271075 |
對于mpg來說,其偏度(skew)為+0.6,分布呈現(xiàn)右偏;峰度(kurtosis)為-0.37,比正態(tài)分布稍平。
3
進(jìn)階
pastecs包中的stat.desc( )函數(shù)能返回種類繁多的描述性統(tǒng)計(jì)量。
使用格式為:
stat.desc(x,basic=T,desc=T,norm=F,p=0.95)
其中 x 代表數(shù)據(jù)框,basic默認(rèn)值為TRUE,計(jì)算所有值、空值、缺失值的數(shù)量、最大值、最小值、值域、總和。desc默認(rèn)值為TRUE,計(jì)算中位數(shù)、均值、均值的標(biāo)準(zhǔn)誤差、均值置信度為95%的置信區(qū)間、方差、標(biāo)準(zhǔn)差、變異系數(shù)。若norm=TRUE,返回偏度和峰度(以及他們的統(tǒng)計(jì)顯著程度)、Shapiro-Wilk正態(tài)檢驗(yàn)結(jié)果。
install.packages('pastecs')
library('pastecs')
stat.desc(mtcars[myvars],norm = T)
mpg | hp | wt | |
---|---|---|---|
nbr.val | 32.0000000 | 32.00000000 | 32.00000000 |
nbr.null | 0.0000000 | 0.00000000 | 0.00000000 |
nbr.na | 0.0000000 | 0.00000000 | 0.00000000 |
min | 10.4000000 | 52.00000000 | 1.51300000 |
max | 33.9000000 | 335.00000000 | 5.42400000 |
range | 23.5000000 | 283.00000000 | 3.91100000 |
sum | 642.9000000 | 4694.00000000 | 102.95200000 |
median | 19.2000000 | 123.00000000 | 3.32500000 |
mean | 20.0906250 | 146.68750000 | 3.21725000 |
SE.mean | 1.0654240 | 12.12031731 | 0.17296847 |
CI.mean.0.95 | 2.1729465 | 24.71955013 | 0.35277153 |
var | 36.3241028 | 4700.86693548 | 0.95737897 |
std.dev | 6.0269481 | 68.56286849 | 0.97845744 |
coef.var | 0.2999881 | 0.46740771 | 0.30412851 |
skewness | 0.6106550 | 0.72602366 | 0.42314646 |
skew.2SE | 0.7366922 | 0.87587259 | 0.51048252 |
kurtosis | -0.3727660 | -0.13555112 | -0.02271075 |
kurt.2SE | -0.2302812 | -0.08373853 | -0.01402987 |
normtest.W | 0.9475647 | 0.93341934 | 0.94325772 |
normtest.p | 0.1228814 | 0.04880824 | 0.09265499 |
4
精通
對于有類別型變量的數(shù)據(jù)來說,我們往往需要分組計(jì)算統(tǒng)計(jì)量。
by( data ,* INDICES *, FUN)
其中data代表數(shù)據(jù)框,INDICES是一個(gè)因子,FUN是任意函數(shù)
#調(diào)用mystats中的所有函數(shù)
dstats <- function(x)sapply(x,mystats)
#傳遞dstats并進(jìn)行分組
by(mtcars[myvars],mtcars$am,dstats)
mtcars$am: 0 | |||
---|---|---|---|
mpg | hp | wt | |
n | 19.00000000 | 19.00000000 | 19.0000000 |
mean | 17.14736842 | 160.26315789 | 3.7688947 |
stdev | 3.83396639 | 53.90819573 | 0.7774001 |
skew | 0.01395038 | -0.01422519 | 0.9759294 |
kurtosis | -0.80317826 | -1.20969733 | 0.1415676 |
mtcars$am: 1 | |||
---|---|---|---|
mpg | hp | wt | |
n | 13.00000000 | 13.0000000 | 13.0000000 |
mean | 24.39230769 | 126.8461538 | 2.4110000 |
stdev | 6.16650381 | 84.0623243 | 0.6169816 |
skew | 0.05256118 | 1.3598859 | 0.2103128 |
kurtosis | -1.45535200 | 0.5634635 | -1.1737358 |
今天的文章就到這里,最關(guān)鍵的還是數(shù)學(xué)方面的理解。
祝福冰姐又老了一歲,謝謝各位。
下期再見。
你可能還想看
等你很久啦,長按加入古同社區(qū)