R/연습문제 풀이

[R] 기술통계 / 범주화 / 교육 방법에 따른 시험 성적 차이 검정

연정양 2023. 1. 17.

목차

    [R] 기술통계 / 범주화 / 교육 방법에 따른 시험 성적 차이 검정

    #문제1. MASS패키지에 있는 Animals 데이터 셋에 대해
    #       R의 기본 함수를 이용하여 BODY컬럼 대상 기술통계량 구하기
    library(MASS)
    
    ###1-1 Animals 데이터 셋 구조 보기 
    #구조
    str(Animals)
    
    ''''data.frame':	28 obs. of  2 variables:
     $ body : num  1.35 465 36.33 27.66 1.04 ...
     $ brain: num  8.1 423 119.5 115 5.5 ...'''
     
    #내용 확인 
    head(Animals)
    
    ###1-2 요약통계량
    summary(Animals$body)
    '''    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
        0.02     3.10    53.83  4278.44   479.00 87000.00 '''
    
    ###1-3 평균 
    mean(Animals$body)
    #4278.439
    
    ###1-4 표준편차 
    sd(Animals$body)
    #16480.49
    
    ###1-5 Animals 데이터 셋의 빈도수 구하기
    table(Animals$body, Animals$brain)
    
    
    
    #문제 2. iris데이터를 이용하여 5겹 3회 반복하는 교차검정 데이터 샘플링
    library(cvTools)
    
    ###교차 데이터 셋 생성
    cross <- cvFolds(nrow(iris), K = 5, R = 3, type="random")
    
    ###교차 데이터 셋 구조 보기
    str(cross)
    table(cross$which)
    
    ###subset 데이터 참조하기
    cross$subset[cross$which == 1, 3]
    cross$subset[cross$which == 2, 2]
    cross$subset[cross$which == 5, 3]
    
    ###데이터프레임 관측치 적용
    R = 1:3
    K = 1:5
    for(r in R){
      cat('R=', r, '\n')
      for(i in K){
      datas_idx <- cross$subsets[cross$which == i, r]
      cat('K = ', i, '검정데이터 \n')
      print(iris[datas_idx, ])
      
      cat('K = ', i, '훈련데이터 \n')
      print(iris[-datas_idx, ])
      }
    }
    
    #문제3. descriptive.csv파일내 데이터 data변수에 담고 기술통계량
    data <- read.csv("descriptive.csv")
    
    #3-1 cost컬럼 내 데이터에서 1이상 11이하의 데이터만 추출,평균
    data <- subset(data, data$cost >= 1 & data$cost <= 11)
    x <- data$cost
    mean(x)
    #5.360558
    
    #3-2 1번에서 추출한 데이터를 내림차순 정렬 후 첫 10줄 데이터 보이기
    head(sort(x, decreasing = TRUE), 10)
    #7.9 7.9 7.7 7.7 7.7 7.7 7.2 7.2 7.1 7.1
    
    
    #3-3 1번에서 추출한 데이터에서 3사분위수 구하기
    quantile(x, 3/4)
    #6.2 
    
    
    #3-4 cost2 컬럼 생성하여 1이상 4미만 데이터는 1,
    #    4이상 8미만 데이터는2, 8이상 데이터는 3으로 범주화
    #    첫 10줄 데이터 보이기
    
    #범주화
    data$cost2[data$cost >= 1 & data$cost < 4] <-1
    data$cost2[data$cost >= 4 & data$cost < 8] <-2
    data$cost2[data$cost >= 8] <- 3
    #첫 10줄 데이터
    head(data, 10)
    
    #3-5 4번의 cost2 컬럼 데이터 파이 그래프로 시각화
    pie(table(data$cost2))
    
    #문항 4. twomethod2.csv 내 데이터 셋 이용하여 
    #        교육방법에 따른 시험성적에 차이 있는지 검정
    #귀무가설 : 교육방법에 따른 시험성적에 차이가 없다.
    #대립가설 : 교육방법에 따른 시험성적에 차이가 있다. 
    
    #검정 방법: 방법(명목) -> 시험 성적(비율)
    #가설 검정(아래)
    #p-value가 0.05보다 작다. (대립가설 채택)
    #검정 결과: 교육 방법에 따라 시험 성적에 차이가 있다. 
    #파일 가져오기
    setwd("C:/R work/")
    data2 <- read.csv("twomethod2.csv", header = TRUE)
    head(data2)
    summary(data2)
    
    #subset 작성 및 데이터 전처리
    x1 <- subset(data2, !is.na(data2$score))
    x1
    
    #데이터 분리
    m1 <- subset(x1, x1$method == 1)
    m2 <- subset(x1, x1$method == 2)
    
    #방법에서 성적 추출
    s1 <- m1$score
    s2 <- m2$score
    
    #기술 통계량
    summary(s1)
    summary(s2)
    
    #t.test 함수 사용 
    t.test(s1, s2)
    #p-value가 0.05보다 작다. (대립가설 채택)
    #검정 결과: 교육 방법에 따라 시험 성적에 차이가 있다.
    
    ##단측 검정까지 해 줘야 어떤게 더 큰지 확인할 수 있음!
    t.test(s1, s2, paired = TRUE, 
           alter = "greater",
           conf.int = TRUE, conf.level = 0.95)

     

    댓글