R

ch 07 - 데이터 검토

개요

  • 수집된 데이터에 대해 정규성 검증을 하는 것은 중요하다.
  • 그런데, CB-SEMPLS-SEM의 기준 조건은 조금 상이하다.

정규성 분포 확인

  • Kolmogorov-Smirnov Test 또는 Shapiro-Wilk Test를 통해서 검증한다.
    • 귀무가설: 데이터분포를 정규분포를 이룬다, p-value > 0.05
  • 데이터가 치우쳐 있는 정도를 나타내는 왜도(skewness: S)와 첨도(Kurtosis: K)를 검토한다.
    • 첨도와 왜도가 -1보다 작거나 또는 +1 보다 크지 않으면 변수는 정규분포를 하고 있다고 판단한다.
  • 그러나, 이 부분은 분석 방법에 대해 조금 상이하다.
    • 회귀 분석: 엄밀하게는 2, 관용적으로 3을 사용함. (이일현, 2014)
    • SEM: 왜도가 2 이상이고, 첨도가 7 이상이면 비졍규분포로 봄 (West, Finch & Curran, 1995)

결측치

  • 설문문항에 의도적으로 혹은 부주의로 하나 이상의 문항에 대한 답을 하지 않았을 때 발생함.
  • PLS-SEM에서는 (1) 평균값대체(mean value replacement)와 (2) 사례별 제거 등이 있다.
    • 측정변수(지표변수)별로 5% 미만인 경우에는 평균값 대체를, 5% 초과시에는 사례별 제거방법을 사용한다.
    • 사례별 제거 방법은 권장하지 않는다. 설문지가 많으면 상관이 없지만, 대개의 경우 그렇지 못하기 때문에, 가급적이면 삭제는 권장하지 않는다.
    • 단, 결측치가 사례별로 15%를 초과하는 경우에는 데이터 파일에서 삭제하는 것이 좋다.

이상치

  • 이상치는 특정 설문 혹은 모든 설문에 대한 극단적인 응답값을 말한다.
    • 일반적인 기준으로는 표준화 변량값인 Z값과 표준편차가 $\pm$ 3 이상인 경우는 극단치에 해당한다.
    • 마할라노비스 거리 통계량$D^2$을 이용하여 판단할 수 있음. 만약, $D^2$값이 유의수준 0.01보다 작으면 해당 관측변수는 다변량 이상치로 판단할 수 있다.
    • 이상치는 PLS-SEM을 시행하기 전에 반드시 확인하고 문제가 되는 응답치가 포함되어 있는 경우네느 데이터 파일에서 삭제해야 한다.
    • 가장 일반적인 경우는 이상치가 소수인 경우로 이 때는 해당 이상치를 데이터 파일에서 제거한다.
    • 영향력이 큰 이상치가 있는 경우에는 PLS-SEM에서 OLS 회귀에 영향을 미치기 때문에 면밀한 검토와 평가가 필요하며 조치해야 한다.

다중공선성

  • 측정변수(지표)들 간에 다중공선성(Multicollinearity)가 있는지를 확인한다.
  • 완벽한 공선성(Collinearity)가 나타나는 경우는 거의 없으며 일반적으로 높은 공선성이 나타난다.
  • SmartPLS에서는 분산팽창인자(Variance Inflation Factor: VIF)를 이용하여 평가한다.
    • 모든 측정변수에 대해 VIF값이 임계치인 5보다 작으면 공선성은 존재하지 않는다.
    • VIF값이 5 이상인 경우 잠재적인 공선성 문제(Collinearity Problem)를 지니게 된다.

PLS-SEM vs. CB-SEM

  • PLS-SEMCB-SEM의 차이점은 아래와 같이 서술 할 수 있다.
