2 r장 활용 - kocwcontents.kocw.net/kocw/document/2016/chungbuk/najonghwa/... · 2016-09-09 ·...

15
활용 2 R 수학 및 통계관련 함수 2.1 이 절에서는 의 기본 함수로 수학 및 통계 관련 함수를 소개한다 이들 함수들은 프로그 R . R 래밍과 분석의 매 순간 유용하게 사용되므로 그 기능을 잘 익혀둘 필요가 있다. 유용한 수학 통계 함수 2.1.1 / 통계 함수 (a) R 에서 제공하는 기초적인 통계함수는 다음과 같다 R . > a <- c(2, 7, 5, 3, 1, 4, 6) > sum(a) # [1] 28 > prod(a) # [1] 5040 최댓값 > max(a) # [1] 7 최솟값 > min(a) # [1] 1 최솟값 > pmin(c(2, 8, 3), c(3, 4, 5), c(5, 2, 9)) # parellel [1] 2 2 3 최댓값 > pmax(c(2, 8, 3), c(3, 4, 5), c(1, 2, 3)) # parellel [1] 3 8 5 차분 > diff(a) # (difference) [1] 5 -2 -2 -2 3 2 최댓값의 위치 > which.max(a) # [1] 2 최솟값의 위치 > which.min(a) # [1] 5

Upload: others

Post on 22-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

장 활용2 R

수학 및 통계관련 함수2.1

이 절에서는 의 기본 함수로 수학 및 통계 관련 함수를 소개한다 이들 함수들은 프로그R . R래밍과 분석의 매 순간 유용하게 사용되므로 그 기능을 잘 익혀둘 필요가 있다.

유용한 수학 통계 함수2.1.1 /

통계 함수(a) R

에서 제공하는 기초적인 통계함수는 다음과 같다R .

> a <- c(2, 7, 5, 3, 1, 4, 6)

합> sum(a) #[1] 28

곱> prod(a) #[1] 5040

최댓값> max(a) #[1] 7

최솟값> min(a) #[1] 1

최솟값> pmin(c(2, 8, 3), c(3, 4, 5), c(5, 2, 9)) # parellel[1] 2 2 3

최댓값> pmax(c(2, 8, 3), c(3, 4, 5), c(1, 2, 3)) # parellel[1] 3 8 5

차분> diff(a) # (difference)[1] 5 -2 -2 -2 3 2

최댓값의 위치> which.max(a) #[1] 2

최솟값의 위치> which.min(a) #[1] 5

Page 2: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

범위> range(a) #[1] 1 7

평균> mean(a) #[1] 4

중앙값> median(a) #[1] 4

표준편차> sd(a) # (standard deviation)[1] 2.16

분산> var(a) # (variance)[1] 4.667

분위수> quantile(a) #0% 25% 50% 75% 100%1.0 2.5 4.0 5.5 7.0

표준화 점수> scale(a) # (standardized)[,1]

[1,] -0.9258[2,] 1.3887[3,] 0.4629[4,] -0.4629[5,] -1.3887[6,] 0.0000[7,] 0.9258attr(,"scaled:center")[1] 4attr(,"scaled:scale")[1] 2.16

> mean(scale(a))[1] 0> var(scale(a))

[,1][1,] 1> sd(scale(a))[1] 1

Page 3: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

수학 함수(b) R

에서 제공하는 유용한 수학함수는 다음과 같다R .

> a <- c(2, 7, 5, 3, 1, 4, 6)

크기순으로 배열> sort(a) #[1] 1 2 3 4 5 6 7

역순으로 배열> rev(a) #[1] 6 4 1 3 5 7 2

순위> rank(a) #[1] 2 7 5 3 1 4 6

크기순으로 나열 와 동일> order(a) # : sort.list()[1] 5 1 4 6 3 7 2> order(a, decreasing=TRUE)[1] 2 7 3 6 4 1 5

자연로그> log(a) #[1] 0.6931 1.9459 1.6094 1.0986 0.0000 1.3863 1.7918

상용로그> log(a, base=10) #[1] 0.3010 0.8451 0.6990 0.4771 0.0000 0.6021 0.7782

지수함수> exp(a) #[1] 7.389 1096.633 148.413 20.086 2.718 54.598 403.429

제곱근 함수> sqrt(a) # (square root)[1] 1.414 2.646 2.236 1.732 1.000 2.000 2.449

절대값> abs(a) # (absolute value)[1] 2 7 5 3 1 4 6

반올림 함수> round(sqrt(a), 2) #[1] 1.41 2.65 2.24 1.73 1.00 2.00 2.45

누적합> cumsum(a) # (cumulative sum)[1] 2 9 14 17 18 22 28

Page 4: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

누적곱> cumprod(a) # (cumulative product)[1] 2 14 70 210 210 840 5040

누적최솟값> cummin(a) #[1] 2 2 2 2 1 1 1

누적최댓값> cummax(a) #[1] 2 7 7 7 7 7 7

가 의 몇 번째 원소에 매칭> match(c(2,4,6,8), 5:10) # match(x, y): x y[1] NA NA 2 4

합집합> union(a, c(1,2,10)) #[1] 2 7 5 3 1 4 6 10

교집합> intersect(a, c(1,2,10)) #[1] 2 1

에서 를 제외> setdiff(a, c(1,2,10)) # setdiff(x, y): x y[1] 7 5 3 4 6

가 의 원소인가> is.element(a, c(1,2,10)) # is.element(x, y): x y ?

[1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE

조합 계산> choose(5,2) # (combination)[1] 10

행렬 연산 함수(c) R

에서 제공되는 행렬 연산 함수는 다음과 같다> ## R .

대각행렬 생성> m <- diag(10, 3, 4) # (diagonal matrix)> m

[,1] [,2] [,3] [,4][1,] 10 0 0 0[2,] 0 10 0 0[3,] 0 0 10 0

Page 5: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

대각원소> diag(m) # (diagonal elements)[1] 10 10 10

전치 행렬> t(m) # (transpose)[,1] [,2] [,3]

[1,] 10 0 0[2,] 0 10 0[3,] 0 0 10[4,] 0 0 0

행의 수> nrow(m) #[1] 3

열의 수> ncol(m) #[1] 4

행렬의 곱> m%*%t(m) # %*%:[,1] [,2] [,3]

[1,] 100 0 0[2,] 0 100 0[3,] 0 0 100

> rbind(m, c(0,0,0,10))[,1] [,2] [,3] [,4]

[1,] 10 0 0 0[2,] 0 10 0 0[3,] 0 0 10 0[4,] 0 0 0 10

> cbind(m, c(1,2,3))[,1] [,2] [,3] [,4] [,5]

[1,] 10 0 0 0 1[2,] 0 10 0 0 2[3,] 0 0 10 0 3

> m1 <- matrix(1:4, 2, 2)> m1

[,1] [,2][1,] 1 3[2,] 2 4

Page 6: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

> rowSums(m1)[1] 4 6

> rowMeans(m1)[1] 2 3

> colSums(m1)[1] 3 7

> colMeans(m1)[1] 1.5 3.5

방정식의 근> solve(m1, c(1,2)) # solve(A, b): Ax=b[1] 1 0

방정식 의 근 즉 역행렬> solve(m1) # solve(A): Ax=I ( , )[,1] [,2]

[1,] -2 1.5[2,] 1 -0.5

특이값 분해> svd(m1) # (singular value decomposition):

$d[1] 5.465 0.366

$u[,1] [,2]

[1,] -0.5760 -0.8174[2,] -0.8174 0.5760

$v[,1] [,2]

[1,] -0.4046 0.9145[2,] -0.9145 -0.4046

> a$u%*%diag(a$d)%*%t(a$v) # 을 확인[,1] [,2]

[1,] 1 3[2,] 2 4

Page 7: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

고유치 고유벡터> eigen(m1) # (eigen value), (eigen vector)$values[1] 5.3723 -0.3723

$vectors[,1] [,2]

[1,] -0.5658 -0.9094[2,] -0.8246 0.4160

행렬식> det(m1) # (determinant)[1] -2

Page 8: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

함수의 반복 적용 메타함수2.1.2 :

은 자료 객체의 원소에 대해 동일한 작업을 반복적으로 적용할 경우 계열의 함수를R apply이용하면 편리하다.

apply(), lapply(), sapply(), tapply()

또한 부집단별 로 통계를 내고자 할 경우 다음의 함수들이 유용하다(subgroup) .

by(), aggregate(), ave(), sweep()

계열 함수(a) apply

함수 행렬 또는 배열의 마진 에 적용> ## apply() : (margins)> x <- cbind(x1=3, x2=c(4:1, 2:5))

는 행렬 객체임> x # xx1 x2

[1,] 3 4[2,] 3 3[3,] 3 2[4,] 3 1[5,] 3 2[6,] 3 3[7,] 3 4[8,] 3 5

은 행을 의미함> apply(x, 1, sum) # 1[1] 7 6 5 4 5 6 7 8

는 열을 의미함> apply(x, 2, sum) # 2x1 x224 24

> apply(x, 1, function(x) x^2)[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]

x1 9 9 9 9 9 9 9 9x2 16 9 4 1 4 9 16 25

함수 리스트 또는 벡터에 적용> ## lapply() :

Page 9: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

> x <- list(a=1:10, beta=exp(-3:3), logic=c(TRUE,FALSE,FALSE,TRUE))> x$a[1] 1 2 3 4 5 6 7 8 9 10

$beta[1] 0.04979 0.13534 0.36788 1.00000 2.71828 7.38906 20.08554

$logic[1] TRUE FALSE FALSE TRUE

> lapply(x, mean)$a[1] 5.5

$beta[1] 4.535

$logic[1] 0.5

생성> lapply(x, quantile) # list$a

0% 25% 50% 75% 100%1.00 3.25 5.50 7.75 10.00

$beta0% 25% 50% 75% 100%

0.04978707 0.25160736 1.00000000 5.05366896 20.08553692

$logic0% 25% 50% 75% 100%0.0 0.0 0.5 1.0 1.0

함수 와 유사> ## sapply() : lapply()이름을 가진 행렬 형태로 결과 제공> ## (named matrix)

> sapply(x, quantile)a beta logic

0% 1.00 0.04979 0.0

Page 10: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

25% 3.25 0.25161 0.050% 5.50 1.00000 0.575% 7.75 5.05367 1.0100% 10.00 20.08554 1.0

> colnames(temp)[1] "a" "beta" "logic"

> rownames(temp)[1] "0%" "25%" "50%" "75%" "100%"

함수 융단 배열 의 각 셀 특정 요인의 유일한 수준들의 조합에> ## tapply() : (ragged array) (의해 주어지는 값들의 그룹 에 함수를 적용)> n <- 17; fac <- factor(rep(1:3, length=n), levels=1:5)> fac[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2Levels: 1 2 3 4 5

> table(fac)fac1 2 3 4 56 6 5 0 0

요인의 수준 에 따라 범주별 합을 계산> tapply(1:n, fac, sum) # (level) ( )1 2 3 4 551 57 45 NA NA # 51=1+4+7+10+13+16

함수 함수의 다변량 버전임> ## mapply() : sapply()와 동일> mapply(rep, 1:4, 4:1) # mapply(FUN=rep, x=1:4, times=4:1)

함수는 을 각 인자의 첫 번째 원소 두 번째 원소 세 번째 원소 순으로# mapply() FUN , , , ...적용함 인자는 필요시 재순환 됨.1.

[[1]][1] 1 1 1 1

[[2]][1] 2 2 2

[[3]]

Page 11: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

[1] 3 3

[[4]][1] 4

부집단별 통계 함수(b)

부집단별 통계를 제공하는 의 기본함수에는 가 있다 이들 함수의R aggregate(), by(), ave() .적용 예는 다음과 같다.

함수의 적용 예> ## aggregate()> agg <- data.frame(v1=1:10, v2=c("c1", "c3", "c2", "c2", "c1", "c1", "c3", "c2", "c2","c1"))

> str(agg)'data.frame': 10 obs. of 2 variables:$ v1: int 1 2 3 4 5 6 7 8 9 10$ v2: Factor w/ 3 levels "c1","c2","c3": 1 3 2 2 1 1 3 2 2 1

수행 결과는 데이터프레임 객체임> aggregate(agg$v1, by=list(agg$v2), mean) #Group.1 x

1 c1 5.52 c2 6.03 c3 4.5

함수의 적용 예> ## by()배열 객체로 결과가 제공됨> by(agg$v1, agg$v2, sum) #

agg$v2: c1[1] 22--------------------------------------------------------------agg$v2: c2[1] 24--------------------------------------------------------------agg$v2: c3[1] 9

함수 적용 예> ## ave()벡터 객체로 결과가 제공됨> ave(agg$v1, agg$v2) #

[1] 5.5 4.5 6.0 6.0 5.5 5.5 4.5 6.0 6.0 5.5

Page 12: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

연산자(c) sweep

함수는 행렬 객체의 각 원소가 열평균 또는 행평균 으로부터 벗어난 편차 등을 구할sweep() ( )때 유용하다 분산분석에서 변동의 분해 등에 유용하다. .

> s <- matrix(1:12, 3, 4)> s

[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12

와 동일> sweep(s, 2, colMeans(s)) # sweep(s, 2, apply(s, 2, mean))각 원소별로 열평균으로부터의 편차[,1] [,2] [,3] [,4] #

[1,] -1 -1 -1 -1[2,] 0 0 0 0[3,] 1 1 1 1

Page 13: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

확률분포와 분포그리기2.2

확률분포와 확률계산2.2.1

은 기본적으로 다양한 확률분포에 대해 확률밀도 누적확률R (probability density),분위수 확률변량 또는 난수(cumulative probability), (quantiles), (random variates)( ,

를 제공한다random number) .

표준정규분포의 밀도함수값 누적확률 분위수 난수 생성 예> ## , , ,확률밀도> dnorm(0) # (probability density)

[1] 0.3989423

누적확률> pnorm(1.96) # (cumulative probability)[1] 0.9750021

분위수> qnorm(0.975) # (quantile)[1] 1.959964

확률변량 또는 난수 생성> rnorm(5) # (random variates) ( )[1] -0.5425200 1.2078678 1.1604026 0.7002136 1.5868335

함수 난수 발생 시 초기값을 지정하는 것으로 이를 이용하면 결과의 임의성을# set.seed() : ,없앨 수 있음

> set.seed(1000)적용 시 아래의 결과는 일정함> digitrnorm(5) # set.seed()

[1] -0.44577826 -1.20585657 0.04112631 0.63938841 -0.78655436

Page 14: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

의 패키지에서 제공하는 분포는 다음 표와 같다 위의 정규분포의 예제와 같은 방법R {stats} .으로 함수 분포명 앞에 을 적용하여 사용한다R ( ) d, p, q, r .

표 에서 제공하는 확률분포와 함수[ 2.1] R

함수R 분포명 모수 디폴트값

norm 정규 mean, sd 0, 1

exp 지수 1/mean 1

gamma 감마 shape, 1/scale NA, 1

pois 포아송 lambda

weibull 와이블 shape

cauchy 코쉬 location, scale 0, 1

beta 베타 shape1, shape2

t student's t df

f Fisher's F df1, df2

chisq 카이제곱 df

binom 이항 size, prob

geom 기하 prob

hyper 초기하 m, n, k

logis 로지스틱 location, scale 0, 1

lnorm 로그정규 mean, sd 0, 1

nbinom 음이항

unif 균일 min, max 0, 1

wilcox 윌콕슨 순위합 통계량

signrank 윌콕슨 부호순위 통계량

다변량 정규분포는 패키지의 함수 또는 패키지의{MASS} mvnorm() {mnormt} rmnorm()함수 등을 이용한다.

Page 15: 2 R장 활용 - KOCWcontents.kocw.net/KOCW/document/2016/chungbuk/najonghwa/... · 2016-09-09 · 2.1.2 :함수의 반복 적용 메타함수 R apply은 자료 객체의 원소에

확률분포 그리기2.2.2

에서 확률분포는 함수를 이용하여 쉽게 그릴 수 있다 아래의 예제에 사용된 그래픽R curve() .함수의 옵션에 대해서는 장에서 자세히 다루고 있다3 .

> curve(dnorm(x), from=-3, to=3, main="Density of N(0,1)", ylab="")

옵션은 그림을 추가하여 그려줌> ## add=TRUE> d <-c(1, 5, 10)> for(i in d) curve(dchisq(x, df=i), 0, 20, add=TRUE)