백인감자

[R언어/통계] R 환경구축 & 예제 본문

기타

[R언어/통계] R 환경구축 & 예제

백인감자 2016. 9. 30. 11:53

R이란?


R 프로그래밍 언어(줄여서 R)는 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.  R은 통계 소프트웨어 개발과 자료 분석에 널리 사용되고 있으며, 패키지 개발이 용이하여 통계학자들 사이에서 통계 소프트웨어 개발에 많이 쓰이고 있다.


R studio 란?


 RSutdio는 R 언어 기반의 통합개발환경 (IDE, Integrated Development Environment) 입니다.



환경구축



1. R 을 설치한다 . http://www.r-project.org/


2. R studio 를 설치한다. http://www.rstudio.com

R Studio는 코드 직접실행, 구문강조, 괄호 자동입력지원, 명령어 완성, 다양한 단축키, 데이터 보기 및 가져오기, 그래픽 조작, 프로젝트 관리, 버전 관리 등의 다양한 기능을 제공합니다. 


설치가 완료되고 RStudio 를 처음 실행하게 되면 아래와 같은 화면 구성이 나옵니다.




Rscript 파일을 하나 만들어줍니다.


아래의 화면이 RStudio 의 기본적인 화면구성이 됩니다.




Environment탭에는 데이터셋이 나옵니다. 데이터셋의 이름, 관측치 갯수, 변수 갯수가 나옵니다.




예제


  • 여러 종류의 그래프를 출력해본다.
  • R의 문법을 익혀본다.

10개의 값을 가지는 vector를 x라는 변수에 저장한다.



여기서 function c( ) 를 사용함으로서 command 를 입력하면 우측의 Environment 화면에 values 를 확인할 수 있다.

R에서 function c ( ) 는 일반적으로 C언어나 Java 등에서 사용되는 "="  즉, 대입 연산자로 쓰인다.


y라는 변수에 x^2/log(x+1) 값을 넣고 plot 함수를 실행해보면 아래와 같은 결과가 나온다. 



하지만 y값을 비교해보면 일반적인 log 와 값이 다르다는 걸 알 수 있는데 



이는 log 함수 에 대한 설명을 보면 R에서는 log 라는 것이 우리가 일반적으로 알고있는 밑이 e 인 ln 과 같다는 것을 확인 할 수있다.




Ctrl  + L : console  화면 clear 해준다.

rm(변수명) : 해당 변수 삭제


교재의 간단한 실습코드부터 살펴보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
library(MASS)
x <- c(1,2,3,4,5,6,7,8,9,10)
y <- x^2/log(x+1)
 
M1 <- rnorm(200,3,1)
M2 <- rnorm(200,3,10)
 
bivn.kde <-kde2d(M1,M2, n = 50)
op <- par(mfrow = c(2,2))//op라는 변수에 2행 2열의 그래프 레이아웃을 생성함
plot(x,y)
contour(bivn.kde)//Produce contour plots of M1 and M2.// Produce contour plots of M1 and M2.
image(bivn.kde)// Produce heat plots of M1 and M2.
persp(bivn.kde, phi = 10, theta =30,col="grey")//Produce 3D plots of M1 and M2.
par(op)
cs

1번째 line 은 MASS라는 패키지를 load 하는 것이다.

5,6번째 line은 크기가 20*10 이고 M1 은 평균이 3이고 표준편차가 1인 정규분포를 따르고

M2 는 평균이 3이고 표준편차가 10인 정규분포를 따르는 행렬을  랜덤한 값을 통해 만들어주는 것이다. 

rnorm 함수를 통해서 랜덤으로 만들 개수, 평균, 표준편차 순의 조건을 입력하면 M1,M2 를 만들 수 있다.


8번째 line의 kde2d 함수는  KDE(Kernel Density Estimation)를 의미하며 이는 히스토그램 확률밀도함수를 스무딩(smoothing)하게 만들어준다. 즉, 이산적인 그래프를 연속적인 그래프로 나타내준다고 생각하면 될 것 같다. 이 함수의 첫번째,두번째 인자는 plot 으로 나타낼 데이터를 의미하며 세번째 인자인 n값은  각 방향의 점의 개수라고 생각하면 된다. 점의 개수가 많을수록 그래프가 더 정밀하게 그려진다.


