전산통계학 4주차 강의 - LIST, F test, T test, var test

코딩 공부/R-전산 통계학 2019. 11. 15. 09:44
반응형

Data structure

list (cat 과 더불어서, 함수의 결과값을 정리하는 다른 방법으로 많이 사용)

x <- list(num=c(1,2,3), "Nick", identity=diag(2))


"x에는 첫번째로는 벡터가 , 두번째로는 글자가 , 세번째로는 매트릭스가 대입되어있는 형태"


x$num
x[[1]]             "x에서 첫번째 숫자 벡터를 불러옴"
x[["num"]]     "x에서 첫번째 숫자 벡터를 불러옴"
x[[2]]             "x에서 두번째 글자를 불러옴"
x[[3]].            "x에서 세번째 행렬을 불러옴"

 


if + for + function 연습

x <- c(1:100)

"x 의 짝수 원소 <ㅡ> 홀수 원소의 자리를 맞바꾸시오"

 

for(i in 1:100) {
  if (i%%2==0) {x[i]<-(x[i]-1)}
  else {x[i]<-(x[i]+1)}
}
x


"이번에는 1~100 까지 홀수,짝수 자리를 바꾸고,  결과값으로 1~10 번째 원소와 95~100번째 원소를 출력하라"

 

x<-(1:100)
sm<- function (x) {
  for(i in 1:50) {
    x[2*i-1] <- (2*i)
    x[2*i] <- (2*i-1)
  }
  result = list("1~10"=x[1:10], "95~100"=x[95:100])
  return(result)
}
sm(x)

sm(x)$"9"                #list 문장에서는 굳이 전체제목인 "95~100" 이 아닌 "9" 만 쳐도 그 결과가 나옵니다
sm(x)[[2]]

sm(x)$"1"
sm(x)[[1]]


<문제>

다음 함수는 무엇을 의미할까?

 

x<-(1:100)
jesus <- function (x) {
  for(i in 1:19) {
    for(j in 1:10) {
    x[5*i] <- (5*i+3)
    x[5*i+3] <- (5*i)
    x[10*j] <- (10*j)
    }
  }
  x
}
jesus(x)


var test (F test ; 이분산 테스트)

우선 DATA 를 교재 365p. 의 값들로 설정하자

#DATA
x1<-c(246.3, 255.0, 245.8, 250.7, 247.7, 246.3, 214.0, 242.7, 287.5, 284.6, 268.7, 302.6, 248.3, 243.7, 276.7, 254.9)
x2<-c(340.7, 270.1, 371.6, 306.6, 263.4, 341.6, 307.0, 319.1, 272.6, 332.6, 362.2, 358.1, 271.4, 303.9, 324.7, 360.1)

 

var.test(x1,x2,1,c("two.sided"))

 

함수 안에 함수를 사용하는 법을 알아보자

1. tstar function
tstar<-function(x1,x2,l){
  n1=length(x1) ; n2=length(x2)
  tstar=(mean(x1)-mean(x2)-l)/sqrt(var(x1)/n1+var(x2)/n2)
  tstar
}

2. df function
df<-function(x1,x2){
  n1=length(x1) ; n2=length(x2)
  lamda=(var(x1)/n1+var(x2)/n2)^2/(((var(x1)/n1)^2)/(n1-1)+((var(x2)/n2)^2)/(n2-1))
  r=floor(lamda)
  r
}

 

3. pvalue<-function(tstar,r){
  r=df(x1,x2)
  if(tstar >0 ) {result=pt(tstar,r,lower.tail = F)*2}
  else {result=pt(tstar,r)*2}
  cat(result)
}

pvalue(tstar(x1,x2,0),df(x1,x2))

 

3번 식을 잘 살펴보면, '1,2'번 함수식을 변수로 이용하고 있음을 알 수 있다

 

그렇다면, 이제는 'sided' 까지 변수로 이용해서 F test 와 똑같은 결과가 나오는 함수를 만들 수 있지 않을까?


t test

#교재 361p. 연습문제 13번 DATA
y1<-c(1.79,1.87,1.62,1.96,1.75,1.74,2.06,1.69,1.67,1.94,1.33,1.70,1.65)
y2<-c(2.39,2.56,2.36,2.62,2.51,2.29,2.58,2.41,2.86,2.49,2.33,1.94,2.14)

 

n1=length(y1) ; n2=length(y2)
s1=var(y1) ; s2=var(y2)

t.test(y1,y2, var.equal = T)        
"var.equal 을 통해서 이분산가정인지, 등분산가정인지 정할 수 있다"

(근데 나중에 과제하실 때, F test ㅡ> T test 를 돌리는 함수를 짜게 되실 겁니다......)


<숙제>

t.test(y1,y2, "less", 0 ,F ,T)       "변수1, 변수2, 3경우 중 하나, (mu=값), paired, var.equal 순서이다"

위 명령어를 쳤을 때, 나오는 값과 동일한 함수를 만들어라 (여러가지로 응용되니 꼭 해보는 것을 추천)

TAG