구분PLS-SEMCB-SEM
사용목적예측이론 검증
표본 수30-100개 가능200-800개
데이터 파일CSV 파일모든 파일 가능
분포 가정분포 가정이 없음, 비모수적 기법엄격한 분포 가정(다변량 정규성이 있어야 함)
모델 복잡성수백 개의 측정 변수 있어도 가능측정변수의 수가 100개 미만
잠재변수당 측정변수 의 수1개 이상3~4개 이상
반영적 지표 + 형성적 지표매우 용이(모두 사용)주로 반영적 지표 사용
반영적 지표 + 형성적 지표매우 용이(모두 사용)주로 반영적 지표 사용
모델 적합도모델 적합도 보고 없음상세한 모델 적합도 보고 필요
오차항의 고려모델 구축 시 오차항(측정오차와 구조 오차)를 표시하지 않음오차항(측정오차와 구조오차)을 모델 구축 시 표시함
재귀모델과 비재귀모델재귀모델(일방향 인과관계)만 가능재귀모델과 비재귀모델 가능
잠재변수 산출잠재변수 점수의 산출 가능, 이 점수를 후속연구에 사용잠재변수 점수의 직접적인 추정이 불가능
모델 평가측정모델과 구조모델 동시에 설정하고 평가(동시분석법)측정모델을 이용해 개별 측정변수와 잠재변수의 신뢰도와 타당도를 분석한 후 구조모델을 통해 가설검증을 시행 (2단계 분석법)

Reference

신건권. (2018). 석박사학위 및 학술논문 작성 중심의 SmartPLS 3.0 구조방정식모델링. 서울: 청람.

ch 06 - 표본의 크기

개요

  • PLS-SEM작은 표본 크기에 의해 식별 문제가 발생하지 않으며 모델이 복잡하고 표본크기가 작은 상황에서도 높은 수준의 통게적 검증력을 가짐

  • 일반적으로 CB-SEM의 경우 표본 크기가 200개 이상이 필요한 것으로 알려짐

  • 반대로 PLS-SEM30-100개 정도의 소표본인 경우에도 적용할 수 있다.

    • 표본크기를 증가시키면 모델 추정의 정확성이 높아지나 표본이 250개 이상이 넘어가면 CB-SEM과 차이점이 없어진다.

최소 표본 크기

Chin(1988)Barclay, Higgins & Thompson(1995)는 최소표본크기 결정에 있어서 10배수 규칙(10 times rule)을 제안함.

  • 단일 잠재변수(구성개념)을 측정하는 데 사용된 형성적 지표 최대수의 10보다 커야 함
  • 구조모델에서 특정 잠재변수(구성개념)로 향하는 경로 최대수의 10배 보다 커야 함
  • 이러한 10배수 규칙에 의하면 PLS-SEM을 사용하는 데 있어서 최소한의 표본크기는 형성적 측정 모델과 반영적 측정모델이 모두 구조모델 속에 포함되어 있는 경우에는 두 기준 모두 적용해 판단한다.

ch 05 - 측정척도의 유형과 내용

개요

  • 데이터의 유형에는 크게 4가지가 있다.
    • 명목척도, 서열척도, 등간척도, 비율척도
  • 그중에서 PLS-SEM 분석 시에 필요한 척도는 등간척도와 비율척도이다.
    • 간혹, 범주형 변수의 경우 더미변수(Dummy Variable)로 변환하여 투입하기도 한다.

데이터의 유형

(1) 명목척도

  • 범주형 데이터로 측정된 측정대상으로 단순히 범주로 분류하기 위한 목적으로 숫자를 부여한 척도
    • 예시: 성별, 종교, 직업, 혈액형, 만족여부(예/아니오)

(2) 서열척도

  • 범주형 데이터로 명목척도의 기능뿐 아니라 각 범주 간의 대소관계, 순위(서열성)에 관하여 숫자를 부여한 척도(수학적 가감승제 계산 안 됨)
    • 예시: 학력, 건강상태 등

(3) 등간척도

  • 연속형 데이터로 절대적 영점(Absolute Zero)이 없으며 대상이 갖는 양적인 정도의 차이에 따라 등간격으로 숫자를 부여한 척도(수학적 가감승제 계산 가능)
    • 예시: 온도, 만족도(리커트척도), 충성도(리커트척도), 물가지수, 생산지수 등