13번째 line은  perspective plot 즉, 3차원 그림 을 나타내는 것이다. 상하(phi), 좌우(theta) 를 각도(0~360) 이내의 숫자로 조절하면 된다.

간단한 예시 코드와 결과는 아래와 같다.

1
2
3
4
persp(bivn.kde, phi = 0, theta =0,col="grey")
persp(bivn.kde, phi = 90, theta =0,col="grey")
persp(bivn.kde, phi = 0, theta =90,col="grey")
persp(bivn.kde, phi = 180, theta =180,col="grey")
cs


다시 원래 실습으로 돌아가보면 14번째 line이 있는데.. 새로운 그래프 레이아웃을 생성하는 것이다.


14번째 line에 대한 설명은 추후에 수정하겠습니다. 전체 코드를 다 실행시키고 나면 plot은 아래와 같이 나온다.






참고

# R을 이용한 통계 프로그래밍 기초

# 4 난수 발생과 모의실험

# 4.1 연속분포

# 4.1.1 정규분포

rnorm(1, 100, 16) # 평균이 100이고 표준편차가 16인 정규분포에서 1개 난수 발생
rnorm(5, mean = 280, sd = 10) # 평균이 280이고 표준편차가 10인 정규분포에서 5개 난수 발생

pnorm(265.5393, mean = 280, sd = 10) # 평균이 280이고 표준편차가 10인 분포에서 X <= 295.5393의 확률

