인공지능/R

R - 통계적 가설검정

bibibig_data 2021. 6. 9. 15:32

 

 


 

 

 

 

 


 

 

 


 

13장 _ 통계 분석 기법을 이용한 가설 검정

 

통계적 가설 검정이란?

기술 통계 - 데이터를 요약해 설명하는 통계 기법

추론 통계 - 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계기법

유의 확률 - 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률

 

 

t 검정 

두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 분석 기법

#### 13-2 ####

## -------------------------------------------------------------------- ##
library(ggplot2)
mpg <- as.data.frame(ggplot2::mpg)

library(dplyr)
mpg_diff <- mpg %>% 
  select(class, cty) %>% 
  filter(class %in% c("compact", "suv"))

head(mpg_diff)
table(mpg_diff$class)

t.test(data = mpg_diff, cty ~ class, var.equal = T) # t.test = t검정
                                                    # data = mpg_diff
                                                    # cty( = 도시 연비 )  class ( = 자동차 종류 )
                                                    # var.equal = T  집단 간 분산이 같다는 옵션

- t.test(data = mpg_diff, cty ~ class, var.equal = T)  # t.test = t검정

                                                                   # data = mpg_diff

                                                                   # cty( = 도시 연비 )  class ( = 자동차 종류 )

                                                                   # var.equal = T  집단 간 분산이 같다는 옵션

t.test 결과

- p-value가 0.05보다 작으므로 'compact와 suv 간 평균 도시 연비 차이가 통계적으로 유의하다'고 해석 할 수 있다.

- compact의 평균은 20,  suv의 평균은 13이므로  

  compact의 평균이 더 높다고 할 수 있다.

 


 

2) t 검정 예제 

R ( 휘발유 )를 사용하는 자동차와 P ( 고급 휘발유 ) 를 사용하는 자동차 간 도시 연비 차이가 통계적으로 유의한가?

mpg_diff2 <- mpg %>% 
  select(fl, cty) %>% 
  filter(fl %in% c("r", "p"))  # r:regular, p:premium

table(mpg_diff2$fl)

t.test(data = mpg_diff2, cty ~ fl, var.equal = T)

- p-value가 0.05보다 큰 0.2875이므로, 실제로는 차이가 없는데 우연에 의해 이런 차이가 관찰될 확률이

 28.75%라는 의미이다.

- 일반 휘발유와 고급 휘발유를 사용하는 자동차 간 도시 연비 차이가 통계적으로 유의하지 않다고 결론 내릴 수 있다.

- 고급 휘발유 자동차의 도시 연비 평균이 0.6정도 높지만 이런 정도의 차이는 우연히 발생했을 가능성이 크다고 해석.

 


 

 

303p

상관분석 

두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법입니다.

상관계수는 0~1사이의 값을 지니고 1에 가까울수록 관련성이 크다는 것을 의미합니다.

상관계수가 양수면 정비례, 음수면 반비례임을 의미합니다.

#### 13-3 #### 상관분석
library(ggplot2)
## -------------------------------------------------------------------- ##
economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce)

- p-value가 0.05미만이므로, 실업자 수와 개인 소비 지출의 상관이 통계적으로 유의하다고 해석 할 수 있다.

- 상관계수가 양수 0.61이므로, 실업자 수와 개인 소비 지출은 한 변수가 증가하면 다른 변수가 증가하는 정비례 관계임을 알 수 있다.

head(mtcars)
car_cor <- cor(mtcars)  # 상관행렬 생성
round(car_cor, 2)       # 소수점 셋째 자리에서 반올림해서 출력

install.packages("corrplot")
library(corrplot)

corrplot(car_cor)

상관행렬 히트맵

- 상관계수가 클수록 원의 크기가 크고 색깔이 진하다.

- 양수면 파란색, 음수면 빨간색 계열로 표현되어있다.

- 원의 크기와 색깔을 보면 상관관계의 정도와 방향을 쉽게 파악할 수 있다.

 

corrplot(car_cor, method = "number")

 

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))

corrplot(car_cor,
         method = "color",       # 색깔로 표현
         col = col(200),         # 색상 200개 선정
         type = "lower",         # 왼쪽 아래 행렬만 표시
         order = "hclust",       # 유사한 상관계수끼리 군집화
         addCoef.col = "black",  # 상관계수 색깔
         tl.col = "black",       # 변수명 색깔
         tl.srt = 45,            # 변수명 45도 기울임
         diag = F)               # 대각 행렬 제외


R 프로젝트 조편성

프로젝트 요구사항

  • 조원들과 상의 후 모두가 동의한 주제 선정
  • "참신" 한 분석 주제 선정 : [ 미친듯이 ^^; 자료 및 소스 조사]
  • [10대] OR [50대] 타겟 설정 PPT 작성
  • 그래프 사용 결과 출력
  • [DB 사용 오라클&MySQL ] OR [9장 분석 활용]
  • R Studio 사용

메일 : jino77_99@naver.com

  • 제출되어야 하는 결과물
  • 프로젝트 기획서 -> 6월 11일
  • 프로젝트 보고서 (예시 파일 참고) --> 6월 14일 수업 종료전
  • 발표용 PPT --> 6월 15일 오전 13시 까지
  • 제출 파일 이름 : 팀명_프로젝트주제.zip --> 6월 15일 수업 종료전

2021년 6월 15일 3시 30분 발표

  • 10분 정도 (Q&A 포함)
  • 시연 포함 [동영상 활용 가능]
  • 모든 발표 후 각조에 2개들 선정
  • 가장 많은 표를 받은 팀이 1등 나머지는 2등