(4) 비율척도

  • 연속형 데이터로 절대적 영점이 존재하며, 비율계산이 가능한 숫자를 부여한 척도(수학적 가감승제 계산 가능)
    • 매출액, 무게, 가격, 소득, 길이, 부피 등

통계기법의 선택

  • 변수의 성격에 따라 다른 통계기법이 선택될 수 있다.

(1) 범주형(종속변수) + 범주형 변수(독립변수)

  • 교차분석(카이제곱검증)

(2) 범주형(종속변수) + 연속형 변수(독립변수)

  • 판별분석, 군집분석, 로지스틱회귀분석

(3) 연속형(종속변수) + 범주형 변수(독립변수)

  • t-검증, 분산분석, 다변량분산분석

(4) 연속형(종속변수) + 연속형 변수(독립변수)

  • 상관분석, 회귀분석, 경로분석/구조방정식모델링분석

Reference

신건권. (2018). 석박사학위 및 학술논문 작성 중심의 SmartPLS 3.0 구조방정식모델링. 서울: 청람.

ch 04 - 반영적 지표와 형성적 지표

개요

  • 인과방향에 따라 지표를 반영적 지표(reflective indicator) 형성적 지표(formative indicator)로 구분한다. -반영적 지표는 잠재변수가 원인이 되고 측정변수들이 결과가 되는 지표로 잠재변수가 측정변수를 야기하는 것으로 가정함
  • 형성적 지표는 측정변수가 원인이 되고 잠재변수가 결과가 되는 지표로 측정변수가 잠재변수를 야기하는 것으로 가정함.
  • 화살표의 방향은 측정변수에서 잠재변수로 표시됨.

I. 반영적 지표와 형성적 지표

(1) 인과관계(화살표)의 방향

  • 반영적 지표: 잠재변수 $\rightarrow$ 측정변수(지표들)
  • 형성적 지표: 측정변수(지표들) $\rightarrow$

(2) 측정변수(지표)간 상관

  • 반영적 지표: 설문지법 적용 시, 각 설문문항은 유사한 것들로 구성되어 있어야 함

ch 03 - PLS-SEM 주요 개념

개요

  • PLS-SEM의 주요 개념 및 유사용어에 대해 살펴본다.
  • 영어로 논문을 써야하기 때문에, 한국어와 영어를 같이 표기했다.

