R 분석과 프로그래밍/R 통계분석

R 연속형 변수 (1) 요약통계 한번에 보기 : summary(), stat.desc(), describe()

Rfriend 2015. 10. 12. 16:34

지난 포스팅에서 연속형 변수(continuous variable)의 중심화 경향(central tendancy), 퍼짐 정도(dispersion), 분포형태 및 대칭정도 (distribution and symmetry) 등의 R 함수에 대해 알아보았습니다.

 

R에서는 이들 개별 통계량에 대해 개별 R 함수를 제공함과 동시에, 참 편리하게도 한방에(!) 연속형 변수의 기술통계량을 볼 수 있게 해주는 함수들이 있는데요,

 

(1) 연속형 변수 요약통계 한번에 보기

  :  summary(), stat.desc(), describe()

 

(2) 연속형 변수 그룹별(요인별) 요약통계 비교하기

  : tapply(var, factor, summary), aggregate(), summaryBy(), describe.by()

 

로 나누어서 소개해보겠습니다. 

 

먼저, 한국 아침 드라마 초간단 요약 사진을 보면서 자료 정리 및 요약의 효용에 대해 직관적으로 이해를 한 후에, R을 이용한 (1) 연속형 변수 요약통계 한번에 보기를 시작하겠습니다.

 

 

[ 한국 아침 드라마 초간단 요약, ㅋㅋ~ ]

(* 사진출처 : 미상)

 

 

[ 연속형 변수 요약통계 한번에 보기 package & function 요약 ]

 

 category

 package

function 

statistics 

 (1)

descriptive

statistics

summary

base

summary() 

 min, 1Q, median, mean, 3Q, max

pastecs

 stat.desc()

 nbr.val, nbr.null, nbr.na, min, max, range, sum,

 median, mean, var, std.dev, coef.var,

 skewness, kurtosis, normtest.W, normtest.p,

 SE.mean, CI.mean.p

psych 

describe() 

 n, mean, std.dev, median, trimmed, mad,

 min, max, range, skew, kurtosis, se

 (2)

descriptive

statistics

comparison

by group (factor)

 base

tapply(var, factor, summary) 

 summary: min, 1Q, median, mean, 3Q, max,

 (user defined) functions...

 base

by() 

 (user defined) functions... 

 stats

aggregate() 

 (user defined) functions...

 doBy

summaryBy() 

 (user defined) functions... 

 psych

describeBy() 

 n, mean, sd, median, trimmed, mad,

 min, max, range, skew, kurtosis, se

 

 

MASS package 내 Cars93 데이터프레임의 가격(Price), 고속도로연비(MPG.highway) 연속형 변수에 대해서 요약통계를 계산해보겠습니다.

 

 
> library(MASS)
> str(Cars93)
'data.frame':	93 obs. of  27 variables:
 $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
 $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
 $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
 $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
 $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
 $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
 $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
 $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
 $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
 $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
 $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
 $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
 $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
 $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
 $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
 $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
 $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
 $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
 $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
 $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
 $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
 $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
 $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
 $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
 $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
 $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
 $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...

 

 

 

 

 각 package별 R 함수 사용예는 아래와 같습니다.

 

(1) base package : summary()

 

 

> ##--- (1) base package : summary()
> 
> # summary of one variable
> summary(Cars93$Price)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      7      12      18      20      23      62 
> 
> # summary of muliple variables
> summary(Cars93[c("Price", "MPG.highway")])
     Price     MPG.highway
 Min.   : 7   Min.   :20  
 1st Qu.:12   1st Qu.:26  
 Median :18   Median :28  
 Mean   :20   Mean   :29  
 3rd Qu.:23   3rd Qu.:31  
 Max.   :62   Max.   :50

 

 

base package의 summary() 함수는 중심화 경향과 퍼짐정도에 대해서 quick 하게 볼 수 있는 통계량들을 제공합니다.  base package에 들어있으므로 사용하기에 편리한 반면, 약간 부족한 듯한 면이 있습니다.

  •  summary() : min, 1Q, median, mean, 3Q, max

 

 

(2) pastecs package : stat.desc()

 

 

> ##--- (2) pastecs package : stat.desc()
> install.packages("pastecs")
Installing package into ‘C:/Users/user/Documents/R/win-library/3.2’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.2/pastecs_1.3-18.zip'
Content type 'application/zip' length 1636171 bytes (1.6 MB)
downloaded 1.6 MB

