CO2 데이터 분석 - 화요일반

Author

hjlee

library(lattice)
library(psych)
library(datasets)
data(CO2)
? CO2

데이터를 불러오고, 어떤 내용의 데이터인지 확인합니다. CO2데이터는 잔디 종류의 실험 데이터라고 설명하고 있습니다. “nfnGroupedData”라는 형식이 포함되어 있고, 각 식물의 구분 이름, 원산지, 냉각 처치 여부, 이산화탄소 농도, 이산화탄소 흡수율이 측정되었습니다.

#library(showtext)
#font_add(family = "nanum", regular = "/Library/Fonts/NanumBarunGothic.otf")
### 시스템 폰트 설정에 따라 다름 
#showtext_auto() ###한글 설정(mac sonoma)

1. 데이터 구조 확인

# 데이터 구조와 내용
str(CO2)
Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':  84 obs. of  5 variables:
 $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
 $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
 $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
 $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
 $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
 - attr(*, "formula")=Class 'formula'  language uptake ~ conc | Plant
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "outer")=Class 'formula'  language ~Treatment * Type
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "labels")=List of 2
  ..$ x: chr "Ambient carbon dioxide concentration"
  ..$ y: chr "CO2 uptake rate"
 - attr(*, "units")=List of 2
  ..$ x: chr "(uL/L)"
  ..$ y: chr "(umol/m^2 s)"

CO2 데이터는 일반 data frame이 아니라 grouped data frame이라는 유형의 데이터 프레임입니다. 우리 교과 범위내의 분석을 위하여 CO2 데이터를 일반 데이터 프레임으로 변경하겠습니다.

co2n <- data.frame(CO2)
str(co2n)
'data.frame':   84 obs. of  5 variables:
 $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
 $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
 $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
 $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
 $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...

co2n 데이터는 데이터 프레임이고, 5개의 변수와 84개의 데이터 행으로 이루어져 있습니다. 그중 Plant, Type, Treatment는 factor형이고, 나머지 두 개는 numeric data입니다. 데이터 내용은 아래와 같이 입력되어 있습니다.

head(co2n)
  Plant   Type  Treatment conc uptake
1   Qn1 Quebec nonchilled   95   16.0
2   Qn1 Quebec nonchilled  175   30.4
3   Qn1 Quebec nonchilled  250   34.8
4   Qn1 Quebec nonchilled  350   37.2
5   Qn1 Quebec nonchilled  500   35.3
6   Qn1 Quebec nonchilled  675   39.2

2. 데이터의 기술통계량

summary(co2n)
     Plant             Type         Treatment       conc          uptake     
 Qn1    : 7   Quebec     :42   nonchilled:42   Min.   :  95   Min.   : 7.70  
 Qn2    : 7   Mississippi:42   chilled   :42   1st Qu.: 175   1st Qu.:17.90  
 Qn3    : 7                                    Median : 350   Median :28.30  
 Qc1    : 7                                    Mean   : 435   Mean   :27.21  
 Qc3    : 7                                    3rd Qu.: 675   3rd Qu.:37.12  
 Qc2    : 7                                    Max.   :1000   Max.   :45.50  
 (Other):42                                                                  
library(psych)
describe(co2n)
           vars  n   mean     sd median trimmed    mad  min    max range  skew
Plant*        1 84   6.50   3.47    6.5    6.50   4.45  1.0   12.0  11.0  0.00
Type*         2 84   1.50   0.50    1.5    1.50   0.74  1.0    2.0   1.0  0.00
Treatment*    3 84   1.50   0.50    1.5    1.50   0.74  1.0    2.0   1.0  0.00
conc          4 84 435.00 295.92  350.0  408.53 259.46 95.0 1000.0 905.0  0.72
uptake        5 84  27.21  10.81   28.3   27.33  14.83  7.7   45.5  37.8 -0.10
           kurtosis    se
Plant*        -1.26  0.38
Type*         -2.02  0.05
Treatment*    -2.02  0.05
conc          -0.68 32.29
uptake        -1.35  1.18

12개의 잔디 종류가 종류당 7개씩 있고, 퀘벡, 미시시피 원산지는 반반 비중, 냉각 처리도 반반으로 처치하였습니다. 이산화탄소 농도와 흡수량은 측정량 차이가 큽니다. 이산화탄소 농도와 흡수량은 describe()로 각 변수의 평균과 표준 편차를 확인할 수 있습니다.

3. 관찰된 식물의 수 및 종류

table(co2n$Plant)

Qn1 Qn2 Qn3 Qc1 Qc3 Qc2 Mn3 Mn2 Mn1 Mc2 Mc3 Mc1 
  7   7   7   7   7   7   7   7   7   7   7   7 
table(co2n$Plant,co2n$Type)
     
      Quebec Mississippi
  Qn1      7           0
  Qn2      7           0
  Qn3      7           0
  Qc1      7           0
  Qc3      7           0
  Qc2      7           0
  Mn3      0           7
  Mn2      0           7
  Mn1      0           7
  Mc2      0           7
  Mc3      0           7
  Mc1      0           7
table(co2n$Plant,co2n$Treatment)
     
      nonchilled chilled
  Qn1          7       0
  Qn2          7       0
  Qn3          7       0
  Qc1          0       7
  Qc3          0       7
  Qc2          0       7
  Mn3          7       0
  Mn2          7       0
  Mn1          7       0
  Mc2          0       7
  Mc3          0       7
  Mc1          0       7

총 12개 식물 개체가 있으며, 각각 Quebec 또는 Mississippi 타입이 같은 비중입니다. 개체명에 n은 냉각 처치 안한것, c는 처치가 된 것으로 예상됩니다.


