R 기초

*** R 기초 강의 내용을 정리한 글입니다.

==3.10==================================================

R 설치, 초기설정, 기초.

구글 검색 : R

English 버전으로 다운로드.

구글 검색 : Rstudio

IDE 다운로드 - Desktop 버전. free 다운로드

Untitled

*가능하면 관리자 권한으로 설치하라

[Rstudio]

새 스크립트] new file → Rscript

Untitled

초기 설정] tools → gobal option → code → editing -> soft-wrap R source files 체크
→ saving → change → utf-8로 변경

글씨 조정 기능] tools → gobal option → appearance

코드 실행] ctrl + Enter

코드 저장] ctrl + s

프로젝트 생성] 우측 상단 : project : none ⇒ new project ⇒ new directory ⇒ new project

⇒ 파일이름 : temp 생성

스크립트 저장] 스크립트 생성 ⇒ ctrl + s ⇒ 이름 : ch01 생성

라이브러리 설치] 구글 검색 : Rtools → using rtools on window → 64bit 버전 다운로드

→관리자 권한으로 install 실행. → 에러 발생 시) 단체 채팅 방 링크로 들어가 4번 영상을 참고.

→ 에러 발생 시) 원 드라이브 비활성화

*경로에 한글이 있어도 에러.

라이브러리 사용] 스크립트에 다음 내용을 복사 붙여넣기 → 실행 → 저장 → 종료
write('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', file = "~/.Renviron", append = TRUE)

→ temp 파일 켜기 → 스크립트에 다음 내용을 복사 붙여넣기
Sys.which("make")

→ 실행 → console 창에 sys.which(”make”) 가 출력되면 성공.

→ 다음 내용을 복사 붙여넣기
install.packages("jsonlite", type = "source")

→ 실행 → DONE (jsonlite) 출력 시 성공.

→ 다음 내용을 복사 붙여넣기
install.packages("tidyverse")

install.packages(”ggplot2”)

→ 실행 → 다운로드 완료 → 다음 내용을 복사 붙여넣고 각각 실행

library(ggplot2)
library(tidyverse)
iris <- iris

→ console 창에 iris←iris 가 출력되면 성공.→ 다음 내용을 복사 붙여넣기

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point()

→ 실행 → 우측의 plot에 그림이 출력되면 성공

[GitHub]

gitHub 회원가입

구글 검색 : git → git download → window → 64bit 다운로드

시스템 환경 변수 편집 → 시스템 환경 변수 → 시스템 변수 : path → 편집 → cmd있는지 확인

다음 링크 → code → 복사

https://github.com/dschloe/R_edu

바탕화면 → 우클릭 → git bench here → git 창에 다음 내용 입력.

→ 바탕화면 : R_edu 파일 생성 시 성공

$ git clone https://github.com/dschloe/R_edu.git

(cd Desktop에서 설치가 진행되어야 한다.)

바탕화면 → R_edu 파일 → R_edu 실행

[패키지]

여러 함수를 모아놓은 것

  • 패키지 설치 : install.packages(”패키지 이름”)
  • 패키지 구동 : library(패키지 이름)

다음 링크 → packeges → 원하는 것을 찾아 사용.

The Comprehensive R Archive Network (r-project.org)

예시) ggplot2의 패키지 → packages에서 ctrl + F 로 검색. → 메뉴얼 읽고 사용.

*ggplot2는 R참고서 201p에 기재되어있다.

  • 사용 예시) The Comprehensive R Archive Network (r-project.org) → packages → Table of available packages, sorted by date of publication → (원하는 패키지를 ctrl + F로 찾아서 선택) ggplot2 → reference manual : ggplot2.pdf 를 클릭 → (index에서 원하는 함수를 선택해 이동)

    → Example 항목을 찾아서 복사 → 스크립트에 붙여넣기
    
    → 스크립트 맨 위에 install.packagese(함수 이름) 작성 → 실행 → 사용 가능.
    

다음 명령을 스크립트에서 실행

library(ggplot2)

install packages(”writexl”)

library(writexl)

library(ggplot2) // 다운 받은 것을 가져와서 사용한다는 의미

ggplot()

*이후에 R 심화 과정을 원할 경우 참고 : 원서 https://r4ds.had.co.nz/

그래프 시각화 지원 https://www.r-graph-gallery.com/

[그래프 시각화 지원 plot 사용 ]

Basic ridgeline plot – the R Graph Gallery (r-graph-gallery.com)

위 링크의 코드 복사 → 스크립트에 붙여넣기 → 실행.

[치트 시트]

자주 사용하는 것들을 모아놓은 것.

Rstudio → help → cheat sheets → browser cheat sheets 또는 data visualization with ggplot2

위 과정대로 진행 시 cheat seet가 다운로드 됨.

RStudio Cheatsheets - RStudio

chapter 1. 기초 문법

1 / 100 * 30

a <- 1 / 100 * 30
b <- 1 / 1000

a <- “A그룹” # (x)

a <- “A그룹”
groupA <- “A그룹”
group_A <- “A그룹”
group.A <- “A그룹”

r_basics <- 3
r_basics

변수 유형 확인 예시

class(r_basics)
class(group_A)

temp <- TRUE
class(temp)

[3장 데이터 타입]

R을 이용한 공공데이터 분석 36p.

chapter 2.벡터 만들기

num_vector = c(1,2,3)
print(num_vector)
class(num_vector)

char_vector = c(“A”,”B”,”C”)
print(char_vector)
class(char_vector)

logical_vector = c(TRUE, FALSE, FALSE)
print(logical_vector)
class(logical_vector)

(1) 예외

temp = c(1, “1”, 2)
print(temp)
class(temp) // 모두 문자화

temp = c(1, FALSE, TRUE)
print(temp)
class(temp) // 모두 숫자화

temp = c(“A”,FALSE, TRUE)
print(temp)
class(temp) // 모두 문자화

####(2) 범주형 변수 ####
#비서열 척도 = 명목형 척도
location_vector = c(“서울”, “경기”,”대구”, “광주”)
fct_vector = factor(location_vector)
print(fct_vector)
class(fct_vector)

결과)

