1. 기초통계
- 통계에서 데이터를 표로 잘 정리하는 것은 통계전체 작업에서 50%이상을
완성했음을 의미한다.
- 표로 데이터가 정리되면 통계적 해석이 쉽고, 그래프로도 나타내기 쉽다.
(1) 명목형 변수의 도수분포표
- No, Yes의 답변이 흩어져있는 자료들은 표로 정리한다.
![](http://www.lectureblue.pe.kr/ckstorage/images/R/03/n3.jpg)
- 측정된 값을 카운트해서 정리하는 표를 도수분포표 한다.
- 도수의 의미는 거듭하는 횟수이며, 도수분포표는 수량을 세어 나타낸 표라 한다.
- Yes, No는 명목변수이다.
(2) 명목형 변수의 상대도수분포표
- 커피의 종류 아메리카노, 카라멜 마끼야또, 더치, 카페라떼, 오늘의 커피, 초코렛 프라프치노 등
변수값이 많을 경우에는 월판매 도수분포표는 서로 비교가 쉽지 않다.
- 판매비율을 추가하면 숫자만 보는것보다 훨씬 비교가 쉽다.
- 판매비율은 상대도수를 추가하여 전체값에서 상대적인 비중을 차지하는 값을 비교할 수 있다.
![](http://lectureblue.pe.kr/ckstorage/images/special_subject/R/01.jpg)
(3) 연속성 변수의 도수분포, 상대도수, 누적도수표
- 통계학과 학생 정보중에서 통계학 점수인 연속형 변수를 이용한다.
이름, 성별, 학년, 전공, 통계학점수, 교육학점수.....의 데이터
홍길동 남 4 통계학 87 74
- 연속형 변수형인 경우에는 구간(계급)을 정해 그 구간안에 속한 점수를 세어 개수를 표시한다.
- 점수대별 인원수의 도수분포에 상대도수(비율), 누적상대도수를 추가하여 40점대 또는 30점대 하위권 인원의
비율을 쉽게 알 수 있고, 70점대 이하 학생의 비율도 알 수 있다
- 누적상대도수 3.30%는 상대도수10대~30대까지 모두 더한 값이다.
![](http://www.lectureblue.pe.kr/ckstorage/images/R/06/n5.jpg)
.
(4) 분할표(Contingency Table)
- 혈액형, 성별 두가지 명목형 변수를 표로 정리했다.
- 이 표를 통해 남자별 혈액형 비율 및 여자별 혈액형 비율도 알 수있다.
- 남녀구분없이 전체인원에서 O형이 차지하는 양도 알 수 있다.
- 이런표를 분할표라한다.
- 이표는 목적에 따라 달라질 수 있다. 남자, 여자별로 서로비교를 원한다면,
남자총합 기준으로 남자 혈액형별 비율을 넣고 따로 여자 총합기준으로 여자 혈액형별 비율을 넣어야 한다.
- 아래 표를 통해 O형인 경우 남녀 각각의 비율을 알 수 있으며, 남자가 여자보다 O형이 많음을 알 수 있다.
![](http://www.lectureblue.pe.kr/ckstorage/images/R/06/n6.jpg)
- 다른 방법으로 전체에서 어떤값이 어떤 비율을 차지하는지도 알 수 있다.
- 전체 인원 총합에서 각각의 비율을 작성한 것이다.
- 이표를 통해서 전체에서 남자이면서 O형인사람이 차지하는 비율을 알 수 있다.
- 남자전체와 여자 전체가 차지하는 비율도 알 수 있다.
- A형인 모든 사람의 비율도 알 수 있다.
- 이처럼 분할표는 목적에 따라 상대비율의 기준을 정해 사용할 수 있다.
![](http://www.lectureblue.pe.kr/ckstorage/images/R/06/n7.jpg)
2. R에서 기초 통계 확인
(1) R에서 명목형 변수의 도수분포표
- table()함수로 단순한 표의 형태로 표현할 수 있다.
- prop.table()를 이용하여 상대도수도 구할 수 있다.
- rbind()를 이용하면 혈액형 빈도수(Freq)아래에 행으로 상대도수를 붙일수 있다.
- addmargins()함수를 이용하여 합을 추가한다.
> df <- read.csv("./data/example_studentlist.csv")
> head(df)
name gender age grade absence bloodtype height weight
1 김길동 남자 23 3 유 O 165.3 68.2
2 이미린 여자 22 2 무 AB 170.1 53.0
3 홍길동 남자 24 4 무 B 175.0 80.1
4 김철수 남자 23 3 무 AB 182.1 85.7
5 손세수 여자 20 1 유 A 168.0 49.5
6 박미희 여자 21 2 무 O 162.0 52.0
> freq <- table(df$bloodtype) #혈액형변수의 빈도수
> freq
A AB B O
4 3 5 5
> pfreq <- prop.table(freq) #상대도수
> pfreq
A AB B O
0.2352941 0.1764706 0.2941176 0.2941176
> table <- rbind(freq,pfreq) #빈도수아래에 상대도수 붙임
> table
A AB B O
freq 4.0000000 3.0000000 5.0000000 5.0000000
pfreq 0.2352941 0.1764706 0.2941176 0.2941176
> table <- addmargins(table, margin=2) #합계도 추가 1:열의합 2:행의합
> table
A AB B O Sum
freq 4.0000000 3.0000000 5.0000000 5.0000000 17
pfreq 0.2352941 0.1764706 0.2941176 0.2941176 1
(2) R에서 연속형 변수의 도수분포표
- 실수처럼 연속형 변수는 도수분포표를 만들기 위해서 구간을 나누어야 하며 이를 계급이라 한다.
- 아래의 예제에서는 height 값을 4구간으로 나누어 작업한다.
- cut(나눌객체, breaks=나누고 싶은 구간의 개수, labels=나눈 구간의 이름)
- 구간의 내용이 (162,169] 표시되는데 ( ) - 포함안되고 [ ] - 포함된다는 의미이다.
- 연속형 변수이므로 누적상대도수도 cumsum()를 이용하여 추가한다.
> head(df)
name gender age grade absence bloodtype height weight
1 김길동 남자 23 3 유 O 165.3 68.2
2 이미린 여자 22 2 무 AB 170.1 53.0
3 홍길동 남자 24 4 무 B 175.0 80.1
4 김철수 남자 23 3 무 AB 182.1 85.7
5 손세수 여자 20 1 유 A 168.0 49.5
6 박미희 여자 21 2 무 O 162.0 52.0
> fh <- cut(df$height, breaks=4) #수치형데이터를 구간으로 나눈다
> fh
[1] (162,169] (169,175] (169,175] (175,182] (162,169] (162,169]
[7] (155,162] (175,182] (175,182] (175,182] (162,169] (175,182]
[13] (162,169] (175,182] (155,162] (162,169] (169,175]
Levels: (155,162] (162,169] (169,175] (175,182]
> tfh <- table(fh) #빈도수를 구한다.
> tfh
fh
(155,162] (162,169] (169,175] (175,182]
2 6 3 6
> tfh <- rbind(tfh,prop.table(tfh)) # 상대도수 구한다.
> tfh
(155,162] (162,169] (169,175] (175,182]
tfh 2.0000000 6.0000000 3.0000000 6.0000000
0.1176471 0.3529412 0.1764706 0.3529412
> rownames(tfh)[2]<- "RFreq" #빈행의 이름을 추가한다.
> tfh
(155,162] (162,169] (169,175] (175,182]
tfh 2.0000000 6.0000000 3.0000000 6.0000000
RFreq 0.1176471 0.3529412 0.1764706 0.3529412
> CumFreq<- cumsum(tfh[1,]) #누적상대도수 추가한다.
> CumFreq
(155,162] (162,169] (169,175] (175,182]
2 8 11 17
> tfh <- rbind(tfh, CumFreq)
> tfh
(155,162] (162,169] (169,175] (175,182]
tfh 2.0000000 6.0000000 3.0000000 6.0000000
RFreq 0.1176471 0.3529412 0.1764706 0.3529412
CumFreq 2.0000000 8.0000000 11.0000000 17.0000000
> rownames(tfh) <- c("도수","상대도수","누적도수") #행의 이름을 한글로 바꾼다.
> tfh
(155,162] (162,169] (169,175] (175,182]
도수 2.0000000 6.0000000 3.0000000 6.0000000
상대도수 0.1176471 0.3529412 0.1764706 0.3529412
누적도수 2.0000000 8.0000000 11.0000000 17.0000000
> tfh <- addmargins(tfh, margin=2) #margin=2:행의합
> tfh
(155,162] (162,169] (169,175] (175,182] Sum
도수 2.0000000 6.0000000 3.0000000 6.0000000 17
상대도수 0.1176471 0.3529412 0.1764706 0.3529412 1
누적도수 2.0000000 8.0000000 11.0000000 17.0000000 38
(3) R에서 분할표 만들기
- 분할표는 두 변수의 조건을 만족하는 빈도수를 나타내는 표이다.
- 두변수를 만족하는 관측치가 각각 몇 개씩인지 한눈에 파악할 수 있다.
- 두변수를 table()를 이용해서 가져온다(빈도수)
- 행과 열의합을 구한후 합을 기준으로 각각의 비율을 구한다(상대도수)
- 비율의 합을 구한다.(상대도수의 합)
- 남녀별로 상대도수를 구한다. 남녀구별은 행이므로 행으로 비율을 계산한다.
- 상대도수의 합을 구한다.
addmargins의 margin=2- 행기준, margin=1-열기준
prop.table의 margin과 반대이다.
> ct <- table(df$gender,df$bloodtype) #두변수의 빈도수 구함
> ct
A AB B O
남자 2 2 4 2
여자 2 1 1 3
> addmargins(ct) # 행과열의 합계
A AB B O Sum
남자 2 2 4 2 10
여자 2 1 1 3 7
Sum 4 3 5 5 17
> pct <- prop.table(ct) # 상대도수 구하기
> pct
A AB B O
남자 0.11764706 0.11764706 0.23529412 0.11764706
여자 0.11764706 0.05882353 0.05882353 0.17647059
> addmargins(pct) #상대도수합구하기
A AB B O Sum
남자 0.11764706 0.11764706 0.23529412 0.11764706 0.58823529
여자 0.11764706 0.05882353 0.05882353 0.17647059 0.41176471
Sum 0.23529412 0.17647059 0.29411765 0.29411765 1.00000000
> pct2 <- prop.table(ct,margin=1) #행으로 비율계산
> pct2
A AB B O
남자 0.2000000 0.2000000 0.4000000 0.2000000
여자 0.2857143 0.1428571 0.1428571 0.4285714
> addmargins(pct2,margin=2) #상대도수합 행별 합계
A AB B O Sum
남자 0.2000000 0.2000000 0.4000000 0.2000000 1.0000000
여자 0.2857143 0.1428571 0.1428571 0.4285714 1.0000000
> addmargins(pct) #상대도수합구하기
A AB B O Sum
남자 0.11764706 0.11764706 0.23529412 0.11764706 0.58823529
여자 0.11764706 0.05882353 0.05882353 0.17647059 0.41176471
Sum 0.23529412 0.17647059 0.29411765 0.29411765 1.00000000
> pct2 <- prop.table(ct,margin=2) #열로 비율계산
> pct2
A AB B O
남자 0.5000000 0.6666667 0.8000000 0.4000000
여자 0.5000000 0.3333333 0.2000000 0.6000000
> addmargins(pct2,margin=1) #상대도수합 열별 합계
A AB B O
남자 0.5000000 0.6666667 0.8000000 0.4000000
여자 0.5000000 0.3333333 0.2000000 0.6000000
Sum 1.0000000 1.0000000 1.0000000 1.0000000
댓글