package ‘pastecs’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\user\AppData\Local\Temp\RtmpILyJlg\downloaded_packages
> library(pastecs)
필요한 패키지를 로딩중입니다: boot

다음의 패키지를 부착합니다: ‘boot’

The following object is masked from ‘package:survival’:

    aml

 

> # summary statistics of "Price", "MPG.highway" by stat.desc() function

> round(
+   stat.desc(Cars93[c("Price", "MPG.highway")], # dataframe[c(variable name)]
+                 basic = TRUE, # nbr.val, nbr.null, nbr.na, min, max, range, sum
+                 desc = TRUE, # median, mean, var, std.dev, coef.var
+                 norm = TRUE, # skewness, kurtosis, normtest.W, normtest.p
+                 p = 0.90 # SE.mean, CI.mean.p
+             )
+   , 2)
              Price MPG.highway
nbr.val       93.00       93.00
nbr.null       0.00        0.00
nbr.na         0.00        0.00
min            7.40       20.00
max           61.90       50.00
range         54.50       30.00
sum         1814.40     2705.00
median        17.70       28.00
mean          19.51       29.09
SE.mean        1.00        0.55
CI.mean.0.9    1.66        0.92
var           93.30       28.43
std.dev        9.66        5.33
coef.var       0.50        0.18
skewness       1.48        1.19
skew.2SE       2.97        2.38
kurtosis       3.05        2.30
kurt.2SE       3.08        2.32
normtest.W     0.88        0.92
normtest.p     0.00        0.00

 

 

 

stat.desc() 함수의 옵션 별로 제공하는 통계량은 아래와 같습니다.  IQR, quantile 빼고 다 있구요, 화면에 제시해주는 포맷도 아주 깔끔해서 보기에 좋아서 제가 제일 선호하는 함수이기도 합니다.

  • basic = TRUE : 관측치 개수, null 개수, NA 개수, 최소값, 최대값, 범위, 합
  • desc = TRUE : 중앙값, 평균, 분산, 표준편차, 변이계수
  • norm = TRUE : 왜도, 첨도, 정규성 검정통계량, 정규성 검정 P-value
  • p = 0.90 :  신뢰계수 90% (유의수준 10%) 값 => 90% 신뢰구간은 평균 ± CI.mean.0.9 값
    (위의 예 Price의 90% 신뢰구간은 19.51 ± 1.66)

 

 

 

(3) psych package : describe()

 

 > install.packages("psych")
> library(psych)
> 
> describe(Cars93[c("Price", "MPG.highway")], 
+          na.rm = TRUE, # missing value is not included 
+          interp = TRUE, # method of median calculation
+          skew = TRUE, # skewness, kurtosis
+          ranges = TRUE, # ragne
+          trim = 0.1 # trimmed mean
+          )

vars n mean sd median trimmed mad min max range skew kurtosis se Price 1 93 20 9.7 18 18 8.3 7.4 62 54 1.5 3.0 1.00 MPG.highway 2 93 29 5.3 28 29 4.4 20.0 50 30 1.2 2.3 0.55

 

 psych package의 describe() 함수는 summary() 보다는 많고 stat.desc() 보다는 적은 기술통계량을 보여줍니다. 

 

  • describe() : 관측값 개수(n), 평균(mean), 표준편차(sd), 중앙값(median), 절삭평균(10% 절삭평균), 중위값절대편차(from 중위값) (MAD, median absolute deviation), 최소값(min), 최대값(max), 범위(range), 왜도(skew), 첨도(kurtosis), 표준오차(SE, standard error)


[참고]

중위값 절대 편차 (MAD, median absolute deviation) = median(|X - median(X)|) * 1.4826 
(이때 1.4826은 scaling factor (또는 normalizing constant) 이며, 정규적인 자료에서 scaling factor를 곱해주면 표준편차와 비슷해짐)

(* 댓글남겨주신 데이터과학자님, 감사드립니다)


summary()와 stat.desc() 함수가 column에 variable을 row에 statistics를 보여주는 반면, describe() 함수는 반대로 row에 variable을, column에 statistics를 보여줍니다. 

 

원하는 제시 포맷을 선택하고, 원하는 기술통계량을 옵션에서 선택해서 연속형 자료를 일목요연하게 정리, 요약하면 되겠습니다.

 

많은 도움 되었기를 바랍니다.  

질문은 댓글로 남겨주세요. 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

728x90
반응형