class: center, middle, inverse, title-slide .title[ # STATS101 ] .subtitle[ ## Type of Data ] .author[ ### Sanghoon Park ] .date[ ### University of South Carolina ] --- ## Types of Data 측정 수준(levels of measurement) + 명목형(Nominal) + 변수에 속한 값들이 서로 배타적이며(mutually exclusive), 구별이 가능하며, 순서를 가지지 않음. + 이항(binary) 변수 또는 이산(dichotomous) 변수 + 순서형(Ordinal) + 변수에 속한 값들이 순위/순서를 가짐. + 다만 상대적 순위만을 알려줄 뿐, 순위 간의 차이가 정확하게 어느 정도인지는 알려주지 않음. --- ## Types of Data + 등간형(Interval) + 변수의 값들 간의 차이가 서로 일정한 간격을 가짐. + 비율형(Ratio) + 절대영(absolute zero)이 존재 + 예) 경제성장율 0%일 경우, 경제가 '전혀' 성장하지 않았다는 것을 의미. 반면 등간형 변수인 온도가 0도라고 해서 온도가 존재하지 않는 것은 아님. 명목형-, 순위형-, 그리고 등간형 데이터는 보통 이산형일 가능성이 크고, 비율형 데이터는 연속형 자료일 가능성이 큼. + 다만 학자들은 대개 등간형과 비율형 데이터를 거의 같은 것처럼 취급하고는 함. --- ## Distributions ### Measures of Central Tendency #### 평균(Mean) $$ \bar{x} = \frac{\sum^{n}_{i=1}}{n} $$ + 일종의 균형점이라고 생각하면 이해가 편함. + 값들 간의 거리 차이의 제곱을 최소화한 결과라고 생각할 수 있음. + 위와 같은 평균을 산술평균(arithmetic mean)이라 하며 이외에도 기하평균(geometric mean), 조화평균(harmonic mean) 등이 있음. + 기하평균: `\(\bar{x} = \Big( \displaystyle \prod^{n}_{i=1}x_i\Big)^{\frac{1}{n}}\)` + 조화평균: `\(\bar{x} = \frac{n}{\frac{1}{x_1}+\frac{1}{x_2}+\frac{1}{x_3}+\cdots+\frac{1}{x_n}}\)` --- ## Measures of Central Tendency ### 평균(Mean) 그렇다면 평균을 왜 보는 것일까? + 평균은 중심(central)을 보여줄 수 있는 하나의 지표에 지나지 않음. + 예를 들어, `A`, `B`, `C` 학급의 영어 실력을 비교하고 싶다고 하자. + 아무런 추가 정보가 없을 때, 우리는 각 학급의 영어 실력을 무엇으로 파악할까? + 평균이란 어떠한 집단의 정보를 요약하여 그것을 대표하는 값이라는 의미를 가짐. + 우리는 잘 모를 때, 그나마 틀릴 가능성이 제일 낮은 값---평균을 제시하곤 함. + 만약 90점이 8명, 20점이 2명인 학급이 있다고 하자. 평균은 얼마일까? + 76점---이 평균이 과연 이 학급의 영어 실력을 잘 보여준다고 할 수 있을까? --- ## Measures of Central Tendency ### 중앙값(Median) & 최빈값(Mode) 만약 평균이 우리가 기대하는 대표값으로서 제대로 기능하지 못한다면 어떻게 될까? + 평균에 대한 대안들: 중앙값과 최빈값 + 중앙값: 말 그대로 중앙에 놓인 값. 5개의 값이 있다면 3번째에 해당하는 값이 중앙값이라고 할 수 있음. + 구체적으로는 편차(deviations)의 절대값의 합이 최소가 되게 하는 `\(x\)`의 값 + 평균과는 다르게 이탈치(outliers)에 의해 크게 영향받지 않음. + 최빈값: 데이터에서 가장 자주 나타나는 값 + 측정 수준에 상관없이 사용될 수 있다는 점에서 가장 범용성이 높음. + 그러나 실질적으로 분석적 함의를 크게 가지고 있지 못함. + 대개 이항 변수일 경우에만 사용 --- ## Variance ### 범위(Range)와 분위(Centiles) + 범위: 표본에서 최소값과 최대값 사이의 공간을 의미 + 분위: 특정한 값이 분포의 어디에 속하는지를 정량화하여 나타낸 결과 + 다른 측정지표들과는 달리, 범위와 분위는 모든 정보량에서 사용되지는 않음. + 예) 명목형 변수인 종교가 있다고 하자. 천주교, 기독교, 불교 등으로 코딩된 이 변수의 범위와 분위를 구할 수 있을까? --- ## Variance ### 편차(Deviations) + 편차( `\(x_i - \bar{x})\)`란 개별 값이 평균으로부터 떨어져 있는 단순 거리를 의미 + 분포에서 모든 편차의 총합은 0 + 모든 값의 편차를 제곱하여 그 평균을 구하면 표본의 분산(variance, `\(\sigma_x\)`) + 표준편차는 분산의 제곱근 값 + 분산이 편차를 제곱하여 더한 것의 평균이었다면, 그러한 분산에 제곱근을 씌워줌으로써 원래의 측정 단위로 원상복귀시키는 것과 같음. $$ s = \sqrt{\frac{\displaystyle \sum_{i=1}^{n}(x_i-\bar{x})^2}{n-1}} $$ + `\(n\)`이 아니라 `\(n-1\)`로 나눠주는 이유는 Bessel의 제안에 따른 것 --- ## Variance ### 오차(Errors) + 표본의 크기에 의해 가중치가 주어진(weighted) 표준 편차 $$ \sigma_x = \frac{s}{\sqrt{n}} $$ + 표본평균의 정확성을 보여주는 신뢰구간(confidence intervals)을 계산할 때 사용 --- ## Moment 분포에 대한 일련의 속성들을 보다 일반적으로 보여줌. + 어떤 분포의 `\(K\)` 번째( `\(K_{th}\)` ) 모멘트 = `\(M_K\)` = `\(E[(x-\mu)^k]\)` + `\(M_1 = E(x) = \bar{x}\)` (평균 또는 중심경향성을 보여주는 다른 지표) + `\(M_2 = E[(x-\mu)]^2 = \sigma^2\)` (분산) + `\(M_3 = E[(x-\mu)]^3\)` = 왜도 (분포가 어떻게 기울어있는지) + 만약 `\(M_3 \geq 0\)`, 오른쪽으로 긴 꼬리를 가진 분포(right-skewed) + 만약 `\(M_3 \leq 0\)`, 왼쪽으로 긴 꼬리를 가진 분포(left-skewed) --- ## Moment + `\(M_4 = E[(x-\mu)^4]\)` = 첨도 (kurtosis, 분포가 얼마나 뾰족한지) + lepto-: 매우 분포가 뾰족한 (한 쪽으로 집중되어 있는) + meso-: 분포가 비교적 정규형태로 잘 분포되어 있는 + platy-: 분포가 상대적으로 평평한 --- ### Histograms .panelset[ .panel[.panel-name[R Code] ```r library(car);library(ggplot2);library(tidyverse) Prestige %>% ggplot(aes(x = income)) + geom_histogram(color = "gray", binwidth = 2500) + scale_x_continuous(breaks = seq(0, 25000, 5000)) + labs(title = "Average Income in 1970 (dollars)") + theme_bw() + theme(plot.title = element_text(hjust = 0.5)) ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-2-1.png" style="display: block; margin: auto;" /> ] .panel[.panel-name[Explanation] + 히스토그램은 `\(X\)` 축에 따라 데이터의 값 플롯으로 나타냄. + 데이터의 밀도(빈도)는 `\(Y\)` 축에 나타남. + 모든 측정 수준의 변수는 히스토그램으로 표현할 수 있음. + 다만 히스토그램을 그릴 때, "균형"을 잘 파악하는 것이 필요 + 너무 많은 구간으로 데이터를 나누어서 막대를 그리게 되면 히스토그램을 통해 개략적인 추세를 파악하는 것이 어려워짐; 정보량이 과다 + 너무 적은 구간으로 데이터를 나눌 경우에는 히스토그램이 데이터에서 파악할 필요가 있는 정보를 감추어버림. + 주로 관측치 수에 제곱근을 취한 값( `\(\sqrt{N}\)` )을 구간의 기준(bin)으로 설정하고는 하지만 정해진 답은 없음. ] ] --- ### Kernal Density Plot .panelset[ .panel[.panel-name[R Code] ```r options(scipen=10000) Prestige %>% ggplot(aes(x = income)) + geom_histogram(aes(y = ..density.., color =), breaks=seq(0,max(Prestige$income),2000)) + geom_density(aes(color = "Adaptive bandwith"), kernel = "gaussian", linetype = 1, adjust = 0.8) + geom_density(aes(color = "Fixed bandwith"), bw = 1500, linetype = 2, position = "stack") + geom_rug(color = "grey") + scale_x_continuous(breaks = c(seq(0, 30000, 5000))) + scale_y_continuous(breaks = c(seq(0, 15e-5, 5e-5))) + theme_bw() + theme(legend.title = element_blank(), legend.text = element_text(size = 6), axis.text.y = element_text(angle = 90, hjust = 0.5), legend.position = c(0.75, 0.75)) ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-4-1.png" style="display: block; margin: auto;" /> ] .panel[.panel-name[Explanation] + 히스토그램의 구간(bin)을 부드럽게 만들어 연속적으로 이은 플롯 > 비모수적(Nonparametric) 밀도 추정치는 평균화와 평탄화(smoothing)를 통해 전통적인 히스토그램의 결함을 다룬다 `\(\dots\)` 공식적으로 밀도 추정치는 표본에 기초하여 어떤 변수의 확률밀도함수를 추정함으로써 얻을 수 있지만, 비공식적으로는 일종의 부드럽게 만든 히스토그램을 만들기 위한 기술적(descriptive) 기법이라고도 볼 수 있다 (Fox 2016: 33). + 히스토그램 위에 덧씌워 그릴 수 있음. + 다만 데이터의 각 관측치가 어디에 위치하는지를 보여주지 않기 때문에 별도의 플롯이 필요함 (rug, 러그). ] ] --- ### Q-Q Plot .panelset[ .panel[.panel-name[R Code] ```r with(Prestige, { par(mfrow = c(1, 2), mar = c(4, 4, 4, 4)) qqPlot(income, id=list(n=0), col.lines="black") plot(density(Prestige$income), main = "")}) ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-6-1.png" width="65%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Explanation] + 사분면(quadrant)에 따라 나눈 관측치들을 분포에 대한 이론적 기대와 비교하여 그린 플롯 + 가장 많이 사용되는 이론적 기대는 정규분포이지만, 분포 자체는 연구자 마음대로 설정할 수 있음 ] ] --- ### Boxplots .panelset[ .panel[.panel-name[R Code] ```r is_outlier <- function(x) { return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))} Prestige %>% rownames_to_column() %>% mutate(outliers = ifelse(is_outlier(income), rowname, NA_character_)) %>% ggplot(aes(x = "", y = income)) + geom_boxplot() + ggrepel::geom_text_repel(aes(label=outliers)) + theme_bw() + labs(x = "") ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-8-1.png" width="50%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Explanation] + 데이터의 요약 통계치를 보여주는 플롯 + 플롯의 크기는 최소, 최대값에 따름. + `box`는 100분위 중 25분위와 75분위 사이에 해당하는 결과를 보여줌. + 가운데 선은 중앙값(평균이 아님!) + 박스 위 아래의 구간(whisker)은 이탈치가 아닌 값들 중 최대/최소값을 보여줌. + 이탈치들은 점/동그라미로 표현됨 + 박스플롯으로 데이터의 분포 그 자체에 대해서는 알 수 없음. ] ] --- ### Scatterplots .panelset[ .panel[.panel-name[Plot] <img src="fig/scatter.png" width="70%" style="display: block; margin: auto;" /> ] .panel[.panel-name[Explanation] + 산포도(scatterplots)은 두 변수 간의 관계를 점으로 보여주는 플롯 + 일반적으로 연구대상인 변수를 `\(Y\)` 축에 놓고, `\(X\)` 축의 조건에 따른 변화를 살펴봄. + 산포도를 조금만 손보면 더 많은 정보량을 제공할 수 있음. + 왜냐하면 한 변수의 분포가 굉장히 한 쪽으로 치우친 경우, 일반적인 산포도로는 두 변수 간의 관계를 제대로 보여주기 힘들 수 있음. + 이 경우, 문제가 되는 변수를 원자료 그대로 쓰기보다는 로그변환(비율) 등을 통해 척도 변환을 해줄 필요가 있음. ] ] --- ### Scatterplots .panelset[ .panel[.panel-name[R Code] ```r library(patchwork) p1 <- Ornstein %>% ggplot(aes(x = assets)) + geom_density() + labs(x = "assets", subtitle = "(a)") + geom_rug() + theme_bw() p2 <- Ornstein %>% ggplot(aes(x = log10(assets))) + geom_density() + scale_x_continuous(labels = c(100, 1000, 10000, 100000)) + labs(x = latex2exp::TeX("log$_{10}$(assets)"), y = "", subtitle = "(b)") + geom_rug() + theme_bw() p3 <- p1 + p2 + plot_layout(ncol = 2) print(p3) ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-11-1.png" width="60%" style="display: block; margin: auto;" /> ] ] --- ### Scatterplots .panelset[ .panel[.panel-name[R Code] 이산형 데이터의 경우, 관측치들이 중첩되어 퍼져있는 정도를 파악하기 어려울 수 있는데, 이 경우 `jitter`로 해결. ```r library(ggExtra) p5 <- Vocab %>% ggplot(aes(vocabulary, education)) + geom_point(size = 2, alpha = 0.5) + geom_smooth(method = "lm", se = T, color = "black") + theme_bw() p5 <- ggMarginal(p5, type="boxplot", size = 15) p6 <- Vocab %>% ggplot(aes(vocabulary, education)) + geom_jitter(size = 2, alpha = 0.1) + geom_smooth(method = "lm", se = T, color = "black") + theme_bw() p6 <- ggMarginal(p6, type="boxplot", size = 15) library(gridExtra) grid.arrange(p5, p6, ncol = 2, nrow = 1) ``` ] .panel[.panel-name[Plot] <img src="D3S2_files/figure-html/unnamed-chunk-13-1.png" width="70%" style="display: block; margin: auto;" /> ] ] --- ## Transforming Data 왜 데이터를 변환(transform) 해야할까? + 한쪽으로 치우친 분포를 가지고 있는 데이터는 많은 관측치들이 좁은 범위에 모여있기 때문에 분석이 어려움. + 치우친 분포에서는 대개 비정상적으로 큰 값과 작은 값들이 나머지 값들을 살펴보기 어렵도록 짓누름(suppress). + 분포를 요약해서 보여주는 통상의 통계 방법들은 대개 평균을 이용 + 문제는 평균이 극단적인 값, 이탈치들에 민감한 통계치 + 따라서 서로 다른 척도/범위를 가진 변수들을 비교하기란 어려울 수 있음. --- ## Transforming Data <img src="D3S2_files/figure-html/unnamed-chunk-14-1.png" width="60%" style="display: block; margin: auto;" /> --- ## Transforming Data .panelset[ .panel[.panel-name[R Code] 거듭곱 변환(Power transformations)도 관계를 명확하게 보여주는 데 도움이 될 수 있음. > 단순한 비선형관계는 종종 `\(X\)`, `\(Y\)` 또는 둘 모두를 거듭곱 변환을 함으로써 바로잡을 수 있다. Mosteller와 Tukey의 's bulging rule은 선형화 변환을 선택하는 데 도움을 준다. <div class="figure" style="text-align: center"> <img src="fig/w3_fig1.jpg" alt="Illustration of Mosteller and Tukey's bulging rule" width="20%" /> <p class="caption">Illustration of Mosteller and Tukey's bulging rule</p> </div> ] .panel[.panel-name[R Code] ```r fakedataMT <- function(p=1,q=1,n=99,s=.1){ set.seed(1); X=seq(1/(n+1),1-1/(n+1),length=n) Y=(5+2*X^p+rnorm(n,sd=s))^ (1/q) return(data.frame(x=X,y=Y))} test <- fakedataMT(p=3, q=5) p7 <- test %>% ggplot(aes(y = y, x = x)) + geom_point(size=0.5) + labs(y = "y", x = "x") + theme_bw() p8 <- test %>% ggplot(aes(y = y, x = x^2)) + geom_point(size=0.5) + labs(y = "y", x = latex2exp::TeX("x$^2$")) + theme_bw() p9 <- test %>% ggplot(aes(y = y, x = x^3)) + geom_point(size=0.5) + labs(y = "y", x = latex2exp::TeX("x$^3$")) + theme_bw() p10 <- test %>% ggplot(aes(y = log(y), x = x^3)) + geom_point(size=0.5) + labs(y = "log(y)", x = latex2exp::TeX("x$^3$")) + theme_bw() p7 + p8 + p9 + p10 + patchwork::plot_layout(ncol = 2) ``` ] .panel[.panel-name[Plot] <div class="figure" style="text-align: center"> <img src="D3S2_files/figure-html/unnamed-chunk-17-1.png" alt="The effect of different power transformations of X and Y" /> <p class="caption">The effect of different power transformations of X and Y</p> </div> ] ] --- ## Transformation Data ### 정규화(Normalization) 마지막으로 살펴볼 데이터 변환: 정규화 & 표준화 + 둘 모두 서로 다른 척도/단위의 변수를 동일한 척도로 변환하여 비교할 수 있게 해줌. + 정규화: [0, 1] 사이의 범주로 데이터를 변환 + 각 값에서 최소값을 뺀 이후에 최대값에서 최소값을 뺀 값으로 나누어줌. + 최소최대값이 계산에 반영되는 정규화는 이탈치에 민감 + 대개 머신러닝에서는 사용하지만, 통계모델에서는 사용하지 않음. + `\(\mathrm{Normalization} = \frac{x - x_{\mathrm{min}}}{x_{\mathrm{max}} - x_{\mathrm{min}}}\)` --- ## Transformation Data ### 표준화(Standarization) 표준화(또는 z-스코어 정규화)는 변수를 0으로 중심화(centering)하고 분산을 1로 표준화한다는 것을 의미 + 표준화: 각 관측치들로부터 평균을 빼고 그 값들을 표준편차로 나눔 + 다른 척도를 가진 변수들이 동일한 표준정규분포의 특성을 가지도록 함. + 표준화 결과로 나타나는 최소값과 최대값은 변수가 어떻게 퍼져있는지에 따라서 다르고 이탈치(outliers)의 존재 여부에 매우 크게 영향을 받음. + `\(\mathrm{Standardization} = \frac{x - \bar{x}}{s}\)` --- class: center, middle background-image: url(https://raw.githubusercontent.com/pherephobia/usc_logo/main/UofSC_Primary_RGB_G.png) background-size: 300px background-position: 11% 15% # Thanks! ## Please do not hesitate to ask questions. Contacts for Instructor. | Contact | Sanghoon Park | | :-------------: | :----------------------------: | | <svg viewBox="0 0 512 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"></path></svg> | [sp23@email.sc.edu](sp23@email.sc.edu) | | <svg viewBox="0 0 576 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"></path></svg> | [sanghoon-park.com/](https://www.sanghoon-park.com/) | | <svg viewBox="0 0 448 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"></path></svg> | #305 Gambrell |