print(fct_vector)
[1] 서울 경기 대구 광주
Levels: 경기 광주 대구 서울
class(fct_vector)
[1] “factor”

#서열 척도
fct_vector2 = factor(location_vector,ordered=TRUE)
print(fct_vector2)
class(fct_vector2)

결과)

print(fct_vector2)
[1] 서울 경기 대구 광주
Levels: 경기 < 광주 < 대구 < 서울
class(fct_vector2)
[1] “ordered” “factor”

==3.11==================================================

dplyr 함수 사용하기 & 어떤 로컬에 있든 불러오기 & 시각화

install.packages(“패키지명”)

library(dplyr) # 데이터 가공

이름 <- c(“evan”, “윤석열”, “이재명”)
나이 <- c(20, 30, 40)
지각 <- c(TRUE, FALSE, FALSE)

students <- data.frame(name = 이름,
age = 나이,
atte = 지각)

str(students)

#경로확인
getwd()

#파일저장

write.csv(x = students, file = “학생.csv”)

#엑셀로 내보내기
install.packages(”writexl”)
library(writexl)

write_xlsx(x=student, path= ”학생.xlsx”)

#모두 지우기
rm(list=ls())

#파일 불러오기
getwd()

students <- read.csv(“학생.csv”)

****중요

Untitled

위 파란 부분이 가장 오래 걸리는 부분이다.

sql 문법과 유사하여, dplyr패키지를 배운 뒤,

sql을 배우면 보다 빠르게 쿼리 작성에 능숙해질 수 있음

Untitled

#dplyr 패키지

library(dplyr)

iris ← iris

str(iris)

iris %>% #~에서 # 150개, 5개의 변수

select(Sepal.Length, Sepal.width) %>% # 150개, 2개

filter(Sepal.Length > 6) %>% # 61개, 2개의 변수

..

..

head(10) → iris2 # 10개, 2개의 변수

?head()

구글 검색 : dplyr → 쿠라레? → 다음링크 → dplyr.pdf

CRAN - Package dplyr (r-project.org)

로우데이터=가공되지 않은 데이터

dplyr = 데이터 가공







과제: 교재 98p에서부터 명령어 하나씩 써보기

과제: 하루에 코딩 5,6 시간








강사님이 카톡으로 전송한 data, solution 파일 다운로드

r_edu 파일로 실행 → 다음과 같은 경로로 폴더를 연다 → 1_2_dplyr 실행.

Untitled

위 그림에서 ‘(톱니바퀴 모양) more’→ set as working directory # 경로 잡기

1_2_dplyr 파일에서 다음 내용을 실행

counties <- readxl::read_xlsx(“counties.xslx”, sheet = 1).

만약 에러나오면

다음과 같이 data/ 를 추가하거나, read의 괄호안에서 Tab으로 찾아라.

counties <- readxl::read_xlsx(“data/counties.xslx”, sheet = 1)

[restats 파일 부르기]

다음을 실행.

getwd()
stats <- read.csv(“data/restats.csv””) # restats.csv

[파일 미리보기]

glimpse(counties) 실행 → 안되면, library(dplyr) 실행 후에 다시 실행.

강사님이 카톡으로 전송한 public dataset 파일 다음 경로에 다운로드

바탕화면 → solution → data → () 여기에 다운로드.

새스크립트 : dplyr_practice 만들고 1 or 2 선택해서 해보기

  1. 책 99p에 있는 코드부터 알아서 실행해보기.

  2. 구글 검색:r-4 data → 5 data transformation 참고해서 실행해보기

QnA) 교재 104p 참고 → :: 에 대한 질문.

불러올 때는 더블콜론(::)을 이용해서 불러오시오

install.packages(”hflights”)

library(hflights) # 불러와서 씀

hflights = hflights::hflights # 임시로 잠깐 씀

둘다 비슷한 기능.

[불러오는 법]

  1. 경로는 more → set as working directory 에서 잡고
  2. 위치는 read.csv(””) 에서 tab으로 찾아 들어가라.

불러오는 법 ex)

  1. more → set as working directory
  2. 다음 같은 형식으로 실행.

getwd()

student <- read.csv(“source_2021/1_day_eda/data/student.csv”)

mpg1 <- read.csv(“source_2021/1_day_eda/data/public_dataset/mpg1.csv”)

강사님이랑

1_2_dplyr 스크립트의 내용을 따라감.

glimpse , select, arrange, filter, mutate 등 배움.

count, summarise 등 배움.

summarise에 앞서 엑셀의 피벗테이블 개념 숙지.

피벗테이블 = 엑셀에서 시트의 일부분을 엮어 세팅하는 정보 테이블

다음을 참고.

엑셀 | 피벗 테이블(Pivot Table) 만드는 방법 – ㈜소프트이천 (soft2000.com)

group by 사용 예시

counties %>%
select(state, population, private_work, public_work, self_employed) %>%
group_by(state) %>%
summarise(min_pop = min(population),
max_pop = max(population),
avg_pop = mean(population))

[시각화]

수많은 데이터를 분석해야 하지만 한 눈에 들어오도록 하는 것은 쉽지 않다.

방대한 데이터를 한 눈에 보이게 만드는 것이 시각화이다.

시각적 요소를 이용해 대량의 데이터를 강제로 인지시킨다고 한다.

*참고)

구글검색 : inf learn → 시각화

구글검색 : dacon → 시각화 경진대회 & 참가자 제출물 참고하기.

구직자를 위한 기업 트렌드 시각화 경진대회 - DACON

구글검색 : the R graph 갤러리, 유니콘

https://exts.ggplot2.tidyverse.org/gallery/

깃허브 : 강사님 깃

https://github.com/IndrajeetPatil/ggstatsplot

[시각화 코딩]

바탕화면 → R_edu → 금융데이터사이언스 스킬업.pdf → p51 참고

ggplot(data = data, aes(x = x축, y = y축)) + geon_poinrt() + ylim(3,6)

Untitled

코딩 예시)

library(ggplot2)

iris <- iris
str(iris)

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_abline() + 옵션

[시각화 저장]

위 코드 실행 → plot에 시각화 자료 출력. → export → save as image

→ directory → 바탕화면으로 설정 → save

