반응형

     정보

    • 업무명     : 기상관측자료 분석 문의
    • 작성자     : 이상호
    • 작성일     : 2021-01-27
    • 설   명      :
    • 수정이력 :

     

     문의

    • 총 기온검증장치가 12개라고 생각하고, 이것의 상대적 차이를 이용하고 대응표본 티검정을 이용해서 소형백엽상과 B의 상대적 기온차이를 봤을때는 거의  평균 0.3차이가 나고,  표준편차는 0.2정도라고 해요. 그럼 최대 0.5차이 난다는 뜻이겠죠. 
    • 그리고 대응표본 티검정을 했을때는 p값이 0.05보다 작아서 유의한 차이가 있다고 해석이 되어요.
    • 이게 문제는 모든 분석에서 유의한 차이가 있다고 나와서요. 
    • 이번에는 t통계량이 0으로 가까울수록 소형백엽상과 기온검증장치가 유사하다고 결론을 내고 싶거든요. 
    • 이런 방법으로 해석을 해도 되는지 궁금해요.

     

     답변

    • 보내주신 8월 소형백엽상과 엑셀 파일에서 "최고/최저/일평균" 시트를 이용해서 통계 프로그래밍 (R)로
      검정 결과 및 그림을 송부하오니 확인 부탁드립니다.
    • 일반적으로 통계 검정 시 다음과 같이 수행했습니다. 
    • [1 단계] F 검정 : 신뢰구간 (95%) 기준에서 P값 (유의수준)에 따라 귀무가설 기각/채택 여부 선정
      • > P값 (0.05 이하) > 귀무가설 기각 > 상이한 분산 > 두 일사계의 분산 차이가 있다.
      • > P값 (0.05 초과) > 귀무가설 채택 > 동일한 분산 > 두 일사계의 분산 차이가 없다. 
    • [2 단계] T 검정 : 앞서 F 검정 결과 (상이한 vs 동일한 분산) 정보를 이용하여 T 검정을 수행
      • P값 (유의수준)에 따라 귀무가설 기각/채택 여부를 선택합니다.
        • > P값 (0.05 이하) > 귀무가설 기각 > 두 일사계는 차이가 있다.
        • > P값 (0.05 초과) > 귀무가설 채택 > 두 일사계는 차이가 없다. 
    • 따라서 T 검정 결과 "최저/최저/일평균"에 대한 두 일사계 (소형백엽상 vs B-*)는 차이가 없습니다.

     

    [T 테스트]

     

    [F 테스트]

     

    [소스 코드]

    #===============================================================================================
    # Routine : Main R program
    #
    # Purpose : 재능상품 오투잡
    #
    # Author : 해솔
    #
    # Revisions: V1.0 May 28, 2020 First release (MS. 해솔)
    #===============================================================================================
    
    #================================================
    # 요구사항
    #================================================
    # 기상관측자료 분석 문의사항
    
    serviceName = "QUE0003"
    
    library(tidyverse)
    library(ggplot2)
    library(lubridate)
    library(openxlsx)
    library(fs)
    library(moonBook)
    library(webr)
    library(tidyverse)
    library(ggstatsplot)
    library(useful)
    
    
    #================================================
    # Set Env
    #================================================
    globalVar = new.env()
    globalVar$inpConfig = "."
    globalVar$figConfig = "."
    globalVar$outConfig = "."
    globalVar$logConfig = "."
    globalVar$mapConfig  = "."
    
    #================================================
    # Main
    #================================================
    fileInfo = Sys.glob(paste(globalVar$inpConfig, "8월 소형백엽상과 기존차광통분석.xlsx", sep = "/"))
    
    data = openxlsx::read.xlsx(fileInfo, sheet = 1) %>%
      dplyr::rename(ref = 소형백엽상)
    
    dataL1 = data %>%
      dplyr::mutate(
        dtDate = readr::parse_date(sDate, "%Y-%m-%d")
      ) %>%
      na.omit()
    
    
    typeList = sort(unique(dataL1$type))
    colList = setdiff(colnames(dataL1), c("sDate", "type", "ref", "dtDate"))
    dataL3 = data.frame()
    
    typeInfo = "최대값"
    colInfo = "P-1"
    
    
    for (typeInfo in typeList) {
      for (colInfo in colList) {
        
        dataL2 = dataL1 %>%
          dplyr::filter(type == typeInfo) %>%
          dplyr::select(colInfo, ref) %>%
          tidyr::gather(key = "key", value = "value")
        
        if (nrow(dataL2) < 1) { next }
        
        # P값이 2.2204e-16으로서 귀무가설 기각 (두 특성의 분산 차이가 있다)
        # 따라서 상이한 분산 조건 (var.equal = FALSE)
        fTest = var.test(value ~ key, data = dataL2, conf.level = 0.95)
        fTest
        
        setLabel = paste0(typeInfo, "_", colInfo,"-", "소형백엽상")
        saveImg = sprintf("%s/%s_%s_%s.png", globalVar$figConfig, serviceName, "F-Test", setLabel)
        
        plot(fTest) +
          xlim(0, 5) +
          ggsave(filename = saveImg, width = 10, height = 6, dpi = 600)
        
        isVarEqual = TRUE
        setVarResult = sprintf("P값이 %s로서 귀무가설 채택 (동일한 분산: 두 일사계의 분산 차이가 없다)", round(fTest$p.value, 3))
        
        if (fTest$p.value < 0.05) { 
          isVarEqual = FALSE
          setVarResult = sprintf("P값이 %s로서 귀무가설 기각 (상이한 분산 : 두 일사계의 분산 차이가 없다)", round(fTest$p.value, 3))
        }
        
        
        # P값이 0.054로서 귀무가설 기각 (두 특성은 차이가 있다)
        tTest = t.test(value ~ key, data = dataL2, var.equal = isVarEqual)
      
        saveImg = sprintf("%s/%s_%s_%s.png", globalVar$figConfig, serviceName, "T-Test", setLabel)
        plot(tTest) +
          xlim(-5, 5) +
          ggsave(filename = saveImg, width = 10, height = 6, dpi = 600)
        
        setResult = sprintf("P값이 %s로서 귀무가설 채택 (두 일사계는 차이가 없다)", round(tTest$p.value, 3))
        if (tTest$p.value < 0.05) { sprintf("P값이 %s로서 귀무가설 기각 (두 일사계는 차이가 있다)", round(tTest$p.value, 3)) }
        
        tmpData = data.frame(
          "setLabel" = setLabel
          , "fVal" = fTest$statistic
          , "fPval" = fTest$p.value
          , "fResult" = setVarResult
          , "tVal" = tTest$statistic
          , "tPval" = tTest$p.value
          , "tResult" = setResult
        )    
        
        dataL3 = dplyr::bind_rows(dataL3, tmpData)
      }
    }
    
    # XLSX 파일 생성
    saveXlsxFile = sprintf("%s/%s_%s.xlsx", globalVar$outConfig, serviceName, "통계 결과")
    
    wb = openxlsx::createWorkbook()
    
    openxlsx::addWorksheet(wb, "table")
    openxlsx::writeData(wb, "table", dataL3, startRow = 1, startCol = 1, colNames = TRUE, rowNames = FALSE)
    
    openxlsx::saveWorkbook(wb, file = saveXlsxFile, overwrite = TRUE)

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기