qnorm(0.05, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.05인 x
qnorm(0.95, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.95인 x
qnorm(0.975, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.975인 x

dnorm(0, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 x = 0의 확률

x = rnorm(100) # 평균이 0이고 표준편차가 1인 분포에서 난수 100개 뽑기
hist(x, probability = TRUE, col = gray(.9), main = "normal mu = 0, sigma = 1")
curve(dnorm(x), add = T)


# 4.1.2 t 분포

dt(2, df = 10) # 자유도 10인 t 분포에서 x = 3에서의 확률
pt(2, df = 10) # 자유도 10인 t 분포에서 x <= 3인 확률
qt(0.99, df = 10) # 자유도 10인 t 분포에서 누적확률분포가 99%인 x
rt(10, df = 10) # 자유도 10인 t 분포에서 난수 10개 발생

# 4.1.3 균일분포

dunif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 x = 0.5의 확률
punif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 x <= 0.5의 누적확률분포
punif(0.5, min = 0, max = 2, lower.tail = TRUE) # 최소값 0, 최대값 2인 균일분포에서 x <= 0.5의 누적확률분포, 만일 lower.tail = FALSE이면 x > 0.5의 누적확률분포
qunif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 누적확률이 0.5인 x값
runif(10, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 10개의 난수 발생

# 4.1.4 지수분포

dexp(3, rate = 2) # 평균이 1/2인 지수분포에서 x=3의 확률
pexp(3, rate = 2) # 평균이 1/2인 지수분포에서 x<=3의 누적확률
qexp(0.5, rate = 2) # 평균이 1/2인 지수분포에서 누적확률이 0.5인 x
rexp(10, rate = 2) # 평균이 1/2인 지수분포에서 10개의 난수 발생


op = par(mfrow=c(2,2)) # 행 2, 열 2로 분할

x = rt(1000, df = 5) # 자유도 5인 t 분포에서 1000개의 난수 발생
y = dt(x, df = 5) # 그에 해당하는 확률밀도
plot(x, y, sub = "t-dist") # 그래프

x = rnorm(1000, 0, 1) # 평균이 0이고 표준편차 1인 정규분포에서 1000개 난수 발생
y = dnorm(x, 0, 1) # 그에 해당하는 확률밀도
plot(x, y, sub = "표준정규분포") # 그래프

x = rexp(1000, rate = 1) # 평균이 1인 지수분포에서 1000개 난수 발생
y = dexp(x, rate = 1)
plot(x, y, sub = "지수분포")

x = rpois(1000, lambda = 3) # 람다가 3인 포아송분포에서 1000개 난수 발생
y = dpois(x, lambda = 3)
plot(x, y, sub = "포아송분포")

par(op)

# 4.2 이산분포

# 4.2.1 베르누이 분포와 이항분포

dbinom(0:5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 각 x 의 확률
pbinom(0:5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 각 x 의 누적확률
qbinom(0.5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 누적확률 0.5인 x
rbinom(3, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 3개의 난수 발생

# 4.2.2 포아송 분포

dpois(3, lambda = 3) # 람다가 3인 포아송분포에서 x = 3의 확률
ppois(3, lambda = 3) # 람다가 3인 포아송분포에서 x <= 3의 누적확률
qpois(0.6, lambda = 3) # 람다가 3인 포아송분포에서 누적확률이 0.6이 되는 x
rpois(10, lambda = 3) # 람다가 3인 포아송분포에서 10개의 난수 발생

plot(table(rpois(100, 3)) # 람다가 3인 포아송분포에서 100개의 난수 발생하여 빈도분석
, type = "h" # 그래프 형태는 수직선
, col = "red" # 색깔은 빨강
, lwd = 10, # 선두께는 10
, main = "rpois(100, lambda = 3)") # 제목


# 4.3 정규성 검정

# 4.3.1 히스토그램을 이용한 정규성 검토

op = par(mfrow=c(2,3)) # 2 by 3개의 그래프를 그릴 것

x = seq(6.5, 13.5, by = 0.01) # 정규분포를 그리기 위한 기초자료

for (i in 1:6) { # 6번 반복
y <- rnorm(1000, mean = 10, sd = 1) # 평균이 10이고, 표준편차가 1인 정규분포에서 1000개 난수 발생
hist(y, prob = TRUE, xlim = c(6.5, 13.5), ylim = c(0, 0.5)) # 히스토그램, 확률, x축 한계, y축 한계
lines(x, dnorm(x, mean = 10, sd = 1)) # 평균이 10이고 표준편차가 1인 정규분포 그래프 추가
}

par(op) # 2 by 3 그래프 마지막

# 4.3.2 정규확률그림

x = rnorm(20) # 평균이 0이고 표준편차가 1인 정규분포에서 20 난수발생
hist(x) # 히스토그램
qqnorm(x) # Q-Q 플롯
qqline(x) # Q-Q 라인

# Shapiro 검정 - 정규성 검정

x = rnorm(10) # 10개의 난수 발생
shapiro.test(x) # Shapiro 검정


# 여러 분포에서 발생한 난수를 이용하여 정규성 검정

op = par(mfrow=c(2,2)) # 2 by 2 분할 그래프

x = rnorm(100) # 정규분포에서 난수 발생
qqnorm(x, sub = "Normal") # Q-Q Plot
qqline(x) # Q-Q Line

x = runif(100, 0, 1) # 균일분포에서 난수 발생
qqnorm(x, sub = "Uniform") # Q-Q Plot
qqline(x) # Q-Q Line

x = rexp(100, 1) # 지수분포에서 난수 발생
qqnorm(x, sub = "Exponential") # Q-Q Plot
qqline(x) # Q-Q Line

x = rpois(100, 3) # 포아송분포에서 난수 발생
qqnorm(x, sub = "Poisson") # Q-Q Plot
qqline(x) # Q-Q Line

par(op) # 2 by 2 분할 그래프 끝

# 4.4 모의 실험

# 4.4.1 이항분포의 정규분포 근사

m = 100
p = 0.5

try.n = c(5, 10, 15, 30) # 시행 횟수

op = par(mfrow=c(2,2)) # 2 by 2 분할 그래프 시작

for(i in 1:4){ # 네 번 반복
n = try.n[i] # 시행 횟수 조절
res = rbinom(m, n, p) # 이항분포에서 m개의 난수발생
hist(res, prob = TRUE) # 히스토그램, 확률
curve(dnorm(x, n*p, sqrt(n*p*(1-p))), add = TRUE) # 곡선추가
}

par(op) # 2 by 2 분할 그래프 끝

# 4.4.2 중심극한정리(central limit theorem)와 모의실험(simulation)

m = 50
mx = rep(0, m) # 0이 50개 있는 벡터 생성
n.value = c(5, 10, 15, 30, 50) # 횟수

# 균일분포 난수들의 표본평균들의 정규분포화

plot(0, 0
, type = "n" # 그래프 형태 nothing, 즉 빈 그래프 생성
, xlim = c(0, 1) # x 축 값의 한계
, ylim = c(0, 10) # y 축 값의 한계
, ylab = "density" # y 축 라벨
, xlab = "mx" # x 축 라벨
, main = "uniform mean to normal") # 주 제목

for(k in 1:length(n.value)){ # 5회 반복

n = n.value[k]

for(i in 1:m){ # 50회 반복
mx[i] = mean(runif(n, 0, 1)) # 균일분포에서 n개의 난수발생, 평균계산, 저장
}

lines(density(mx) # 라인추가
, lty = k # 라인의 형태
, col = k) # 색깔의 종류

}


# 지수분포 난수들의 표본평균들의 정규분포화

plot(0, 0
, type = "n" # 그래프 형태 nothing, 즉 빈 그래프 생성
, xlim = c(0, 3) # x 축 값의 한계
, ylim = c(0, 3.7) # y 축 값의 한계
, ylab = "density" # y 축 라벨
, xlab = "mx" # x 축 라벨
, main = "exponential to normal") # 주 제목

for(k in 1:length(n.value)){ # 5회 반복

n = n.value[k]

for(i in 1:m){ # 50회 반복
mx[i] = mean(rexp(n, rate = 1)) # 지수분포에서 n개의 난수발생, 평균계산, 저장
}

lines(density(mx) # 라인추가
, lty = k # 라인의 형태
, col = k) # 색깔의 종류

}

프로그램 결과

> # R을 이용한 통계 프로그래밍 기초

> # 4 난수 발생과 모의실험

> # 4.1 연속분포

> # 4.1.1 정규분포

> rnorm(1, 100, 16) # 평균이 100이고 표준편차가 16인 정규분포에서 1개 난수 발생
[1] 115.8602
> rnorm(5, mean = 280, sd = 10) # 평균이 280이고 표준편차가 10인 정규분포에서 5개 난수 발생
[1] 274.6592 292.4493 278.5038 268.5236 281.6879

> pnorm(265.5393, mean = 280, sd = 10) # 평균이 280이고 표준편차가 10인 분포에서 X <= 295.5393의 확률
[1] 0.07407878

> qnorm(0.05, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.05인 x
[1] -1.644854
> qnorm(0.95, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.95인 x
[1] 1.644854
> qnorm(0.975, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 누적확률이 0.975인 x
[1] 1.959964

> dnorm(0, mean = 0, sd = 1) # 평균이 0이고, 표준편차가 1인 분포에서 x = 0의 확률
[1] 0.3989423

> x = rnorm(100) # 평균이 0이고 표준편차가 1인 분포에서 난수 100개 뽑기
> hist(x, probability = TRUE, col = gray(.9), main = "normal mu = 0, sigma = 1")
> curve(dnorm(x), add = T)


> # 4.1.2 t 분포

> dt(2, df = 10) # 자유도 10인 t 분포에서 x = 3에서의 확률
[1] 0.06114577
> pt(2, df = 10) # 자유도 10인 t 분포에서 x <= 3인 확률
[1] 0.963306
> qt(0.99, df = 10) # 자유도 10인 t 분포에서 누적확률분포가 99%인 x
[1] 2.763769
> rt(10, df = 10) # 자유도 10인 t 분포에서 난수 10개 발생
[1] -1.4084871 -0.8089772 -0.5935148 -2.6261923 -0.9957817 0.2826226
[7] 0.3196900 0.7430285 -0.7519106 0.8259090

> # 4.1.3 균일분포

> dunif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 x = 0.5의 확률
[1] 0.5
> punif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 x <= 0.5의 누적확률분포
[1] 0.25
> punif(0.5, min = 0, max = 2, lower.tail = TRUE) # 최소값 0, 최대값 2인 균일분포에서 x <= 0.5의 누적확률분포, 만일 lower.tail = FALSE이면 x > 0.5의 누적확률분포
[1] 0.25
> qunif(0.5, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 누적확률이 0.5인 x값
[1] 1
> runif(10, min = 0, max = 2) # 최소값 0, 최대값 2인 균일분포에서 10개의 난수 발생
[1] 1.4216475 0.9142103 0.5447351 0.9028850 0.6442939 1.9250584 1.9905732
[8] 0.8617541 1.8252440 0.4394071

> # 4.1.4 지수분포

> dexp(3, rate = 2) # 평균이 1/2인 지수분포에서 x=3의 확률
[1] 0.004957504
> pexp(3, rate = 2) # 평균이 1/2인 지수분포에서 x<=3의 누적확률
[1] 0.9975212
> qexp(0.5, rate = 2) # 평균이 1/2인 지수분포에서 누적확률이 0.5인 x
[1] 0.3465736
> rexp(10, rate = 2) # 평균이 1/2인 지수분포에서 10개의 난수 발생
[1] 0.07753687 0.01760280 0.47249418 0.17080055 0.55388220 0.08268597
[7] 0.13543911 0.31719901 0.02750894 0.01618359


> op = par(mfrow=c(2,2)) # 행 2, 열 2로 분할

> x = rt(1000, df = 5) # 자유도 5인 t 분포에서 1000개의 난수 발생
> y = dt(x, df = 5) # 그에 해당하는 확률밀도
> plot(x, y, sub = "t-dist") # 그래프

> x = rnorm(1000, 0, 1) # 평균이 0이고 표준편차 1인 정규분포에서 1000개 난수 발생
> y = dnorm(x, 0, 1) # 그에 해당하는 확률밀도
> plot(x, y, sub = "표준정규분포") # 그래프

> x = rexp(1000, rate = 1) # 평균이 1인 지수분포에서 1000개 난수 발생
> y = dexp(x, rate = 1)
> plot(x, y, sub = "지수분포")

> x = rpois(1000, lambda = 3) # 람다가 3인 포아송분포에서 1000개 난수 발생
> y = dpois(x, lambda = 3)
> plot(x, y, sub = "포아송분포")

> par(op)

> # 4.2 이산분포

> # 4.2.1 베르누이 분포와 이항분포

> dbinom(0:5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 각 x 의 확률
[1] 0.03125 0.15625 0.31250 0.31250 0.15625 0.03125
> pbinom(0:5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 각 x 의 누적확률
[1] 0.03125 0.18750 0.50000 0.81250 0.96875 1.00000
> qbinom(0.5, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 누적확률 0.5인 x
[1] 2
> rbinom(3, size = 5, p = 0.5) # 시행횟수 5, 성공확률 0.5인 이항분포에서 3개의 난수 발생
[1] 1 3 2

> # 4.2.2 포아송 분포

> dpois(3, lambda = 3) # 람다가 3인 포아송분포에서 x = 3의 확률
[1] 0.2240418
> ppois(3, lambda = 3) # 람다가 3인 포아송분포에서 x <= 3의 누적확률
[1] 0.6472319
> qpois(0.6, lambda = 3) # 람다가 3인 포아송분포에서 누적확률이 0.6이 되는 x
[1] 3
> rpois(10, lambda = 3) # 람다가 3인 포아송분포에서 10개의 난수 발생
[1] 3 3 6 3 2 2 6 3 6 5

> plot(table(rpois(100, 3)) # 람다가 3인 포아송분포에서 100개의 난수 발생하여 빈도분석
+ , type = "h" # 그래프 형태는 수직선
+ , col = "red" # 색깔은 빨강
+ , lwd = 10, # 선두께는 10
+ , main = "rpois(100, lambda = 3)") # 제목


> # 4.3 정규성 검정

> # 4.3.1 히스토그램을 이용한 정규성 검토

> op = par(mfrow=c(2,3)) # 2 by 3개의 그래프를 그릴 것

> x = seq(6.5, 13.5, by = 0.01) # 정규분포를 그리기 위한 기초자료

> for (i in 1:6) { # 6번 반복
+ y <- rnorm(1000, mean = 10, sd = 1) # 평균이 10이고, 표준편차가 1인 정규분포에서 1000개 난수 발생
+ hist(y, prob = TRUE, xlim = c(6.5, 13.5), ylim = c(0, 0.5)) # 히스토그램, 확률, x축 한계, y축 한계
+ lines(x, dnorm(x, mean = 10, sd = 1)) # 평균이 10이고 표준편차가 1인 정규분포 그래프 추가
+ }

> par(op) # 2 by 3 그래프 마지막

> # 4.3.2 정규확률그림

> x = rnorm(20) # 평균이 0이고 표준편차가 1인 정규분포에서 20 난수발생
> hist(x) # 히스토그램
> qqnorm(x) # Q-Q 플롯
> qqline(x) # Q-Q 라인

> # Shapiro 검정 - 정규성 검정 

> x = rnorm(10) # 10개의 난수 발생
> shapiro.test(x) # Shapiro 검정

Shapiro-Wilk normality test

data: x 
W = 0.9265, p-value = 0.4144



> # 여러 분포에서 발생한 난수를 이용하여 정규성 검정

> op = par(mfrow=c(2,2)) # 2 by 2 분할 그래프

> x = rnorm(100) # 정규분포에서 난수 발생
> qqnorm(x, sub = "Normal") # Q-Q Plot
> qqline(x) # Q-Q Line

> x = runif(100, 0, 1) # 균일분포에서 난수 발생
> qqnorm(x, sub = "Uniform") # Q-Q Plot
> qqline(x) # Q-Q Line

> x = rexp(100, 1) # 지수분포에서 난수 발생
> qqnorm(x, sub = "Exponential") # Q-Q Plot
> qqline(x) # Q-Q Line

> x = rpois(100, 3) # 포아송분포에서 난수 발생
> qqnorm(x, sub = "Poisson") # Q-Q Plot
> qqline(x) # Q-Q Line

> par(op) # 2 by 2 분할 그래프 끝

> # 4.4 모의 실험

> # 4.4.1 이항분포의 정규분포 근사

> m = 100
> p = 0.5

> try.n = c(5, 10, 15, 30) # 시행 횟수

> op = par(mfrow=c(2,2)) # 2 by 2 분할 그래프 시작

> for(i in 1:4){ # 네 번 반복
+ n = try.n[i] # 시행 횟수 조절
+ res = rbinom(m, n, p) # 이항분포에서 m개의 난수발생
+ hist(res, prob = TRUE) # 히스토그램, 확률
+ curve(dnorm(x, n*p, sqrt(n*p*(1-p))), add = TRUE) # 곡선추가
+ }

> par(op) # 2 by 2 분할 그래프 끝

> # 4.4.2 중심극한정리(central limit theorem)와 모의실험(simulation)

> m = 50
> mx = rep(0, m) # 0이 50개 있는 벡터 생성
> n.value = c(5, 10, 15, 30, 50) # 횟수

> # 균일분포 난수들의 표본평균들의 정규분포화

> plot(0, 0
+ , type = "n" # 그래프 형태 nothing, 즉 빈 그래프 생성
+ , xlim = c(0, 1) # x 축 값의 한계
+ , ylim = c(0, 10) # y 축 값의 한계
+ , ylab = "density" # y 축 라벨
+ , xlab = "mx" # x 축 라벨
+ , main = "uniform mean to normal") # 주 제목

> for(k in 1:length(n.value)){ # 5회 반복

+ n = n.value[k]

+ for(i in 1:m){ # 50회 반복
+ mx[i] = mean(runif(n, 0, 1)) # 균일분포에서 n개의 난수발생, 평균계산, 저장
+ }

+ lines(density(mx) # 라인추가
+ , lty = k # 라인의 형태
+ , col = k) # 색깔의 종류

+ }


> # 지수분포 난수들의 표본평균들의 정규분포화

> plot(0, 0
+ , type = "n" # 그래프 형태 nothing, 즉 빈 그래프 생성
+ , xlim = c(0, 3) # x 축 값의 한계
+ , ylim = c(0, 3.7) # y 축 값의 한계
+ , ylab = "density" # y 축 라벨
+ , xlab = "mx" # x 축 라벨
+ , main = "exponential to normal") # 주 제목

> for(k in 1:length(n.value)){ # 5회 반복

+ n = n.value[k]

+ for(i in 1:m){ # 50회 반복
+ mx[i] = mean(rexp(n, rate = 1)) # 지수분포에서 n개의 난수발생, 평균계산, 저장
+ }

+ lines(density(mx) # 라인추가
+ , lty = k # 라인의 형태
+ , col = k) # 색깔의 종류

+ }
>




출처: http://bhpark.tistory.com/60

'기타' 카테고리의 다른 글

[개발기초/공부] Learn C++ 설치 및 후기  (2) 2016.12.27
gnuplot 환경구축  (0) 2016.08.16
Comments