Untitled

?명령어 → 실행 → 해당 명령어의 메뉴얼이 출력된다.

과제

==3.14==================================================

시각화.

나이팅게일

-간호사, 통계학자

-전쟁 중 사고 나서, 총이나 칼, 포탄 → 통념) 죽는 사람 많을 거라 생각.(현장 모르는 분)

 -위생&부상 → 실제) 죽는 사람이 훨씬 많음(현장을 아는 분) 

 -제안 : 위생 강화 & 야전 병원을 좀 더 짓자  → 설득 : 그래프를 이용한 시각적 통계

시각화 표 : “금융데이터사이언스 스킬업.pdf” 53p 참고.

Untitled

[시각화 실습]

질병 관련 통계.

temp 프로젝트 오픈. → 새 스크립트 → 0314.R 만들기.

바탕화면 → data → who_disease 불러와서 사용 .

데이터 불러오기

library(dplyr)
library(ggplot2)
library(readxl)

who_disease <- read_xlsx(“who_disease.xlsx”)

iris <- iris
glimpse(iris)

데이터 확인

glimpse(who_disease)

산점도 그려보기(의미없음)

ggplot(who_disease, aes(x=year,y=cases)) +
geom_point()

투명도 주기

ggplot(who_disease, aes(x=year,y=cases)) +
geom_point(alpha=0.3)

투명도,색 주기

ggplot(who_disease, aes(x=year,y=cases)) +
geom_point(alpha=0.3, colour = “red”, size=10)

그룹화

ggplot(who_disease, aes(x=year,y=cases,
colour=region))+
geom_point()

0314.R 에 다음 내용 복사 붙여 넣기.

R_edu → … → solution → 1_3_ggplot 의 ( 64 line~끝 line ) 까지 긁어서 실습.

install.packages(”waffle”)

install.packages(“carData”)

install.packages(“ggpol”)

install.packages(“ggcorrplot”)

install.packages(“mosaicData”)

install.packages(“visreg”)

install.packages(“gapminder”)

install.packages(“ggpubr”)

install.packages(“ggthemes”)

install.packages(“nycflights13”)

install.packages(“reshape”)

#install.packages(“gcookbook”)

install.packages(“ggthemes”)

*팁 : 구글 검색

  1. 영어로 검색하라.
  2. how to code 또는 how to write로 시작하라.

ex) how to write yaxis dollar sign ggplot2

[시각화 실습]

R_edu → … → solution → 1_4_ggplot 실습.

[옵션 이용하기]

*367p 참고

*메뉴얼 참고

R Markdown: The Definitive Guide (bookdown.org)

Rstudio → File 아래 (+)마크 클릭 → R Markdown

→ title, author 작성하고 OK → 생성됨 → 작명:report로 저장 → .rmd 확장자로 저장됨.

→ 톱니모양 옆에 ‘knit’ 클릭 → 관련 정보가 출력된다.

Untitled

R Markdown 언어 작성 → (+)마트 달린 ‘c’ 아이콘을 클릭 → R 선택

→ R 작성 가능 창이 출력됨 → 입력 후 실행 → knit에 반영됨.

다음과 같은 식으로 report.Rmd에 적고 knit을 출력해보아라.

웹에서도 knit을 확인할 수 있다.

knit은 desktop→data→report.html 클릭→ view in web

*팁

아래의 R작성 가능 창에 install.packages를 올리지 말고 따로 install만 해놓면

library만 작성해도 잘 돌아간다.

4. 데이터 전처리

1) 분석파일을 R로 불러오기

1
2
3
library(dplyr)
library(ggplot2)

2) 시각화 코드

  • 데이터를 불러와서 Sepal.Length, Sepal.Width 두 변수에 관한 산점도 시각화를 작성한다.
1
2
3
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point()

[배포]

knit 출력 → 우측 상단의 ‘publish’ → Rpubs (무료버전) → publish

→create an account → 내용을 임의로 작성하고 ‘continue’ → 주소를 복사해 카톡으로 전송

→본인 핸드폰으로 접속해본다. → 성공 시 knit 내용이 반영된 페이지에 접속됨.

→ 배포 : 페이지 게시 완료

[시각화 실습]

R_edu → … → solution → 1_5_ggplot 실습. → 125 line ~ end of document

구글링 : ggplot extensions → 마음에 드는 테마를 적용 가능.

→ 테마 이름을 참고하여 다운로드 ex) install.packages(“ggthemes”)

→ 사용 예시를 보고 사용 ex) p + theme_stata()

[시각화 실습]

R_edu → … → solution → 1_6_ggplot 실습 → 폰트 적용 연습

[R 참고서적]

추가적인 공부를 원할 때 참고하라.

-R data visualization

-데이터 시각화 교과서

-R을 활용한 데이터 시각화

==3.15==================================================

통계.

[데이터 분석]

-데이터수집

-데이터가공

-데이터시각화

-모델링 : 통계 모델링 / 머신러닝 모델링 / 딥러닝 모델링

-통계를 도대체 어디까지 알아야 하나?

-선형대수를 얼마나 알아야 하나?

-Top-Down방식 / Bottom-up방식

-모델링과 관련된 수식을 얼마나 알아야 하나?

[진로와 관련]

: 웹 개발자 → 라이브러리 자 갔다 쓰고, 배포 잘하면 끝.

: 데이터 분석가 → 마케터(기획) / 여론조사

-기본적인 통계(고재 8장 통계 분석)

-모수 검정 / 비모수 검정 —> 빈도 주의

-베이지안

: 머신러닝 엔지니어 / 딥러닝 엔지니어

-통계 / 선형대수 필요 / 모델링 수식 굳이…

-모형 만들고 배포를 잘해야 함(개발자)

-포폴 : 머신러닝 논문 정리(최신)

-라이브러리로 이미 만들어져 있음

-구글링 : paperswithcode → 딥러닝 관련내역

: 머신러닝 / 리서쳐 알고리즘 직접 구현

-최소 석사(관련 논문)

-네이버,카카오AI

-라이브러리를 직접 만드시는 분들

:Top-down 방식

-분석의 방향(수치 예측/분류 위주 예측)

