본문 바로가기

R

[R] 다변량 자료 분석 (1) : airquality 데이터 산점도

기본 R 데이터인 airquality 데이터셋으로 작업하겠습니다.

 

1. 결측치 제거

colSums(is.na(airquality))
airquality = na.omit(airquality)

 

Ozone, Solar.R 칼럼에 결측치가 있었고, 이를 제거했습니다.

 

 

2. 계절에 따라 두 개의 표본으로 나누기

airquality$season = ifelse(airquality$Month == 5 | airquality$Month == 9,
                           "non-summer", "summer")

 

Month 칼럼은 5~9월 데이터를 담고 있으므로 5, 9월일 경우 "non-summer", 나머지 달은 "summer"로 설정

 

 

3.  Ozone과 Solar.R의 관계를 나타내는 2D 그래프

plot(airquality$Ozone, airquality$Solar.R, 
     pch = c(1, 16)[as.numeric(factor(airquality$season))],
     xlab = 'Ozone', ylab = 'Solar.R')
legend(100, 80, legend=c("summer", "non-summer"), 
       pch = c(16, 1), horiz = T)

계절별 Ozone과 Solar.R 변수의 산점도를 그려봤습니다.

 

 

4. Ozone, Solar.R, Temp의 관계를 나타내는 3D 그래프

library(scatterplot3d)
s3d = scatterplot3d(x = airquality$Ozone, y = airquality$Solar.R, 
                    z = airquality$Temp,
                    pch=c(1,16)[as.numeric(factor(airquality$season))],
                    xlab="Ozone", ylab="Solar.R", angle=45,
                    zlab="Temp", lty.hide=2,
                    type="h", y.margin.add=0.1, font.axis=2, font.lab=2)

legend('bottomright', c("Non-summer", "summer"),
       pch=c(1, 16), text.font = 2)

세 변수로 3D 산점도를 그려봤습니다.

 

 

5. Draftman’s plot

airquality = data.frame(Date_index = rownames(airquality), airquality)
airquality$Date_index = as.numeric(airquality$Date_index)

head(airquality)

pairs(airquality[, 1:5], pch=c(1, 16)[as.numeric(factor(airquality$season))])
par(xpd = NA)
legend(-0.003, 1.07, legend = c("Non-summer", "summer"),
       pch=c(1, 16), cex = 0.7, text.font = 2)

각행을 나타내는 Date index를 만든 후, Date index, Ozone, Solar.R, Wind, Temp를 이용해 Draftman’s plot 을 그렸습니다.

 

 

6. Sciviews R package를 이용, box plot을 포함한 Draftman plot

library(SciViews)
pairs(airquality[, 1:5], diag.panel = panel.boxplot,
      pch=c(1, 16)[as.numeric(factor(airquality$season))], font.labels = 2)
legend(-0.003, 1.07, legend = c("Non-summer", "summer"),
       pch=c(1, 16), cex = 0.7, text.font = 2)

 

 

7. lattice R package를 이용한 Draftman plot

library(lattice)
splom(~ airquality[,1:5], 
      groups = airquality$season,
      data = airquality, 
      ps = 0.5, 
      varname.cex = 0.5,
      panel = panel.superpose,
      key = list(columns = 2, 
                 points = list(pch = c(1, 16), 
                               col = c(1, 16)),
                 text = list(c("non-summer", "summer"))))

 

 

 

8. GGally R package를 이용한 Draftman plot

library(GGally)
ggscatmat(airquality, columns = 1:5, color="season")

 

Temp와 Ozone의 상관계수는 0.65, 0.69이므로 변수 간 상관계수 중 가장 크다는 것을 알 수 있습니다.

 

 

9. 네 개의 변수들의 평균값을 표현한 선 그래프

meanbymonth = aggregate(. ~ Month, data = airquality[2:6], FUN = mean)
head(meanbymonth)

plot(Ozone ~ Month, data = meanbymonth, type = 'b', pch = 2,
     ylim = c(min(meanbymonth[, 2:5]), max(meanbymonth[, 2:5])))

for (i in 3:5) {
  lines(meanbymonth$Month, meanbymonth[, i], type = 'b',
        pch = i, lty = i)
}

legend(5.2, 170, legend = c(colnames(meanbymonth[, 2:5])), pch=c(2:5))

 

10. 네 변수의 평균값을 bar plot으로 표현

vars = t(data.matrix(meanbymonth[, -1]))
colnames(vars) = c(5:9)
barplot(vars, names.arg = colnames(vars),
        col = c("grey","skyblue","pink","yellowgreen"),
        beside = TRUE, ylim = c(0,230), cex.names = 0.7,
        xlab = 'Month')
box()
labs = colnames(meanbymonth[, 2:5])
legend("topright", legend = labs, fill = c("grey","skyblue","pink","yellowgreen"),
       cex = 0.8)