1 / 47

Overview

R. Overview. R 은 통계계산 (statistical computation) 및 자료의 시각화 (data visualization) 을 위한 공개용 소프트웨어로서 다음과 같은 특징을 가지고 있다 . 데이터에 대한 효율적인 조작과 저장 방법을 제공 배열 및 행렬에 대한 연산 기능 제공 데이터 분석을 위한 다양한 도구들을 제공 데이터 분석과 표현을 위한 다양한 그래픽 도구들을 제공 프로그램 개발 및 조작을 위한 프로그래밍 언어로서 S 를 지원

daria
Download Presentation

Overview

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. R Overview

  2. R은 통계계산(statistical computation) 및 자료의 시각화(data visualization)을 위한 공개용 소프트웨어로서 다음과 같은 특징을 가지고 있다. 데이터에 대한 효율적인 조작과 저장 방법을 제공 배열 및 행렬에 대한 연산 기능 제공 데이터 분석을 위한 다양한 도구들을 제공 데이터 분석과 표현을 위한 다양한 그래픽 도구들을 제공 프로그램 개발 및 조작을 위한 프로그래밍 언어로서 S를 지원 R은 Becker 등에 의해 개발된 S 언어의 계보를 잇고 있으며, S언어를 이용한 Insightful사의 S+는 R과는 달리 S언어를 이용한 상업용 소프트웨어이다. 다음의 인터넷 사이트를 통하여 관련 자료를 얻을 수 있다. http://CRAN.R-project.org Introduction to R

  3. R은 GPL(GNU Public License)하에서 무료로 이용할 수 있기 때문에 소프트웨어의 사용이나 변경에 대하여 아무런 제약이 부여되지 않는다. R은 널리 사용되는 거의 모든 운영체제(OS)하에서 운영할 수 있으며, 소스 형태를 받아 설치할 수도 있으나, 대부분 자신의 운영체제에 맞는 컴파일된 설치 파일을 내려받아 사용한다. R Installation

  4. Getting Started with R • 다음과 같이 텍스트 파일의 데이터를 저장한 후 이를 이용하여 그림과 요약통계량 및 단순회귀분석을 수행해 보도록 한다.

  5. Getting Started with R • 바탕화면의 아이콘을 더블클릭하여 R을 실행하도록 한다. 실행 아이콘 Command Prompt

  6. Getting Started with R • 데이터 파일로부터 데이터를 읽어 들인 후, 그들을 ex1.data란 이름의 data frame으로 저장하는 역할을 한다. ex1.data <- read.table(“C:\\ex1.txt”, header=TRUE) assignment sign 외부 데이터 파일을 읽어 들일때 사용하는 R의 내장함수 데이터 파일의 맨 첫 줄을 읽어 들여 변수이름으로 사용

  7. Getting Started with R • 저장된 data frame의 구성 요소의확인

  8. Getting Started with R • 요약 통계량을 출력하기 위하여 summary 함수의 사용

  9. Getting Started with R • R에서의 online help의 사용 : summary 함수에 대한 설명을 참조

  10. Getting Started with R • 간단한 plot의 생성 plot ( ACT ~ YEAR , data=ex1.data , pch=16 ) PLOT의 축을 형성할 변수의 지정 PLOT에 사용될 데이터의 지정 PLOT에 나타날 데이터 포인트에 대한 옵션 (DOT으로 표시)

  11. Getting Started with R • 생성된 plot

  12. Getting Started with R (7) lm함수를 이용한 단순회귀분석 사례 lm( ACT ~ YEAR , data=ex1.data) 분석 모형의 설정 분석에 사용할 데이터의 설정 result <- lm( ACT ~ YEAR , data=ex1.data) 분석 결과를 result라는 이름으로 저장

  13. Getting Started with R (8) 데이터의 편집 > data.entry(ex1.data)

  14. R의 종료와 환경설정 • R의 종료를 위해서는 명령문 프롬프트에서 q()를 실행하던가 메뉴로부터 “종료”를 선택함. • R에서 기본적으로 알아야 할 개념 가운데 하나가 작업공간(workspace)이다. 이러한 작업공간에는 사용자가 R을 이용하여 수행하는 자료와 분석 프로시져 등을 포함하게 된다. 따라서 사용자가 자신의 작업을 종료 후에도 이전 작업을 계속 진행하기 위해서는 작업공간을 저장해야 한다. 다음과 같은 방법을 순서로 자신이 원하는 작업공간을 생성할 수 있다. • R을 실행한 후 ‘파일’메뉴로부터 ‘디렉토리 변경…’을 선택한 후 나타난 윈도우로부터 사용자가 원하는 경로를 선택한 후 종료한다. • 종료과정에서 나타나는 작업공간 저장 여부를 묻는 질문에서 ‘예’를 선택한다. • 새롭게 변경된 디렉토리에 저장된 파일 가운데 ‘.RData’를 더블클릭함으로써 사용자가 지정한 위치로부터 이전과 같은 작업공간을 유지한 채 R을 시작할 수 있다.

  15. R Simple manipulation

  16. Vectors and assignment • R에서 사용하는 가장 간단한 데이터 구조(data structure)는 vector. • 벡터를 생성하기 위한 함수로는 c( )를 사용. (예) 10.4, 5.6, 3.1, 6.4, 21.7의 5개의 숫자를 x라는 벡터에 할당하기 위한 다음의 세 가지 표현방법은 모두 동일. > x <- c(10.4, 5.6, 3.1, 6.4, 21.7) > assign(“x”, 10.4, 5.6, 3.1, 6.4, 21.7) > c(10.4, 5.6, 3.1, 6.4, 21.7) -> x • 만약 다음과 같이 assignment가 생략된 표현인 경우는 화면에만 결과를 출력하고 데이터는 저장되지 않음. > 1/x • 이미 설정된 vector x에 를 이용하여 다음과 같이 설정할 경우에는 x의 원소 및 이에 대한 복사된 결과 및 0을 포함하여 모두 11개의 원소들로 이루어진 vector y가 생성. > y <- c(x,0,x)

  17. Vector arithmetic • 벡터에 대한 상수를 이용한 사칙연산 및 log, exp, sin, cos, tan, sqrt 등의 함수는 모두 해당 원소에 대한 연산을 의미. > 2*x : x의 모든 원소값에 대하여 2를 곱함. • 길이가 다른 두 벡터의 연산에서는 길이가 짧은 벡터의 원소들을 같은 길이가 되도록 값을 반복하여 사용. > x + y : 상수가 아닌 다른 벡터와의 사칙연산은 두 벡터의 같은 위치에 존재하는 원소들간의 연산을 의미. : 이 경우 x의 원소의 길이가 짧으므로 y의 원소의 길이가 같도록 만들어 연산을 수행하면서 동시에 나머지 자리에는 x의 이미 존재하는 원소값을 반복하여 사용함.

  18. Vector arithmetic • 벡터와 관련된 주요 함수 (1) max( ) 및 min( ) : 벡터의 최소값 및 최대값을 계산 (2) range( ) : 벡터의 최소값과 최대값을 동시에 계산하여 벡터로 넘겨줌 (3) length( ) : 벡터의 길이를 계산 (4) prod( ) : 벡터의 원소들의 곱을 계산 (5) sum( ) : 벡터의 원소들의 합을 계산 (6) mean( ) : 벡터의 원소들의 평균을 계산 (7) var( ) : 벡터의 원소들의 분산을 계산 (n-1로 나눔). 만약 행렬일 경우는 공분산 행렬을 계산 (8) sort( ) : 벡터의 원소들을 오름차순으로 정렬

  19. Generating regular sequences • R은 규칙을 갖는 일련의 수열 생성을 위한 여러 가지 방법을 제공 • 1:30 과 같은 표현은 c(1,2,3,…,30)과 같은 벡터를 생성 • 30:1 은 c(30,29,28,…1)과 같은 순서의 벡터를 생성 • 좀 더 일반적인 수열을 생성하기 위해서는 seq( )를 사용 • seq(2,10) 이란 표현은 2:10과 동일한 표현 • 좀 더 정확한 표현은 seq(from=2,to=10)을 사용 • from과 to외에도 by와 length, along 등 사용 가능 • seq(-5, 5, by=.2) : 는 -5부터 0.2씩 증가하여 5까지의 수열을 생성 • seq(length=51, from=-5, by.2) : -5부터 0.2씩 증가하여 51개의 수열을 생성 • along=vector을 사용하는 경우 설정된 벡터의 길이만큼 수열을 생성 • 관련 함수로서 rep( )를 사용할 경우는 다양한 방법으로 반복적인 벡터를 생성 • rep(x, times=5) : x 벡터를 5회 반복하여 새로운 벡터를 구성 • rep(x, each=5) : x의 각 원소를 우선 5회 반복하여 새로운 벡터를 구성

  20. Logical vector • R은 숫자로 이루어진 벡터 외에 TRUE 와 FALSE 라는 논리값을 이용한 벡터를 구성 가능 • 이들 논리값은 조건식을 통하여 생성 > temp <- x > 13 : temp는 x벡터와 같은 길이의 새로운 벡터가 생성되며 원소에는 x의 각 원소가 13보다 클 경우는 TRUE가 해당 조건식을 만족하지 못하는 경우에는 FALSE가 저장된다. • 이러한 조건식들로써는 부등호 (<, >, >=, <=, !=) 및 등호 (==)를 비롯하여 AND(&), OR(|) 등을 사용할 수 있다. • 만약 이미 존재하는 논리벡터에 대한 부정연산으로는 !를 이용

  21. Missing values • R에서 여러 가지 원인으로 발생하는 결측값의 경우는 NA로 표현된다. NA는 Not Available의 의미이다. • 이들 NA에 대한 연산 결과는 항상 NA이다. • is.na(vector) 함수 : 주어진 벡터와 동일한 길이의 논리 벡터를 생성한다. 주어진 벡터의 원소값이 NA일 경우는 TRUE값을 가지며, 그렇지 않은 경우에는 FALSE값을 갖는다. • x == NA와 같은 표현은 사용할 수 없다. 왜냐하면 NA는 어떤 값이 아니라 상황을 의미하기 때문이다. • 이미 주어진 자료의 결측값 외에 계산이 불가능한 경우에는 NaN이 할당된다. 이는 Not a Number라는 의미로서 0으로 나누는 경우와 같이 계산이 불가능한 경우에 할당된다. > 0/0 > Inf - Inf

  22. Character vector • R에서 벡터의 값으로 문자형 값을 입력할 수 있다. 이 경우 c( )함수 등을 이용할 수 있으며, 단지 문자값을 작은 따옴표 혹은 큰 따옴표를 이용하여 지정하면 된다. > labs <- c(“A”, “B”, “C”) • paste( ) 함수는 인수로 지정된 일련의 문자들을 연결하여 이들을 벡터로 생성하는 데 유용하게 사용된다. 문자열을 연결할 때 기본적으로 한 칸의 공란을 사용하지만 sep=string옵션을 이용하여 문자와 문자의 연결시 사용될 구분자를 지정할 수 있다. > labs <- paste(c(“X”, “Y”), 1:10, sep=“”) : 즉 c(“X”,”Y”)와 1:10의 두 벡터의 각 값들을 연결하여 새로운 벡터를 생성한 후 이를 labs라는 이름의 벡터로 지정하는 예이다. 벡터의 연산에서와 마찬가지로 짧은 벡터의 원소들을 더 많은 원소를 갖는 벡터의 길이만큼 각 원소값들이 반복되어 사용된다.

  23. Index Vectors • 벡터의 이름 다음에 연결하여 [ ]내에 일련의 벡터를 지정함으로써 벡터의 일부 원소들에 대한 선택이 가능하다. 이렇게 사용되는 벡터를 인덱스 벡터라 한다. 이러한 예들로는 다음과 같다. • Logical Vector : 논리 벡터를 사용하는 것으로써 이 경우 인덱스 벡터는 전체 벡터의 길이와 같아야 하며, FALSE값을 갖는 경우에 대응되는 원소는 제거되고 TRUE값을 갖는 원소만이 선택된다. > y <- x[!is.na(x)] • Vector of Positive Integral Quantities : 이 경우 인덱스 벡터는 원래의 벡터의 위치값을 갖고 있어 해당 위치의 원소들을 선택한다. > x[1:10] • Vector of Negative Integral Quantities : 이 경우 지정된 위치의 벡터의 값들만 배제된 원소들을 선택한다. > x[-(1:5)] • Vector of Character Strings : 주어진 벡터의 names속성을 이용하여 원소 선택 > fruit <- c(5, 10, 1, 20) > names(fruit) <- c(“orange”, “banana”, “apple”, “peach”) > lunch <- fruit[c(“apple”, “orange”)]

  24. Index Vectors • 인덱스 벡터는 assignment가 오른쪽에 지정될 경우, 해당 원소에 대해서만 연산이 이루어진다. > x[is.na(x)] <- 0 : 이 경우 벡터 x의 원소들 가운데 결측치 값을 갖는 경우에 대해서만 0을 지정하도록 한다. > y[y < 0] <- -y[y < 0] : y의 원소 가운데 0보다 작은 경우에 대해서 다시 -1을 곱한 값으로 대체하도록 하는 것이므로 이는 다음의 연산과 같은 결과를 제공한다. > y <- abs(y)

  25. Other Types of Objects • 벡터는 R에서 가장 중요한 객체 가운데 하나이다. 이외에도 R에서 지원하는 객체들로서는 다음과 같은 것들이 있다. • matrix : 벡터의 보다 일반화된 형태로서 다차원 벡터로서 생각하면 된다. • factor : 범주형 자료를 다루기 위한 데이터 구조이다. • list : 벡터와 동일하나, 그 원소들의 데이터 형태가 벡터처럼 모두 동일할 필요는 없다. 많은 경우 통계적 계산 결과를 넘겨주기 위한 경우에 많이 사용된다. • data frame : 행렬과는 달리 각 열마다 서로 다른 형태의 데이터 형태를 지원한다. 일반적인 데이터 행렬로 일컫는 형태가 R에서는 data frame이다. • function : R에서는 함수 역시 앞에서 언급한 데이터 유형을 표현하기 위한 객체들과 같이 객체로 고려된다.

  26. Array and Matrix • R에서 행렬을 생성 > xx <- matrix(1:6,ncol=3) > xx <- matrix(1:6.nrow=2) > xx <- matrix(1:12,ncol=4) • 행렬을 벡터로 변경 > x <- as.vector(xx) • 행렬의 차원은 dim()함수를 이용 • 행렬의 특정 원소의 추출 > xx[2:3,c(1,4)] > xx[2,] > xx[-2,] > xx[-2,-3]

  27. Array and Matrix • 벡터의 생성과 행렬로의 변환 > x<-1:24 > dim(x) <- c(2,12) > dim(x) <- c(3,4,2) • 행렬의 연산 • 행렬의 연산에서 사칙연산 기호를 그대로 사용할 경우 원소간의 연산을 수행하게 됨 • 행렬에 대한 사칙연산은 연산기호 양옆에 %를 추가한다. > x1 <- matrix[1:4,ncol=2] > x1*x1 > x1 %*% x1

  28. Dataframes • 대부분의 분석 데이터는 dataframe의 형태로 저장되어 사용 • dataframe의 특정 컬럼을 출력하기 위해서는 $을 사용 > ex1.data$ACT • dataframe을 구성하는 컬럼들의 이름을 출력하기 위해서는 names함수를 사용 > names(ex1.data) • 기존 dataframe에 새로운 컬럼의 추가 > ex1.data$yhat <- result$fitted.values

  29. R에서 GUI환경을 이용한 통계분석 Rcmdr이란 꾸러미(package)를 이용하여 상업용 통계 소프트웨어에서 제공하는 GUI환경에서의 통계분석을 수행할 수 있음. 명령문 프롬프트에서 다음과 같이 실행함. > library(Rcmdr)

  30. R에서 그래픽의 표현 • R에서 표현할 수 있는 여러 가지 그래픽 구현 결과에 대한 예를 다음과 같은 방법을 통해 살펴볼 수 있다. > demo(graphics)

  31. plot( )을 이용한 Scatter Plot의 표현 • 예제 프로그램 > data(iris) > str(iris) > attach(iris) > plot(Petal.Length,Petal.Width) > plot(Petal.Length ~ Petal.Width) • plot( )함수의 옵션 • 심볼의 변경 : pch • 심볼의 색과 크기 : col, cex • 축 이름의 변경 : xlab, ylab • 그래프 제목 : main

  32. Example 앞에 사용된 데이터에 대해서 품종에 따라 색을 달리 그리기 > plot(iris$Petal.Length,iris$Petal.Width, col=c("slateblue","firebrick","darkolivegreen”[as.numeric(iris$Speices)]) • 색의 종류는 colors( )함수를 호출함으로써 확인가능

  33. 여러가지 그래프 예제 다음의 프로그램을 수행함으로써 다양한 그래프 표현 결과를 확인 > boxplot(Petal.Length ~ Species, horizontal=T, boxwex=.5) > coplot(Petal.Width~Petal.Length | Species, col=as.numeric(Species), pch=as.numeric(Species)) > pairs(iris[,1:4], col=as.numeric(Species))

  34. R Programming

  35. Scripts and Functions • script : 일련의 S언어로 작성된 명령문의 집합 • function : 특정 연산 처리를 진행하기 위하여 작성한 script로 이루어져 있으며 일련의 처리결과를 사용자에게 제공하는 객체(object). • function example > f <- function(x,Alpha=0, Beta=1) + sin(x[1])-sim(x[2]-Alpha)+x[3]^2+Beta > g <- function(x,Alpha=0, Beta=1) { + out <- sin(x[1])-sim(x[2]-Alpha)+x[3]^2+Beta + return(out) + } • function의 정의는 function( )을 이용하며, 호출은 assign된 이름을 사용한다. > f(c(2,4,1)) > g(c(2,4,1))

  36. Functions Example • function은 내부에서 외부변수를 참조하는 것은 가능하지만, function 내부에서의 변화가 외부로 영향을 주지 않는다. > a <- c(1,2) > k <- function() { + cat(“Before : ”, a, “\n”) + a <- c(a,3) + cat(“After : “, a, “\n”) + } > k () > a • 결과를 확인하면 k라는 function내부에서 벡터 a를 변화시켰음에도 불구하고 function을 호출한 후 살펴본 벡터 a의 값은 변화가 없음을 확인할 수 있음.

  37. Looping • S언어에서는 여러가지 순환문을 사용할 수 있으며, 그 중 대표적인 것이 for 문이다. > for (i in 1 : 20) { + cat(i) + } • 동일한 결과를 얻기 위하여 다음과 같은 repeat문을 사용할 수 있음 > repeat { + g <- rnorm(1) + if (g > 2.0) break + cat(g); cat(“\n”) + }

  38. Conditions • Binary Operators : TRUE/FALSE > x <- c(1,2,4) > x < 3 > x[x<3] <- 0 > for(i in 1 : NROW(x)) { + if (x[i] < 3) { + x[i] <- 0 + } + } • 여러가지 Boolean Operators !, &, &&, |, ||, xor( )

  39. Conditions • Ternary Operators > if (x) { + y } else { + z } > ifelse(x,y,z) • Pausing / Getting Input • function 또는 script의 실행 중 이를 사용자의 입력이 있을 때까지 중지하고자 할 때 사용하는 명령문으로써 readline( )이 있다. > blah <- readline(“Press <ENTER> to Continue.”)

  40. Example • 최적화와 관련되어 사용되는 function으로써 nlm( )을 R에서 지원하며, 사용자가 정의한 함수에 대한 최소값을 계산한다. • Example (secant method) > g <- function(x,A,B) { + out <- sin(x[1])-sin(x[2]-A)+x[3]^2+B + out + } > result <- nlm(g,c(1,2,3),A=4,B=2) • Example (quasi-newton method) > g <- function(x,A,B) { + out <- sin(x[1])-sin(x[2]-A)+x[3]^2+B + grad <- function(x,A) { + c(cos(x[1]),-cos(x[2]-A),s*x[3]) + } + attr(out,”gradient”) <- grad(x,A) + return(out) + }

  41. 기타 • 명령 prompt window에 있는 결과를 저장하려는 경우 > sink(“mywork.txt”) > a > sink( ) • LaTeX을 파일로 저장하려는 경우 > reg <- lm(ACT ~ YEAR,data=ex1.data) > library(Hmisc) > latex(summary(reg$coef))

  42. Example • Bootstrap for the sample mean > x = rchisq(20,1) > mean(x) [1] 1.704550 > y = matrix(sample(x, 1000*20,rep=T),1000,20) > ym = apply(y,1,mean) > quantile(ym,c(0.025,0.975)) 2.5% 97.5% 1.100729 2.415550 > 2* mean(x) - quantile(ym,c(0.975,0.025)) 97.5% 2.5% 0.9935509 2.3083719

  43. R Simple Time Series Analysis

  44. Differences and Lags • ts data type : R에서 제공하는 시계열 자료를 위한 data type으로 동일이름의 function을 통해 벡터, 행렬, dataframe 등의 자료구조를 ts 유형으로 변경할 수 있다. • ts( )의 사용예 > AirPassenger > test <- ts(AirPassenger,start=(1949,1),deltat=1/12) > plot.ts(test)

  45. Differences and Lags • diff( )를 이용한 차분 > zt <- diff(test,lag=1,d=1) > plot.ts(zt) > zt <- diff(zt,lag=12,d=1) > plot.ts(zt)

  46. ARIMA • acf와 pacf의 표현 > par(mfrow=c(2,1)) > acf(zt) > pacf(zt)

  47. ARIMA • arima( ) 함수를 이용한 ARIMA 모형의 적합 > arma11 <- arima(zt,order=c(1,0,1)) > arma11 • 간단한 자기상관모형 또는 VAR모형인 경우는 ar( ) 함수 사용 • ARCH와 GARCH모형의 경우는 garch( ) 함수 사용 - tseries library 내에 존재 > garch(zt,order=c(0,1)) • 예측값의 계산 > predict(arma11,5) • Box-Pierce and Breusch-Godfrey Test > Box.test(arma11$resid) > Box.test(arma11$resid, type=“Ljung-Box”)

More Related