-그룹간의 비교/인과관계

-산업분야

[ 기초 통계 ]

참고

temp → 2_day_stat_reggression → data → 기초 통계-평균,중간값,분산,표준편차.pdf

Untitled

deviation: 편차
x1 : 개별 관찰값
x : 평균

Untitled

vlariance : 분산 (= 편차 제곱의 평균)
x1: 개별 관찰값
x : 평균

분산값이 크다 —> 평균으로부터 멀어진 개별적인 데이터가 많다. = 흩어져있다.

분산값이 작다 —> 평균주위에 개별적인 데이터가 많다. = 평균쪽에 몰려있다.

즉, 분산은 평균으로부터 떨어진 거리를 나타냄.

모집단과 분산

Untitled

*참고

temp → 2_day_stat_reggression → data → 기초 통계-변동계수.pdf

Untitled

CV= 변동계수
RSD= 상대 표준 편차
평균 : u
표준편차 : o

install.packages(“tidyquant”)

install.packages(“reshape2”)

*참고

temp → 2_day_stat_reggression → data → 기초 통계-사분위수.pdf

Untitled

이상치 판별: 중심에서 많이 떨어진 값을 의미

이상치 하한 Q1 - 1.5x(Q3-Q1)

이상치 상한 Q3 + 1.5x(Q3-Q1)

[통계 실습]

슬랙 → #edu 채널 → 3/15에 게시된 ‘3교시 코드’ 참고

*참고

temp → 2_day_stat_reggression → data → 기초통계-z_score.pdf

Untitled

X = 원 데이터

M = 평균

SD = 표준편차

Untitled

*참고

temp → 2_day_stat_reggression → data → 기초통계-z_test.pdf

❑ 가설검정(Hypothesis Testing)

-평균에 대한 가설 검정
-잘못된 가정: 대한민국 성인의 키는 크다
-올바른 가정: 대한민국 성인의 평균 키는 170cm 이다 .

❑귀무가설 및 대립가설

o 귀무가설(H0)
-내용: 대한민국 성인의 평균 키는 170cm이다.
-통계적 표시법: H0: u = 170

o 대립가설(H1)

  • 내용
    • 평균 키는 170이 아니다. = 제1형 = 양측검정
    • 평균 키는 170보다 작다. = 제2형 = 단측검정 = 좌측 검정
    • 평균 키는 170보다 크다. = 제3형 = 단측검정 = 우측 검정

❑ 가설 선택의 기준 수립

1종 오류(type 1 error)

→ 제1종 오류는 우리가 모집단에 효과가 진짜로 존재한다고 믿지만

사실은 아무런 효과도 없는 것이다.

2종 오류(type 2 error)

→ 제1종 오류와는 반대이다. 즉, 모집단에 실제로 효과가 존재하지만

우리는 모집단에 아무 효과도 존재하지 않는다고 믿는 것이 제2종 오류이다.

o 유의수준

  • 제 1종 오류를 범할 확률의 최대 허용 한계 (유의수준 a)

표는 z_test.pdf 참고.

[통계 실습]

temp → 2_day_stat_reggression → source → 2_5_1_hypothesis_testing.R

temp → 2_day_stat_reggression → source → 2_5_2_one_sample.R

temp → 2_day_stat_reggression → source → 2_5_3_paired_t_test.R

*참고

temp → 2_day_stat_reggression → data → 기초통계-???

두 평균의 비교 (대응 표본 vs 독립표본)

단일 표본 T-Test

  • 차이가 있는가? (모집단 vs 표본)

두개 표본 T-Test

  • 대응표본 예시 : 신약 개발 시험 (사전 테스트 + 사후 테스트)

  • 독립표본 예시 : 남자와 여자의 몸무게 비교

공통 사항 검정

  • 정규성 검정 여부 확인

데이터 T-Test는 정규성 여부 확인을 전제로 만들어져서

단일 모집단 검정시에도 정규성 여부 조건을 확인해야 한다.

ex) 레벨이 부족할 때 고레벨 전용 아이템을 사용 못하는 것과 같다.

==3.16==================================================

R의 마지막

[전날 수업 내용 정리]

기초통계의 핵심 : 평균

편차 : 평균과 개별적인 데이터 사이의 거리

분사(variance) : 편차의 제곱합의 데이터 객수만큼 나눔

표준편차 : 분산에 루트 씌운다

표준편차 + 평균 활용

변동계수, z-score, 검정값, 표준오차

모수 검정

핵심: 두 그룹간의 평균의 차이를 검정

두 그룹간의 차이가 유의미하냐? 우연히, 어쩌다가 한 번 일어난거냐!

가정 : 데이터가 정규분표를 이룬다!

평균 비교

One Sample T Test : 모집단의 평균 ~ 샘플(표본)의 평균

대응표본 : 사전 표본의 평균(정책, 신약 투여 등등 시간이 지난 후) 사후 표본의 평균

독립표본 : A 그룹과 B그룹간의 평균 비교

결국은 평균을 비교하는 것.

귀무가설 ~ 대립가설

귀무가설 : 두 그룹가의 00평균의 차이가 없다!

대립가설 : 두 그룹간의 평균의 차이는 존재하더라!

t 통계량 / p-value

구글링 : 표준정규분포표 → 표를 보고 p-value값을 계산하면 된다

*팁

‘우리 나라 석사 학위 논문’

구글링 : RISS 하여 들어가서 찾아서 보면 된다.

논문은 별거 아니다.

다만, 데이터 수집하는 것이 가장 어렵다.

[기초통계-분산분석]

*참고

temp → 2_day_stat_reggression → data → 기초통계-분산분석.pdf

예를들어, 어느 학교의 3개의 반의 성적을 비교한다고 할 때, 3번을 비교해야한다.

분산분석

: 두 개 이상 다수의 집단을 서로 평균에서 분산값을 비교하기 위한 가설검정 방법

F분표

: 분산의 비교를 통해 얻어진 분표비율

계산식

Untitled

-1학년 전체 학생 인원의 분산 : 300명 ( 분산=100) // 표본 내 분산

-각 반의 분산 // 표본 평균 간 분산

1반의 분산 90

2반의 분산 70

.