주요개념

  • 잠재변수(Latent Variable): 직접 측정되지 않는 비관측변수(Unobserved Variable)로 측정변수를 통해 간접적으로 측정.
    • 잠재변인, 구인, 구성개념(construct), 차원(dimension), 요인, 이론변수라고도 하며 경로도에는 circle로 표시됨
  • 측정변수(Measured Variable): 직접 측정되는 관측변수(Observed Variable)로 잠재변수를 측정하기 위해 사용된 변수를 말함. (설문문항이 여기에 해당됨
    • 지표변수(Indicator Variable), 명시변수(Manifest Variable), 측정항목(Items)로 표기되며 직사각형 또는 정사각형으로 표시함
  • 외생변수(Exogenous Variable): 독립변수의 개념으로 다른 변수의 변화에 원인(Causes)이나 동기의 역할을 하는 변수로 경로도에서 화살표가 시작이 되는 모든 변수 말함
    • 잠재변수 개념과 결합되면 외생잠재변수(Exogenous Latent Variable)가 됨
  • 내생변수(Endogenous Variable): 종속변수의 개념으로 다른 변수에 의해 영향을 받는 변수이며 화살표를 받는 변수를 말함. 이는 잠재변수 개념과 결합되면 내생잠재변수(Endogenous Latent Variable)가 됨
  • 측정오차(Measurement Error): 측정변수에 포함되어 있는 오차로 잠재변수가 관측변수(측정변수)를 설명하고 난 나머지 즉 설명되지 않은 부분을 말함.
    • 오차항(error term), 잔차(residual)이라고 함. 보통 e로 표시됨.
  • 구조오차(Structural Error): 외생변수로 내생변수를 예측할 때 내생잠재변수에 발생하는 오차로 외생변수가 내생변수를 설명하고 난 나머지를 말함.
    • 방해오차(Disturbance, 방정식오차(Equation Error), 설명오차라고 함), 보통 d로 표시됨
  • 측정모델(Measurement Model, Outer Model): 잠재변수가 측정변수(지표)에 어떻게 연결되어 있는가를 나타내는 모델을 말한다. 이는 측정변수나 잠재변수의 신뢰도와 타당도를 분석하는 데 목적이 있음.
  • 반영적 측정모델(Reflective Measurement Model): 잠재변수가 원인이 되고 측정변수가 결과가 될 때의 측정모델을 말한다.
  • 형성적 측정모델(Formative Measurement Model): 측정변수가 원인이 되고 잠재변수가 결과가 될 때의 측정모델을 말한다.
  • 구조모델(Structural Model): 잠재변수 간의 인과관계를 나타내는 모형으로 가설을 검증하기 위한 모델.
  • 반영적 지표(Reflective Indicators): 특정모델에서 측정변수가 잠재변수로부터 화살표를 받는 측정변수들(혹은 지표들)을 말함.
    • 이 변수에는 측정오차가 존재하며 결과지표(effect indicator)라고도 함.
  • 형성적 지표(Formative Indicators): 측정모델에서 잠재변수가 측정변수들(지표들)에 의하여 영향을 받는 지표를 말한다. 이 변수에는 측정오차가 존재하지 않으며 원인지표(cause indicator)라고도 한다.
  • 인과관계(causation): 원인변수가 결과변수에 미치는 영향관계를 말하며 단방향 화살표로 표시한다.
  • 쌍방향적 인과관계(Reciprocal Causation): 쌍방향적 인과관계는 변수 서로 간 원인-결과를 반복하는 관계를 말함. 상관은 서로 관련되어져 있는 변수 간의 상관을 표시함.

Reference

신건권. (2018). 석박사학위 및 학술논문 작성 중심의 SmartPLS 3.0 구조방정식모델링. 서울: 청람.

ch 02 - 구조방정식의 기본 개념과 고려사항

개요

  • 기본적으로 다변량 분석
  • 1세대 분석 방법론
    • 군집분석, EFA, 분산분석, 다항회귀, 로지스틱 회귀분석
  • 2세대 분석 방법론
    • PLS-SEM and CB-SEM
  • 간단한 용어 정리
    • SEM - Structural Equation Modeling
    • CB - Covariance Based SEM
    • PLS - Partial Least Squares SEM (= PLS path Modeling)
  • CB-SEM의 주 목적은 실증적으로 검증 가능한 다중 변수들 간의 체계적 관계 확인
  • PLS-SEM은 주로 탐험적 연구에서의 이론발전에 주로 사용되며, 종속변수의 분산을 설명하는데 주 초점을 맞준다.
  • 본 논문에서는 필리핀에서의 스타트업 등에 관련된 논문 및 자료 수집에 한계가 있기 때문에 PLS-SEM 분석방법론을 채택하여 탐험연구에 준하여 분석을 진행한다.

There are two types of SEM: covariance-based SEM (CB-SEM) and partial least squares SEM (PLS-SEM; also called PLS path modeling). CB-SEM is primarily used to confirm (or reject) theories (i.e., a set of systematic relationships between multiple variables that can be tested empirically). It does this by determining how well a proposed theoretical model can estimate the covariance matrix for a sample data set. In contrast, PLS-SEM is primarily used to develop theories in exploratory research. It does this by focusing on explaining the variance in the dependent variables when examining the model. We explain this difference in more detail later in the chapter.

ch 01 - PLS SEM Intro

개요

  • 석사 학위 논문을 위해 작성하기 위해 만들었음
  • PLS SEM 모델링을 위한 R 패키지가 존재함
    • plspm: 2020년 5월 14일 R Cran에서 정식 패키지에서 내려감
      • 위 패키지는 원서 약 230페이지 되는 교재도 있음
      • 1차로 위 패키지를 고려했으나 5/14일 패키지가 내려간 이후 선택에서 제외시킴
  • 또한, SMART PLS라는 상용프로그램도 존재함
  • 특정 R semPLS와 위 상용 프로그램을 비교한 논문이 있었고, 다행히 두 프로그램의 결과값이 동일한 것으로 증명되었다.
    ref. Utilization of R Program for the Partial Least Square Model: Comparison of SmartPLS and R
  • 아직 확정지은 것은 아니지만, 향후 추가적인 논문을 진행한다면 위 2개의 패키지와 SMART PLS 상용 소프트웨어를 비교하는 논문도 괜찮을 것이라 생각함

교재

Sample Code

  • 패키지 로드
library("semPLS")
## Loading required package: lattice
  • Sample 데이터 불러오기
data("ECSIsm")
head(ECSIsm)
##      source        target        
## [1,] "Image"       "Expectation" 
## [2,] "Expectation" "Quality"     
## [3,] "Expectation" "Value"       
## [4,] "Quality"     "Value"       
## [5,] "Image"       "Satisfaction"
## [6,] "Expectation" "Satisfaction"
data("ECSImm")
head(ECSImm)
##      source        target 
## [1,] "Image"       "IMAG1"
## [2,] "Image"       "IMAG2"
## [3,] "Image"       "IMAG3"
## [4,] "Image"       "IMAG4"
## [5,] "Image"       "IMAG5"
## [6,] "Expectation" "CUEX1"
data("mobi")
head(mobi)
##   CUEX1 CUEX2 CUEX3 CUSA1 CUSA2 CUSA3 CUSCO CUSL1 CUSL2 CUSL3 IMAG1 IMAG2 IMAG3
## 1     7     7     6     6     4     7     7     6     5     6     7     5     5
## 2    10    10     9    10    10     8    10    10     2    10    10     9    10
## 3     7     7     7     8     7     7     6     6     2     7     8     7     6
## 4     7    10     5    10    10    10     5    10     4    10    10    10     5
## 5     8     7    10    10     8     8     5    10     3     8    10    10     5
## 6    10     9     7     8     7     7     8    10     3    10     8     9    10
##   IMAG4 IMAG5 PERQ1 PERQ2 PERQ3 PERQ4 PERQ5 PERQ6 PERQ7 PERV1 PERV2
## 1     5     4     7     6     4     7     6     5     5     2     3
## 2    10     9    10     9    10    10     9    10    10    10    10
## 3     4     7     7     8     5     7     8     7     7     7     7
## 4     5    10     8    10    10     8     4     5     8     5     5
## 5     8     9    10     9     8    10     9     9     8     6     6
## 6     8     9     9    10     9    10     8     9     9    10    10
  • 모형 적합
ECSI <- plsm(data = mobi, strucmod = ECSIsm, measuremod = ECSImm)
mvpairs(model = ECSI, data = mobi, LVs = "Expectation")

추천 시스템 패키지 소개 - recommenderlab

I. 개요

  • 추천시스템을 처음 배우는 접하는 사람들을 위해 준비한 입문 Tutorial이다.

  • 패키지 소개서에 있는 내용을 한글로 번역하였다.

  • This R package provides an infrastructure to test and develop recommender algorithms. The package supports rating (e.g., 1-5 stars) and unary (0-1) data sets. Supported algorithms are:

  • 이 R 패키지는 추천자 알고리즘을 테스트하고 개발할 수 있는 인프라를 제공한다. 이 패키지는 등급(예: 별 1-5개) 및 단항(0-1) 데이터 세트를 지원한다. 지원되는 알고리즘:

    • User-based collborative filtering (UBCF)
    • Item-based collborative filtering (IBCF)
    • SVD with column-mean imputation (SVD)
    • Funk SVD (SVDF)
    • Alternating Least Squares (ALS)
    • Matrix factorization with LIBMF (LIBMF)
    • Association rule-based recommender (AR)
    • Popular items (POPULAR)
    • Randomly chosen items for comparison (RANDOM)
    • Re-recommend liked items (RERECOMMEND)
    • Hybrid recommendations (HybridRecommender)
  • For evaluation, the framework supports given-n and all-but-x protocols with

Google Colab with R

I. 들어가며

  • 빅데이터 시대에 맞춰서 다양한 툴이 나오는 가운데, Google Colab은 가히 혁명적이라 할 수 있다.
  • 과거 높은 사양의 컴퓨터에서만 수행할 수 있었던 머신러닝과 딥러닝을 구글 코랩의 환경에서 무료로 배울 수 있는 기회를 구글이 제공하기 시작했다.
  • 간단하게 아래 소스코드를 실행하여 CPU와 GPU의 연산속도를 비교 해보자.

II. Google Colab with R

  • Google Colab은 매우 편리하다. 실제 강의를 시작하면서 파이썬 관련 모든 강의안은 Google Colab으로 제작중이다.
  • 문제는 현재로써는 Google Colab만 지원한다는 점이다.
  • RStudio가 개발용으로 매우 훌륭한 도구이지만, 교육 목적으로는 조금 부족한 감이 있다. (UI 관점에서)
  • 일단 환경이 다르면 강의하는 입장에서는 여러가지로 어렵다.
  • 그래서 이번에 온라인 Tutorial을 제작하면서, Google Colab에서 R을 실행하고 또한 이를 바탕으로 강의를 제작하기로 했다.

III. Set up

  • 다음 소스코드를 그대로 실행한다.
%load_ext rpy2.ipython
The rpy2.ipython extension is already loaded. To reload it, use:
  %reload_ext rpy2.ipython
  • 간단한 EDAJupyter에서 실행할 수 있다.

IV. R 소스코드 실행

  • 이제 간단하게 R 소스코드를 실행해보자.
  • 이 때, 임시적으로 %%R 매직 command를 활용한다.

(1) 패키지 설치

  • R에서 필요한 필수 패키지를 설치한다.
  • EDA를 위한 tidyverse 패키지와 머신러닝을 위한 caret패키지를 설치한다.
%%R
# 1. 패키지가 설치 function
install_pkgs <- function(pkg){
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) 
    install.packages(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}

pkgs <- c("tidyverse", "nycflights13", "mlbench")
install_pkgs(pkgs)
R[write to console]: Installing packages into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)