4. CO2 농도 분포

plot(co2n$conc, main="CO2의 농도 분포", family="nanum")

각 개체별로 co2 농도를 일정하게 다르게 제공한 것을 알 수 있습니다. 저농도는 상대적으로 조밀하게 변화를 주고, 고농도를 변화량이 크게 설정되어 있습니다. 그러면 Plant 12종 별로 CO2 흡수량을 볼 수 있을것 같습니다.

5. 식물 조건별 CO2 흡수량 분포

plot(co2n$Plant, co2n$uptake, cex.axis=0.7, main="식물 조건별 CO2 흡수량 분포") #cex.axis=0.7 축의 텍스트 가독성 고려

식물 종류별, 처치별로 이산화탄소 흡수량의 데이터 범위가 다른 것을 알 수 있습니다. 이 내용을 실험 조건별로 좀 더 자세히 살펴보겠습니다.

5-1 퀘벡종과 미시시피 종의 CO2 흡수량 차이

plot(co2n$uptake ~co2n$Type, ylim = c(0,50), main="두 잔디 종의 이산화탄소 흡수량")

퀘벡종이 이산화탄소 흡수량이 높은 것을 볼 수 있습니다.

5-2 냉각 처치 여부의 흡수량 차이

plot(co2n$uptake ~co2n$Treatment, ylim = c(0,50))

boxplot(uptake ~ Treatment, data = CO2,
        main = "Treatment에 따른 CO2 흡수량",
        ylab = "Uptake", xlab = "Treatment",
        col = c("lightgray", "lightblue"), cex.lab = 0.9)##그래프 디자인

xyplot(uptake ~Treatment | Type, co2n, ylim = c(0,50))

두 그래프를 비교해보면 퀘벡종이 미시시피 종보다 CO2 흡수량이 높은 편이고, 냉각 처리 하지 않은 것이 냉각 처리 한것 보다 흡수량이 높습니다. 퀘벡종은 냉각 처리에 흡수량 영향이 적은 반면, 미시시피 종은 냉각 처리에 따라 흡수량이 많이 다릅니다.

6. 이산화탄소 농도 조건에 따른 CO2 흡수량 분포

co2n$conc <-as.numeric(co2n$conc)
plot(CO2$conc, CO2$uptake,
     main = "CO2 농도와 흡수량의 관계",
     xlab = "CO2 농도 (conc)", ylab = "흡수량 (uptake)",
     col = "darkorange", pch = 19, cex = 0.8, cex.lab = 0.9)

이산화탄소 농도가 진할 수록 흡수량은 높아집니다. 그러나 흡수량의 범위가 농도 조건에 따라 다른 것 같습니다. boxplot으로 차이를 보고자 합니다. 그런데, conc가 numeric이므로 boxplot을 그리기 위해 factor로 변경한 뒤, 그래프 비교를 하겠습니다.

co2n$conc <-as.factor(co2n$conc)
plot(co2n$conc, co2n$uptake, main="이산화탄소 농도별 흡수량")

농도가 최저 수준일 때는 종류나 처치별 흡수량 차이가 크지 않은 반면, 고농도일때는 흡수량 차이가 크게 보입니다. 그럼 흡수량 차이가 큰 1000농도의 데이터를 따로 모아서 처치별 그래프를 그려보겠습니다.

7. 고농도 CO2 조건의 CO2 흡수량 현황

co21000 <-co2n[co2n$conc==1000,]
xyplot(uptake ~Treatment | Type, co21000, ylim = c(0,50))

농도 1000인 조건만 따로 그려보니, 미시시피종의 냉각 처치 그룹이 이산화탄소 흡수량이 많이 떨어지는 것을 볼 수 있습니다.

8. conc와 uptake 간의 관계를 Type별로 비교

par(mfrow = c(1, 2))
co2q <-co2n[co2n$Type == "Quebec", ]
  plot(co2q$conc, co2q$uptake,
       main = "Quebec: CO2 농도와 흡수량",
       xlab = "conc", ylab = "uptake",
       col = "blue", pch = 16, cex.lab = 0.9)

co2m <-co2n[co2n$Type == "Mississippi", ]
  plot(co2m$conc, co2m$uptake,
       main = "Mississippi: CO2 농도와 흡수량",
       xlab = "conc", ylab = "uptake",
       col = "darkgreen", pch = 16, cex.lab = 0.9)

par(mfrow = c(1, 1))

식물 타입별로 CO2농도와 흡수량을 비교했습니다. 퀘벡종은 농도가 높을 수록 흡수량이 올라가는것이 뚜렸하지만 미시시피종은 농도가 올라가면 흡수량 분포가 커집니다. 즉 다양성이 큽니다.


9. 결론 요약

  • CO2 농도가 증가하면 흡수량도 증가하는 경향이 있음, 미시시피종은 농도가 높으면 가변성이 큼
  • Treatment(냉각 처치)의 유무가 흡수량에 영향을 줌, 처치를 안한 것이 흡수량이 큼
  • 식물 Type에 따른 반응도 차이가 있음, 퀘벡 종이 흡수량이 큼
  • 미시시피 종의 비료 처리한 개체는 CO2 흡수량이 현저하게 낮음
  • 여러 요인이 복합적으로 작용하여 식물의 CO2 흡수량을 결정함, 식물종, 냉각 처치 사용 여부, CO2농도 환경이 영향을 미침
  • 위 결과는 향후 식물 재배 최적화나 기후 반응 예측 등에 기초 자료가 될 수 있음