.

가설수립

-귀무가설 : 3학년 1,2,3반의 평균은 모두 같다.

-대립가설: 적어도 1개반의 평균은 다르다.

F통계량 공식

-F = 검정통계량

-F통계량은 오차의 평균제곱합과 처리의 평균제곱합의 비인 MST/MSE

-이를 나타내는 두 개의 자요도(k-1, n-k)를 모수로 하는 F-분포를 따르는 F 통계량

F = MST/MSE~F(k-1,m-k)

-MSE(오차 평균 제곱합) : 처리’내’ 제곱합을 자유도로 나눈 값

-MST(처리 평균 제곱합) : 처리’간’ 제곱합을 자유도로 나눈 값

일원분산분석 모형

검정통계량 구하기

-분산 : 각 개별 자료값과 평균과의 차이

-총편차 : 개별자료와 전체 평균(y)과의 차

  • 총 제곱합 (SST) = 오차제곱합(SSE) + 처리제곱합(SST)

[통계 실습]

temp → 0314 스크립트 생성

분산분석

라이브러리 불러오기

library(dplyr)
library(ggplot2)

데이터 수집 및 가공

my_data = PlantGrowth
my_data$group <- ordered(my_data$group, levels=c(“ctrl”,”trt1”,”trt2”))

my_data %>%
group_by(group) %>%
summarise(
count = n(),
mean = mean(weight, na.rm= TRUE),
sd = sd(weight, na.rm = TRUE)
)

ggplot(my_data, aes(x=group, y=weight))+
geom_boxplot()

one=way ANOVA 테스트

오차제곱합(SSE)

ctrl <- my_data$weight[my_data$group==”ctrl”]
trt1 <- my_data$weight[my_data$group==”trt1”]
trt2 <- my_data$weight[my_data$group==”trt2”]

ctrl_mean = mean(ctrl)
trt1_mean = mean(trt1)
trt2_mean = mean(trt2)

각 처리별 제곱합

ctrl_sse = sum((ctrl-ctrl_mean)^2)
trt1_sse = sum((trt1-trt1_mean)^2)
trt2_sse = sum((trt2-trt2_mean)^2)

오차의 제곱합

sse <- ctrl_sse + trt1_sse + trt2_sse
sse

오차의 자유도

dfe <- (length(ctrl)-1) + (length(trt1)-1) + (length(trt2)-1)

처리의 제곱합 구하기 (SST)

total_mean = mean(my_data$weight)
ctrl_sst = length(ctrl) * sum((ctrl_mean - total_mean) ^ 2)
trt1_sst = length(trt1) * sum((trt1_mean - total_mean) ^ 2)
trt2_sst = length(trt2) * sum((trt2_mean - total_mean) ^ 2)

처리 제곱합

sst = ctrl_sst + trt1_sst + trt2_sst

처리 제곱합의 자유도

dft = length(levels(my_data$group)) - 1

전체 제곱합과 분해된 제곱합의 합 구하기

tsq = sum((my_data$weight - total_mean) ^ 2)
ss = sst + sse #총 제곱합

all.equal(tsq, ss) # TRUE

검정 통계량

mst = sst / dft
mse = sse / dfe

f.t = mst / mse
f.t

alpha = 0.5
tol <- qf(1-alpha, 2, 27)
tol

p.value = 1-pf(f.t, 2, 27)
p.value # 0.0159…

즉, 적어도 반 하나의 평균은 다르다.

위의 모든 과정을 아래의 코드로 축약 가능

res.aov <- aov(weight ~ group, data =my_data)
summary(res.aov) # p-value = 0.0159…

회귀식의 기본 공식

*참고

바탕화면 → R-edu → 금융데이터사이언스 스킬업.pdf → 101p 참고

회귀 : 이전 데이터를 바탕으로 앞으로의 일을 예상하는 것

예시) 날씨 & 온도 에 따른 아이스 아메리카노 판매량

온도, 강우, 위치 —> 설명변수, 독립변수

판매량 —> 종속변수, 반응변수

결과i = (model) + 오차i

model = 최소제곱법

model = 기울기 * 예측변수의 점수 + 절편 # 절편 = 기본으로(최소한도) 팔리는 아아 판매량

결정 계수( R-squared)

: 회귀모델의 추정된 회귀식이 관측된 데이터를 설명하고 있는 비율을 계수로 나타낸 것

: R 교재 186p 참고

구글링 : wikidocs → Must learning With R (개정판) = e-book → 통계 관련 내용 참고

Must Learning with R (개정판) - WikiDocs

스캔파일 → 앤디 필드의 유쾌한 R 통계학 → 머신러닝 있어서 어려움 & 에러도 섞여있을 것.

유쾌한 알 통계학.pdf - OneDrive (live.com) 강의실 pc에 다운로드 완료

  • Reference : R을 이용한 공공데이터 분석

R 통계분석

***해당 글은 “R을 이용한 공공데이터 분석”책의 8장을 정리한 글입니다.

[ 1. 분석 방법 ]

기술 통계

  • 평균, 최솟값, 최댓값, 중앙값과 같이 데이터의 특징을 알려주는 값
  • 기술통계는 Descriptive statistic

추론 통계

  • 변수 간의 관계를 파악하고, 변수간의 인과관계 또는 새로운 사실을 밝혀냄
  • 평균 차이 검정, 교차 분석, 상관관계분석, 회귀분석

평균차이 검정

  • 집단별로 평균의 차이가 실제로 있는가 검정
  • 독립표본 T검정

교차분석

  • 범주형 변수로 구성된 집단들의 관련성을 검정하는 통계 분석
  • 교차분석은 카이제곱(x^2)검정, 카이스퀘어검정, 독립성 검정이라고도 함

상관관계분석

  • 상관관계분석은 변수 간의 상관관계(correlation)를 알아보는 것
  • 변수간의 연관성
  • 한 변수가 변화하면 다른 변수도 변화하는 관계
  • 방향은 한 변수가 변화할 때 다른 변수가 같은 방향으로 변화하는지, 반대 방향으로 변화하는지를 의미
  • 변화의 강도와 방향을 나나나는 계수가 상관계수(r)
  • 상관계수는 -1~1 사이에 있으며, 수치가 클수록 영향을 주는 강도가 크다
  • ‘+’는 ‘정의 관계’, ‘-‘는 ‘부의 관계’ 또는 ‘역의 관계’에 있는 것을 의미
  • 상관관계 : -1 <= r <= 1