R[write to console]: trying URL 'https://cran.rstudio.com/src/contrib/nycflights13_1.0.1.tar.gz'
.
.

   tidyverse nycflights13      mlbench 
        TRUE         TRUE         TRUE 

(2) EDA with tidyverse

  • tidyverse 패키지를 활용하여 간단한 EDA를 작업해보자.
%%R
nycflights13::flights %>% 
  mutate(
    cancelled = is.na(dep_time),
    sched_hour = sched_dep_time %/% 100,
    sched_min = sched_dep_time %% 100,
    sched_dep_time = sched_hour + sched_min / 60
  ) %>% 
  ggplot(mapping = aes(sched_dep_time)) + 
    geom_freqpoly(mapping = aes(colour = cancelled), binwidth = 1/4)

png

R - Select Helper Functions

I. 개요

dplyr 문법에서 select에 대해 다룬다. 보통 select는 열 추출 함수로 소개되고 있다. 그런데, select 함수에는 열 추출을 할 때 도와주는 helper functions가 있는데, 간단하게 소개하고자 한다.

  • starts_with
  • ends_with
  • contains
  • matches
  • num_range
  • one_of

작은 도움이 되었기를 바란다.

II. 사전 준비

  • 본격적인 실습에 앞서서, 패키지를 로드 한다.