사이트 관련


 

LOCALDATA - 지방행정인허가데이터개방

지방행정 인허가 데이터개방 의료기관, 의료기기 데이터 보기 동물, 축산 데이터 보기 게임, 공연, 관광, 문화기획, 노래방, 비디오, 숙박, 여행, 영화, 음악 데이터 보기 미용, 이용, 세탁소/빨래

www.localdata.go.kr

 

 


치킨집 분석

#서대문구에 치킨집이 많은 동은?
install.packages("readxl")
library(readxl)

ck <- read_xlsx("D:/rclass/치킨집_가공.xlsx")
head(ck)

#substr() 함수를 이용하여 소재지전체주소에 있는 11~15번째 문자 가져오기
addr <- substr(ck$소재지전체주소, 12, 16)

head(addr)

addr_num <- gsub("[0-9]", "", addr) #숫자제거
addr_trim <- gsub(" ", "", addr_num) #공백제거

head(addr_trim)

install.packages("dplyr")
library(dplyr)

#table() 함수를 이용해서 숫자 세기, 변수가 한개일때 도수분표표를 만들어줌
addr_count <- addr_trim %>% table() %>% data.frame()
head(addr_count)

install.packages("treemap")
library(treemap)

#treemap(데이터, index=인덱스 표시 열 제목, vSize=크기를 이용할 열 제목, vColor=컬러, title=제목)
treemap(addr_count, index=".", vSize="Freq", title="서대문구 동별 치킨집 분표")

arrange(addr_count,desc(Freq)) %>% head()

치킨집_가공.xlsx
0.05MB
11강 프로젝트1 - 치킨집.pptx
2.42MB

 

 

 


사이트 참고

 

서울특별시 (seoul.go.kr)

 

서울특별시 대기환경정보 (seoul.go.kr)

 

 


 

미세먼지 분석

 

#Project 02 지역별 미세먼지 농도 비교하기

install.packages("readxl") # readxl 패키지 설치 
install.packages("dplyr") # dplyr 패키지 설치

library(readxl) # readxl 패키지 로드

# dustdata.xlsx 파일을 불러온 후 dustdata_anal에 할당
dustdata <- read_excel("dustdata.xlsx")

View(dustdata) # 데이터 확인
str(dustdata) # 데이터 속성 확인

library(dplyr) # dplyr 패키지 로드

# 성북구와 중구 데이터만 추출 및 확인
dustdata_anal <- dustdata %>% filter(area %in% c("성북구", "중구")) 

View(dustdata_anal)

# dustdata_anal 데이터 세트에 yyyymmdd에 따른 데이터 수 파악
count(dustdata_anal, yyyymmdd) %>% arrange(desc(n))

# dustdata_anal 데이터 세트에 area에 따른 데이터 수 파악
count(dustdata_anal, area) %>% arrange(desc(n))

# area 값이 성북구인 데이터를 dust_anal_area_sb에 할당
dust_anal_area_sb <- subset(dustdata_anal, area == "성북구") 

# area 값이 중구인 데이터를 dust_anal_area_jg에 할당
dust_anal_area_jg <- subset(dustdata_anal, area == "중구")

# 데이터 확인
dust_anal_area_sb 
dust_anal_area_jg

# psych 패키지 설치 및 로드
install.packages("psych")
library(psych)

# 성북구의 미세먼지량에 대한 기초 통계량 도출
describe(dust_anal_area_sb$finedust)

# 중구의 미세먼지량에 대한 기초 통계량 도출
describe(dust_anal_area_jg$finedust)

par("mar")
par(mar=c(1,1,1,1))

# 성북구와 중구의 미세먼지 농도에 대해 boxplot을 통한 분포 차이 확인
boxplot(dust_anal_area_sb$finedust, dust_anal_area_jg$finedust,
        main = "finedust_compare", xlab = "AREA", names = c("성북구", "중구"), 
        ylab = "FINEDUST_PM", col = c("blue", "green"))

# dustdata_anal 데이터 세트에서 측정소명(area)에 따라 미세먼지 농도 평균에 대한 차이를 검증
t.test(data = dustdata_anal, finedust ~ area, var.equal = T)

12강 프로젝트2 - 미세먼지.pptx
1.28MB
dustdata.xlsx
0.06MB


install.packages("twitteR")
install.packages("ROAuth")

library(twitteR)
library(ROAuth)


library(twitteR) # 패키지 로드

#접속시 입력해야 하는 정보 예
#consumerKey = "0iApiCFYRk2VLXPvquUTvRj67"
#consumerSecret = "UCxXRCpPUBzcLEGqK0R1XhHo9aS2cC6goKm52sRy5p316EBMg4"
#accessToken = "74414052-7DLWvzEEVHhGqnfUhr6U4ioEc74oA0pQCpLFsPvhj"
#accessTokenSecret = "31FhCeVp7selgZxTdSJ6O6GpXSv5c6G7WypjjYDBwjxpD"

a = "4OGxbiGE8Z3tXWA9pSRsks7SC"
b = "izX15KJgzuWsi1XdgklrsQRqVz9qTVZWYdwE7z8JkV27psaE4Y"
c = "71181251-KSVuiSbLgF6IGsoePsZhqCI7kXvoLEo83Swgtxqam"
d = "trXrZaUrLldIQs7WyRH4MtCQnGEcKZxHtP93RR4ZKLjpf"
setup_twitter_oauth(a, b, c, d)

keyword <-enc2utf8("제주도") #한글로 데이터형 변환
bigdata <- searchTwitter(keyword, n=100, lang="ko") #한국어 100개 크롤링
head(bigdata)