회귀분석

  • 상관관계로는 변수들의 관계를 알 수 있지만, 인과관계는 알 수 없음
  • 인과관계는 원인과 결과의 관계. 한 변수가 다른 변수에 영향을 주는 것
  • 영향을 주는 변수는 독립변수(independent variable)이고,
    영향을 받는 변수는 종속변수(dependent variable)이다
  • 독립변수와 종속변수 간의 인과관계를 분석하는 통계적 방법을
    회귀분석(regression analysis)이라고 한다
  • “월급이 증가하면 외식횟수가 늘어날 것”이라고 가정하면, 월급은 독립변수이고 외식횟수는 종속변수이다
  • 월급의 증감이 외식횟수에 미치는 영향을 확률적으로 분석하는 것이 회귀분석
  • 회귀분석에서 독립변수가 1개이면 단순회귀분석, 2개 이상이면 다중회귀분석이라고 함
  • 다중회귀분석은 종속 변수는 1개이며 독립변수가 복수인 경우
  • 복수의 독립변수들이 종속변수에 영향을 주는 정도를 분석하는 것

[ 2. 통계 검정 ]

가설

  • 가설(hypothesis)은 어떤 현상을 설명하기 위해 가정하는 명제
  • 증명되지 않은 추정
  • 가설에는 귀무가설과 대립가설이 있다
  • 귀무가설은 설정한 가설이 맞을 확률이 극히 적어서 처음부터 기각될 것으로 예상되는 가설
  • 대립가설은 귀무가설이 기각될 경우 받아들여지는 가설이며, 연구자가 검정하고자 하는 가설
  • 통계 검정은 통계적인 방법을 이용해서 대립가설이 맞는가를 검정하는 것
  • 두 집단의 평균 차이가 있는가를 알아보려 할 때, 귀무가설은 ‘평균 차이가 없다’이며, 대립 가설은 ‘평균 차이가 있다’이다.

유의수준

  • 가설검정의 결과는 유의수준에 의하여 결정
  • 유의수준(significance level)은 귀무가설이 맞는데도 대립가설을 체택할 확률
  • 즉 오류를 범할 확률. 차이가 없는 데도 있다고 할 확률이다
  • 통계 분석에서는 p-value(p값)f로 제시
  • p값이 0.01이라면 오류를 범할 확률이 1%라는 의미
  • 현실적으로 오류는 존재할 수 밖에 없기에, ‘허용할 수 있는 오류 범위’를 설정
  • 유의수준 5%는 오류를 5%까지 허용하겠다는 의미
  • 허용하는 유의수준의 범위와 정확성은 반대의 개념
  • 유의수준의 범위가 넓으면 연구 결과를 얻기가 쉽지만 결과의 정확성이 떨어진다
  • 통계분석을 하면 결과물에는 유의수준(p-value)이 적혀있다
  • 통계 분석 결과를 해석할 때는 먼저 유의수준이 0.05 이내인가를 보고, 결과가 통계적으로 유의미한지를 판단해야 한다
  • 유의수준이 0.05 이상인데도 결과가 유의미하다고 해석하면 매우 심각한 오류.
  • 유의수준의 반대 개념은 신뢰수준(confidence level). 신뢰할 수 있는 범위를 의미.
  • 유의수준 5% 이내라고 하면 신뢰수준은 95%

척도

  • 척도(scale)는 측정도구이며, 수치로 표시된다
  • 척도에는 명목척도, 서열척도, 등간척도, 비율척도 등 네 종류가 있다
  • 명목척도 : 측정대상의 특성이나 범주를 구분하는 수치. 운동선수의 번호를 생각하면 파악하기 쉽다.
    번호는 특정 선수를 의미. 성을 분류할 때 통상 남자를 1번, 여자를 2번으로 분류하는 것과 같이
    결혼유무, 종교, 인종, 지역, 계절 등을 표시할 때도 이용된다. 산술연산을 할 수 없다.
  • 서열척도 : 계급, 사회계층, 자격등급 등과 같이 측정대상의 등급순위를 나타내는 척도. 척도 간의 거리나 간격은 나타내지 않는다. 산술연산을 할 수 없다.
  • 등간척도 : 측정대상을 일정한 간격으로 구분한 척도이다. 서열뿐만 아니라 거리와 간격도 표시한다.
    온도, 학력, 시험점수 등. 덧셈과 뺄셈이 가능.
  • 비율척도 : 측정대상을 비율로 나타낼 수 있는 척도. 연령, 무게 등. 모든 수로 측정할 수 있어
    4칙 연산이 가능.

[ 3. 통계 분석 사례 ]

두 집단의 평균 차이 검정

  • 남녀 등 두 집단의 평균 차이를 분석할 때는 독립표본 t검정을 한다

  • R에서는 내장된 t.test()함수로 한다

  • 독립변수는 명목척도이며, 종속변수는 등간척도 또는 비율척도이어야 한다.

  • t.test()함수 사용 방식은 2가지
    방법1. t.test(data=데이터세트,종속변수(비교값) ~ 독립변수(비교대상))
    방법2. t.test(데이터세트$종속변수(비교값) ~ 데이터세트$독립변수(비교대상))

  • 예제파일인 mpg1.csv의 trans변수에는 기어변속방법으로 auto(자동식)와 manual(수동식)등 두 방식이 있다.
    두 방식에 cty 평균에 통계적으로 유의미한 차이가 있는지 알아보자.
    cty는 도시에서 1갤런당 달리는 거리.
    독립변수는 trans이며, 종속변수는 cty이다.
    가설은 다음과 같이 설정한다.

    • 귀무가설(H0) : auto와 manual의 cty평균은 차이가 없다.
    • 대립가설(H1) : auto와 manual의 cty평균은 차이가 있다.
1
2
mpg1 <- read.csv("mpg1.csv")
t.test(data=mpg1, cty~trans) #t.test(mpg1$cty~mpg1$tran)도 같음
1
2
3
4
5
6
7
8
9
10
11
## 
## Welch Two Sample t-test
##
## data: cty by trans
## t = -4.5375, df = 132.32, p-value = 1.263e-05
## alternative hypothesis: true difference in means between group auto and group manual is not equal to 0
## 95 percent confidence interval:
## -3.887311 -1.527033
## sample estimates:
## mean in group auto mean in group manual
## 15.96815 18.67532
  • 결과를 보면 p-value=1.263e-05 임을 알 수 있으며 이 값은 1.263/100000 < 0.05 이다.
    유의수준이 0.05보다 적기 때문에 유의수준 허용조건(p<.05)을 총종한다.
    결과의 ‘alternative hypothesis : true difference in means is not equal to 0’는
    ‘대립가설 : 평균 차이가 있다’ 라는 의미.

교차분석

  • 교차분석은 범주형 변수들이 관계가 있다는 것을 입증하는 것

  • 평균의 차이가 아니라, 비율에 차이가 있는지를 검정

  • 교차분석 검정은 R의 chisq.test() 함수 사용

  • mpg1.csv를 mpg1로 불러온다. mpg1에 있는 trans(기어 변속방식)변수의 범주에 따라 drv(구동방식)
    범주의 비율에 차이가 있는가를 알아본다. 연구가설은 다음과 같이 설정.

    • 귀무가설(H0) : trans에 따라 drv의 차이가 없다.
    • 대립가설(H1) : trans에 따라 drv의 차이가 있다.

    우선 table() 함수와 prop.table()함수로 교차분석을 해서 trans에 따른 drv의 빈도와 비율을 알아본다.

1
2
3
mpg1 <- read.csv("mpg1.csv", stringsAsFactors = F)

table(mpg1$trans, mpg1$drv) # trans와 drv의 교차분석
1
2
3
4
##         
## 4 f r
## auto 75 65 17
## manual 28 41 8
1
prop.table(table(mpg1$trans, mpg1$drv),1) # auto와 manual의 drv 비율 분석
1
2
3
4
##         
## 4 f r
## auto 0.4777070 0.4140127 0.1082803
## manual 0.3636364 0.5324675 0.1038961
  • auto에서는 4륜구동(4)인 47.8%로 가장 많고, manual에서는 전륜구동(f)이 53.2%이 가장 많아서
    trans에 따라 drv에 차이가 있는 것 같다. 이에 대해 정말 그런지, 통계적으로 분석하는 것이 교차분석이다.

  • 방법 1

1
chisq.test(mpg1$trans, mpg1$drv)
1
2
3
4
5
## 
## Pearson's Chi-squared test
##
## data: mpg1$trans and mpg1$drv
## X-squared = 3.1368, df = 2, p-value = 0.2084
  • 방법 2
1
chisq.test(table(mpg1$trans, mpg1$drv))
1
2
3
4
5
## 
## Pearson's Chi-squared test
##
## data: table(mpg1$trans, mpg1$drv)
## X-squared = 3.1368, df = 2, p-value = 0.2084
  • 방법 3
1
summary(table(mpg1$trans, mpg1$drv))
1
2
3
4
## Number of cases in table: 234 
## Number of factors: 2
## Test for independence of all factors:
## Chisq = 3.1368, df = 2, p-value = 0.2084
  • 방법 1의 결과를 보면 유의수준(p-value)이 0.2084 > 0.5 이다. 대립가설을 기각하지 못하므로
    trans에 따라 drv에 차이가 있다고 할 수 없다. 다른 방법에서도 같은 결과.

상관관계분석

  • 상관관계분석은 R에 내장되어 있는 cor.test()함수로 한다
1
#cor.test(데이터세트$비교변수1, 데이터세트$비교변수2)
  • mpgl에는 cty와 hwy가 있다

  • cty는 도시에서 1갤런당 달리는 거리

  • hwy는 고속도로에서 1갤런당 달리는 거리

  • cty가 길면 hwy도 길 것이라 생각할 수 있다. 이 가설을 검정해본다.
    검정하려는 가설은 cty와 hwy는 서로 상관관계가 있다는 것이기 때문에 이것이 대립가설.
    귀무가설은 상관관계가 없다는 것이다.

    • 귀무가설(H0) : cty와 hwy는 상관관계가 없다.
    • 대립가설(H1) : cty와 hwy는 상관관계가 있다.
1
2
3
mpg1 <- read.csv("mpg1.csv", stringsAsFactors = F)

cor.test(mpg1$cty, mpg1$hwy) #상관관계분석
1
2
3
4
5
6
7
8
9
10
11
## 
## Pearson's product-moment correlation
##
## data: mpg1$cty and mpg1$hwy
## t = 49.585, df = 232, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9433129 0.9657663
## sample estimates:
## cor
## 0.9559159
  • 결과를 보면 ‘p-value < 2.2e-15’이다. 유의수준이 2.2/10^16보다 작다.
    유의수준(p<.05)안에 있다. 이 검정의 결과로 귀무가설을 기각하고 대립가설을 채택할 수 있다.
    대립가설은 “상관관계는 0이 아니다(alternative hypothesis: true correlation is not equal to 0)”

  • 결과의 sample estimates: 부분을 보면 상관관계는 0.9959159. 1에 가까우므로 매우 높다.
    결과는 “cty와 hwy는 유의미하게 매우 높은 상관관계(r=.96)에 있다(p>.05)”

회귀분석

단순회귀분석

  • 단순회귀분석은 독립변수가 1개, 종속변수가 1개일때 한다
  • 회귀분석의 변수는 독립변수와 종속변수가 모두 등간척도 또는 비율척도이어야 한다
  • 회귀분석은 R의 lm() 함수로 한다
