우리가 살아가는 도시

R을 활용한 통계학 이론과 응용 - 2장 코딩 연습 본문

내가 알아가는 도시/Statistics

R을 활용한 통계학 이론과 응용 - 2장 코딩 연습

세화주 2016. 12. 22. 10:53

2장. 자료의 구조

 

x=rep(1,10) #1을 10번 반복

 

 

#빈도분석
x=rep(LETTERS[1:3],c(1520,790,510)) #LETTERS[1:3] = a,b,c / a를 1520번 반복, b를 790번 반복, c를 510번 반복
library(prettyR)
freq(x)
freq(x,display.na=FALSE)

 

 

#파이차트
pie(table(x)) #pie에서는 x만써서는 안되며, table(x)로 표기해야 함
pie(table(x),main="예제2.2 파이차트")

 

 

#파레도차트
x=rep(LETTERS[1:5],c(35,9,45,6,5)) #LETTERS[1:5] = a,b,c,d,e
library(qcc)
pareto.chart(table(X))
pareto.chart(table(X),ylab="Frequency")

 

 

#빈도분석
X = c(1, 1, 1, 3, 0, 0, 1, 1, 1, 0, 2, 2, 0, 0, 0,
      1, 2, 1, 2, 0, 0, 1, 6, 4, 3, 3, 1, 2, 4, 0) #벡터 생성
freq(X,display.na = FALSE,decr.order = FALSE) #decr.order=FALSE 오름차순
freq(X,display.na = FALSE,decr.order = TRUE) #TRUE는 아래의 아무것도 안쓴 것과 같은 값
freq(X,display.na = FALSE)

#막대그래프와 히스토그램
par(mfrow=c(1,2)) #하나의 화면에 몇개의 그림을 나타낼 것인가 1행 2열, 즉 가로로 2개의 그림을 동시에 그려줌
barplot(table(X),main="예제2.5막대그래프",xlab="Mistake",ylab="Count") #xlab: x축의 명칭, ylab: y축의 명칭
hist(X,sub="Mistake",labels = T,main = "예제2.5막대그래프") #lables=T:히스토그램 위에 수치를 써줌
hist(X)
hist(X,sub="Mistake") #sub="Mistake" 뭐에 대한 히스토그램인지 적어줄 수 있음
hist(X,sub="Mistake",labels = T)

 

 

#막대 그래프
beer = c(3,4,1,1,3,4,3,3,1,3,2,1,2,1,2,3,2,3,1,1,1,1,4,3,1)
barplot(beer)                       # not correct
barplot(table(beer))                # frequency
barplot(table(beer)/length(beer))   # relative frequency

 

 

#4분위 수
x=c(1, 3, 4, 6, 6, 7, 8, 8, 9, 10, 15)
quantile(X, c(0.25, 0.75))

 

 

#plotchart그리기
x = c(2, 3, 4, 5, 6, 7, 8, 9, 4, 6, 3, 7, 2, 5, 8)
y = c(4, 7, 6, 8,10, 9,13,11, 5, 7, 4,10, 3, 7,11)
par(mfrow=c(1,1))
plot(x, y, pch=1, main="예제 2.12 산점도") #pch=1,19,8은 어떠한 크기가 아니라, 모양이 바뀜 / 참고로 8은 별모양
plot(x, y, pch=19, main="예제 2.12 산점도")
plot(x, y, pch=8, main="예제 2.12 산점도")

x = c(110, 130, 125, 120, 115, 120, 125, 130, 150, 140, 100, 110, 115, 120, 135)
y = c( 75,  90,  80,  80,  70,  75,  90,  95,  90,  85,  60,  65,  75,  75,  90)
plot(x, y, pch=8, main="예제 2.13 산점도")
cor(x, y)

 

 

#도수분포표
x = c("Yes", "No", "No", "Yes", "Yes")
table(x)

 

 

#factor
x #x가 무엇인지 확인
factor(x) #x를 구성하는 레벨을 확인할 수 있음

 

 

===============================================================================

 

 

### 연속형 자료

## 중심위치와 흩어짐의 정도

# CEO salaries (in millions)
sals = c(12, .4, 5, 2, 50, 8, 3, 1, 4, 0.25)

mean(sals)  # (표본)평균
var(sals)   # 분산
sd(sals)    # 표준편차

fivenum(sals) # 5 number summary: Min, Q1, Med, Q3, Max
summary(sals) # 그냥 summary: Min, 1st Qu., Median, Mean, 3rd Qu. Max

 

 

# (표본)분위수
data = c(10,17,18,25,28,28)
summary(data)
quantile(data, 0.25) #summary의 1st Qu.와 같음
quantile(data, c(0.25, 0.75)) #summary의 1st Qu. 그리고 3rd Qu.와 같음

 

 

# 이상치에 둔감한 측도
mean(sals, trim=1/10) #trim: 절삭평균, 절삭할 비율 a를 설정하고 0부터 0.5사이의 값으로 정의한다.
mean(sals, trim=2/10)

IQR(sals)          # 사분위수범위=Q3-Q1
mad(sals)          # median absolute deviation: med |Xi - med(X)|*1.4826

 

 

## 줄기잎그림
scores = c(2,3,16,23,14,12,4,13,2,0,0,0,6,28,31,14,4,8,2,5)
stem(scores)
stem(scores, scale=2)

 

 

## 연속형 자료의 범주화(그룹화)
cats = cut(sals, breaks=c(0,1,5,max(sals))) #breaks=c(0,1,5,max(sals)) : breaks를 0에서1, 1에서5, 5에서 50으로 구분함)
cats #cats를 누르면 그 레벨을 확인할 수 있음 / sales를 위에서 나눈 구간으로 표시
table(cats) #table(cats)의 도수분포표
levels(cats) = c("poor","rich","rolling in it") #cats의 레벨을 변경
levels(cats)
table(cats) #위의 table(cats)와 다르게 나타남

 

 

## 히스토그램
par(mfrow=c(1,1))
x = c(29.6,28.2,19.6,13.7,13.0,7.8,3.4,2.0,1.9,1.0,0.7,0.4,0.4,0.3,
      0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.1,0.1,0.1,0.1,0.1)
hist(x)   # 도수
hist(x, probability=TRUE)  # 상대도수
hist(x, breaks=10) #break의 의미는 명확히 모르겠음????
hist(x, breaks=c(0,1,2,3,4,5,10,20,max(x)))