library(dplyr)
library(nycflights13)
  • flights 데이터셋의 변수들을 확인하자.
glimpse(flights)
## Rows: 336,776
## Columns: 19
## $ year           <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, …
## $ month          <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ day            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ dep_time       <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, 558, 558,…
## $ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, 600, 600,…
## $ dep_delay      <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -…
## $ arr_time       <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851…
## $ arr_delay      <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -…
## $ carrier        <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", …
## $ flight         <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, 79, 301, …
## $ tailnum        <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39…
## $ origin         <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EWR", "LGA"…
## $ dest           <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FLL", "IAD"…
## $ air_time       <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, …
## $ distance       <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733,…
## $ hour           <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, …
## $ minute         <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, …
## $ time_hour      <dttm> 2013-01-01 05:00:00, 2013-01-01 05:00:00, 2013-01-01 …
  • 총 19개의 변수들로 구성이 되어 있는 것을 확인 할 수 있다.

III. 다양한 Helpers 응용

  • 앞서 개요에서 소개한 것처럼 순차적으로 helpers 활용한 변수추출을 진행하도록 한다.
  • 필자는 간단하게 소개하는 것이기 때문에, 어떻게 응용할지는 각자 주어진 데이터에서 다시한번 응용하는 것을 추천한다.
  • help(select)를 실행하면 더 자세히 나와 있다.

(1) starts_with

  • 변수명의 prefix를 가져오는 것이다.
  • 예를 들어 알파벳 문자 a만 가져오도록 해보자.
flights %>% select(starts_with("a")) %>% glimpse()
## Rows: 336,776
## Columns: 3
## $ arr_time  <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849, 853…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…
## $ air_time  <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, 158, …
  • 만약 여기에서 ar로 변경하면, air_time 변수는 추출되지 않는다.
flights %>% select(starts_with("ar")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ arr_time  <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849, 853…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(2) ends_with

  • starts_with의 정확히 반대되는 개념이다. 변수명의 suffix를 기준으로 변수명을 추출한다.
flights %>% select(ends_with("y")) %>% glimpse()
## Rows: 336,776
## Columns: 3
## $ day       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…
  • y와 연관된 변수명은 3가지였다.
  • 그런데, 조금더 구체적으로 delay라는 글자를 기준으로 추출해보자.
flights %>% select(ends_with("delay")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(3) contains

  • 변수명에 특정 문자열이 있으면 추출할 때 유용하다.
  • 특정 문자열 el을 조회하는 함수를 작성하도록 한다.
flights %>% select(contains("el")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(4) matches

  • helper 함수 중에서 정규 표현식 입력이 가능한 유일한 helper 함수 이다.
  • 우선 아래코드를 확인해보자.
flights %>% select(matches("a{1}")) %>% glimpse()
## Rows: 336,776
## Columns: 10
## $ year           <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, …
## $ day            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ dep_delay      <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -…
## $ arr_time       <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851…
## $ arr_delay      <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -…
## $ carrier        <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", …
## $ tailnum        <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39…
## $ air_time       <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, …
## $ distance       <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733,…

(5) num_range

  • num_range는 변수명 중에서 A1, A2와 같이 코드화하여 정리하는 테이블에 변수명을 추출할 때 유용하다.
  • 아래코드를 확인해보자.
set.seed(1)
df <- data.frame(A1 = runif(10), 
                 A2 = runif(10), 
                 A3 = runif(10), 
                 A4 = runif(10), 
                 A5 = runif(10))

df %>% select(num_range('A', range = 2:4)) %>% glimpse()
## Rows: 10
## Columns: 3
## $ A2 <dbl> 0.2059746, 0.1765568, 0.6870228, 0.3841037, 0.7698414, 0.4976992, …
## $ A3 <dbl> 0.93470523, 0.21214252, 0.65167377, 0.12555510, 0.26722067, 0.3861…
## $ A4 <dbl> 0.4820801, 0.5995658, 0.4935413, 0.1862176, 0.8273733, 0.6684667, …

(6) one_of

  • one_of를 활용할 때는 vector를 응용하는데, 이 때 vector안에 있는 변수명과 매칭되는 테이블을 추출한다.
flights %>% select(one_of(c("tailnum", "year"))) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39463", "…
## $ year    <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2…

VI. Reference

출처: Select/rename variables by name