1
2
3
4
#다음 3가지 중 어느 것을 써도 된다.
#방법1 lm(data=데이터세트, 종속변수~독립변수)
#방법2 lm(종속변수~독립변수, data=데이터세트)
#방법3 lm(데이터세트$종속변수~데이터세트$독립변수)
  • R에 있는 mtcars 데이터로 분석한다. R에서 help(mtcars)를 하면 mtcars에 관한 정보를 알 수 있다.
    어느 한 미국 잡지에 실렸던 데이터이며, 11개 변수에서 32개 자동차의 정보를 담고 있다.
    11개의 변수 가운데 disp(배기량)가 mpg(1갤런당 주행 마일)에 미치는 여향을 분석해본다.
    str(mtcars)로 mtcars에 있는 변수들을 보면, disp와 mpg는 모두 실수형(num)변수이어서 회귀분석이 가능하다.

    • 귀무가설(H0) : disp는 mpg에 영향을 주지 않는다.
    • 귀무가설(H1) : disp는 mpg에 영향을 준다.
1
lm(data=mtcars, mpg~disp)
1
2
3
4
5
6
7
## 
## Call:
## lm(formula = mpg ~ disp, data = mtcars)
##
## Coefficients:
## (Intercept) disp
## 29.59985 -0.04122
1
#lm(mpg~disp, data=mtcars), lm(mtcars$mpg~mtcars$disp)의 결과도 같다.
  • 결과의 Coefficients 부분을 보면 disp의 계수(Coefficients)는 -0.04122이며, 절편은 29.59985이다.
    단순회귀분석은 1차 함수를 구하는 것과 같다.
    이 회귀분석에서 구해진 식은 mpg는 0.04122씩 감소한다.
    이제 유의수준을 알아봐야 한다. lm()의 결과를 summary()함수에 넣으면 상세한 결과를 확인 가능.
1
2
3
RA <- lm(data=mtcars, mpg~disp) #회귀분석 결과를 RA에 넣기

summary(RA) # 상세한 분석 결과 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## 
## Call:
## lm(formula = mpg ~ disp, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.8922 -2.2022 -0.9631 1.6272 7.2305
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 29.599855 1.229720 24.070 < 2e-16 ***
## disp -0.041215 0.004712 -8.747 9.38e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.251 on 30 degrees of freedom
## Multiple R-squared: 0.7183, Adjusted R-squared: 0.709
## F-statistic: 76.51 on 1 and 30 DF, p-value: 9.38e-10
  • 결과의 맨 밑줄을 확인하면 통계분석을 한 회귀모형이 적합한가를 순석하는 값이 있다.
  • p-value가 .05보다 작으면 회귀모형이 적합하다고 해석한다.
  • p-value가 .05보다 크면 회귀모형에 문자가 있는 것이므로 회귀분석 자체가 성립하지 않는다.
  • 이 분석에서는 p-value가 9.38e-10이므로 회귀모형이 적합하다.

다중회귀분석

  • 다중회귀분석은 종속변수에 영향을 주는 독립변수가 복수일 때 분석하는 방식이다.
  • 여러 독립변수들은 서로 영향을 주면서 종속변수에 영향을 주기 때문에
    한 독립변수가 종속변수에 미치는 영향력은 단순회귀분석을 했을 때와 다중회귀 분석을 했을 때에 달라진다.
  • 다중회귀분석에서는 단순회귀분석의 독립변수들을 ‘+’기호로 연결한다.
1
2
3
#방법1  lm(data=데이터세트, 종속변수~독립변수1+독립변수2+...)
#방법2 lm(종속변수~독립변수1+독립변수2+..., data=데이터세트)
#방법3 lm(데이터세트$종속변수~데이터세트$독립변수1+데이터세트$독립변수2+...)
  • mtcars 데이터로 실습한다. mpg에는 disp(배기량)이외에도 hp(마력)와 wt(중량)가 영향을 미칠 수 있다.
    세 독립변수가 mpg에 어떤 영향을 주는지 알아본다.
1
lm(data=mtcars, mpg~disp+hp+wt)
1
2
3
4
5
6
7
## 
## Call:
## lm(formula = mpg ~ disp + hp + wt, data = mtcars)
##
## Coefficients:
## (Intercept) disp hp wt
## 37.105505 -0.000937 -0.031157 -3.800891
1
2
#lm(mpg~disp+hp+wt, data=mtcars),
#lm(mtcars$mpg~mtcars$disp+mtcars$hp+mtcars$wt)의 결과도 같다.
  • 결과의 Coefficients 부분을 보면 세 독립변수의 회귀계수가 있다.
    다중회귀식은 mpg = 37.105505 - 0.000937 x disp - 0.0311157 x hp - 0.3800891 x wt이다.
    그러나 세 독립변수의 회귀계수에 대한 유의수준이 없어서 회귀계수가 유의미한지 알 수 없다.
    summary()함수로 유의수준을 비롯한 상세 결과를 알아본다.
1
2
3
RA <- lm(data=mtcars, mpg~disp+hp+wt) #회귀분석 결과를 RA 녛기

summary(RA)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 
## Call:
## lm(formula = mpg ~ disp + hp + wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.891 -1.640 -0.172 1.061 5.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.105505 2.110815 17.579 < 2e-16 ***
## disp -0.000937 0.010350 -0.091 0.92851
## hp -0.031157 0.011436 -2.724 0.01097 *
## wt -3.800891 1.066191 -3.565 0.00133 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.639 on 28 degrees of freedom
## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8083
## F-statistic: 44.57 on 3 and 28 DF, p-value: 8.65e-11
  • 결과의 맨 밑줄을 확인하면 p값은 86e-11로 유의수준 .001보다 작아 회귀모형은 적합하다

  • Coefficients 부분을 보면 각각의 유의수준은 disp는 (p>.05), hp는 (p<.05), wt는 (p<.01)이다

  • disp는 mpg에 영향을 주지 않고, hp와 wt만 영향을 준다

  • 결과의 Adjusted R-squared 는 0.8083으로 높아서 회귀모델의 설명력이 높다

  • 위 내용들을 토대로 다음과 같이 적는다

    • “회귀모형은 유의수준 p<.001에서 적합하며, 회귀식의 수정된 결정계수(R^2)는 .81이다.
      3개 독립변수가 연비에 미치는 회귀계수(베타)는 hp가 -0.03(p<.05), wt가 -3.80(p<.01), disp는 없다.
      wt의 영향력이 가장 컸다.”
  • Reference : R을 이용한 공공데이터 분석

End of Document