BookmarkSubscribeRSS Feed

[SAS/R] 왜도와 첨도

Started ‎04-30-2024 by
Modified ‎04-30-2024 by
Views 605

본 게시글은 SAS와 R 코드를 비교하는 글로 왜도와 첨도를 구하는 방법을 비교하려고 합니다.

  • 왜도(skewness)

분포의 비대칭도를 나타내는 통계량으로 정규분포, T분포와 같이 대칭인 분포는 왜도가 0입니다.

왼쪽으로 긴 꼬리를 가지면 왜도는 음수 값을 가지고 오른쪽으로 긴 꼬리를 가지면 왜도는 양수 값을 가지게 됩니다.

꼬리 부분쪽에 많은 확률 값이 분포할 수록 왜도의 절대값은 커지게 됩니다.

 

 

image (3).png

 

 

  • 첨도(Kurtosis)

정규분포보다 얼마나 뾰족하거나 완만한지의 정도를 나타내는 척도입니다.

데이터가 중심에 많이 몰려 있을수록 뾰족한 모양이 되고, 고루고루 퍼지게 되면 넓게 퍼진 모양이 되게 됩니다.

데이터의 산포경향을 보여주기도 하며 중심에 얼마다 데이터가 집중적으로 몰려 있는가를 나타냅니다.

 

 

image (4).png

 

 

 

Q. train.csv에서 'SalePrice'컬럼의 왜도와 첨도를 구한 값과

SalePrice'컬럼을 스케일링(log1p)로 변환한 이후 왜도와 첨도를 구해 모두 더한 다음 소수점 2째자리까지 출력

> House Prices 의 train 데이터를 사용합니다.

 

 

[R]

 

library(e1071)
library(dplyr)

df <- read.csv('/content/sample_data/train.csv')

df %>%
  mutate(
  log_sp = log1p(SalePrice)
  ) %>%
  summarise(
  before_kur=kurtosis(SalePrice,type=2),
  before_ske=skewness(SalePrice,type=2),
  after_kur=kurtosis(log_sp,type=2),
  after_ske=skewness(log_sp,type=2)) %>% 
  sum

 

1. library(dplyr)

R은 오픈소스 프로그램으로 많은 유저들이 통계 도구들을 만들어 온라인 상에 무료로 기능을 쓸 수 있게 배포합니다.

패키지를 사용하기 위해서는 1) 패키지를 설치하고 2) 패키지를 로드 합니다.

1) insall.package(dplyr): 처음에 패키지를 설치하기 위해서 사용하는 명령문.

2) library(dplyr): 패키지를 설치한 후, 패키지를 불러오기 위한 명령문

dplyr 이란 패키지를 불러옵니다.

dplyr 패키지는 데이터 전처리에 특화된 패키지로 데이터를 처리하는 함수군으로 구성되어 있습니다.

%>% 체인 연산자 기호와 함께 데이터 전처리에서 사용됩니다.

2. read.csv

파일을 불러오는 명령문

3. log1p

데이터에 로그를 취하게 되면, 정규성을 높일 수 있다.

큰 수를 같은 비율의 작은 수로 바꿔주게 된다.

즉, 로그를 취하게 되면복잡한 계산을 지수로 변하게 되기 때문에 값이 작아지게 됩니다.

또한 로그를 취하게 되면서 왜도와 첨도를 줄여서 데이터 분석시 의미있는 결과를 도출합니다.

 

image (5).png

 

 

 

위 그림은 로그함수로 0 < x < 1 범위에서 기울기가 매우 가파른 것을 확인할 수 있습니다.

x의 구간은 (0,1)로 매우 짧은 반면, y의 구간은 (-∞,0)으로 매우 큽니다.

0에 가깝게 모여 있는 값들이 x로 입력되면 y값들은 큰 범위로 벌어지게 됩니다.

log변환에 +1 을 해주는 function 이 log1p입니다.

log안의 x값은 양수만 가능합니다.

하지만, 0에 가까운 양수의 경우 음의 무한대로 가까워지게 됩니다.

x값이 매우 작은 값으로 들어가게 되면 -Inf 로 결과가 출력됩니다.

이를 방지하기 위해 1을 더함으로써 0보다 큰 양수 값을 가지게 됩니다.

4. Kurtosis / Skewness

kurtosis와 skewness는 e1071 library 안에 있는 왜도와 첨도를 구하는 function입니다.

type은 2를 사용해서 정규분포에서 비편향적입니다.

[SAS]

 

/* 1. */
proc import datafile='/home/u45061472/train.csv'
            out=mydata
            dbms=csv
            replace;
run;

/* 2. */
proc means data=mydata n mean std skewness kurtosis;
    var Log_SalePrice;
run;

/*3.*/
data mydata;
    set mydata;
    Log_SalePrice = log1p(SalePrice);
run;


/* 4. */
proc means data=mydata n mean std skewness kurtosis;
    var Log_SalePrice;
run;

/*5./
data stats_sum;
    set stats;
    Sum_Skewness_Kurtosis = Skewness + Kurtosis;
run;

 

  1. PROC IMPORT

외부 데이터를 불러오는 명령문입니다.

  • DATA = : 파일 위치 또는 파일명을 지정.

  • DBMS = : 파일 형식을 설정.

  • OUT = : 원본 데이터는 그대로 유지되고, 원하는 데이터 형식의 데이터를 생성합니다.

  • REPLACE : 이미 데이터가 존재하면 데이터 세트를 덮어쓰는 것 입니다. 코드를 실행할 때마다 데이터 세트의 이름을 변경하거나 삭제할 필요가 없어서 실행 단계를 단순화 할 수 있습니다.

2. & 4. PROC MEAN

통계적 요약을 수행하는 명령문입니다.

  • DATA = : 작업할 데이터 셋 지정

  • var: 분석할 변수를 지정.

  • N: 결측값이 아닌 데이터 갯수

3. Data mydata ~

새로운 데이터셋인 mydata를 정의합니다.

set mydata; : mydata 셋을 순차적으로 읽음

Log_SalePrice = log1p(SalePrice); : mydata셋 안에 있는 saleprice 칼럼에 log값을 취한 후, 1을 더합니다.

log1p를 사용하는 이유는 위 R코드에서 확인해주시면 됩니다.

5. Data stats_sum ~

로그 변환한 왜도와 첨도와 기존 왜도와 첨도 값을 합한 새로운 stats_sum 데이터셋을 정의합니다.

 

 

Version history
Last update:
‎04-30-2024 06:51 AM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags