전산통계학 4차 과제 - F+T 테스트, 행렬

코딩 공부/R-전산 통계학 2019. 11. 20. 23:34
반응형

1번) F + T Test 를 프로그램으로 만들고, 그에 대한 결과 값은 귀무가설에 대한 결론으로 나오게끔 하세요

# Data

x<-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)
y<-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)

sm<-function(x1, x2, alpha1, alpha2, l, sided) { 
  n1 <- length(x1) ; n2 <- length(x2)
  s1 <- var(x1) ; s2 <- var(x2)
  fstar <- ( s1/ s2 )
  half<- qf(0.5, n1-1, n2-1)
  
if(fstar < half) {fpvalue <-2*(pf(fstar, n1-1, n2-1))
}
else {fpvalue <-(2*(pf(fstar, n1-1, n2-1, lower.tail = F)))
}
  
  #  Unequal var.
  if (fpvalue < alpha1) {
  tstar <- (mean(x1)-mean(x2)-l)/sqrt(s1/n1+s2/n2)
  df <- floor ( (s1/n1+s2/n2)^2/(((s1/n1)^2)/(n1-1)+((s2/n2)^2)/(n2-1)) )
  
  if(side=="two.sided") {
    ifelse(tstar > 0 , tpvalue<-pt(tstar,df,lower.tail = F)*2, tpvalue<-pt(tstar,df)*2)
  }
  if(sided=="less") {
    tpvalue<-pt(tstar,df)
  }
  if(sided=="greater") {
    tpvalue<-pt(tstar,df,lower.tail = F)
  }
  }
  
  # Equal var.
  if (fpvalue > alpha1)  {
    Sp <- sqrt( ((n1-1)*s1+ (n2-1)*s2) / (n1+n2-2) )
    tstar <- (mean(x1)-mean(x2)-l)/(Sp*(sqrt(1/n1+1/n2)))
    df <- (n1+n2-2)
    if(sided=="two.sided") {
    ifelse (tstar > 0 , tpvalue<-pt(tstar,df,lower.tail = F)*2, tpvalue<-pt(tstar,df)*2)
  }
  if(sided=="less") {
    tpvalue<-pt(tstar,df)
  }
  if(sided=="greater") {
    tpvalue<-pt(tstar,df,lower.tail = F)
  }
    
  }
  ifelse (tpvalue < alpha2,
          result<-"reject H0"
          ,result<-"accept H0")
  
  A<- c(ifelse (fpvalue < alpha1, "case of Not equal var.", "case of Equal var.") , result)
  A
  }


sm(x, y, 0.05, 0.1, 0, "two.sided")
sm(x, y, 0.05, 0.1, 0, "less")
sm(x, y, 0.05, 0.1, 0, "greater")


2번) 다음과 같은 11x11 행렬에서 두 개의 대각선을 기준으로

(1). 상<ㅡ>하 를 바꾸는 함수와

(2). 좌<ㅡ>우를 바꾸는 함수를 만드세요

# 상-하 체인지

x<-matrix(c(1:121),11)

"i will change all diagonal element = 0 , easy to show"
for (i in 1:nrow(x)) {
  for (j in 1:ncol(x)) {
    if (i==j | i+j==12) {x[i,j]<-0}
  }
}

easy1<-function(x) {
  for (i in 1:5) {
    for (j in (i+1):(11-i)) {y<-x[i,j]
      x[i,j]<-x[12-i,j]
      x[12-i,j]<-y }
  } 
  x
}
easy1(x)



# 좌-우 체인지
x<-matrix(c(1:121),11)

"i will change all diagonal element = 0 , easy to show"
for (i in 1:nrow(x)) {
  for (j in 1:ncol(x)) {
    if (i==j | i+j==12) {x[i,j]<-0}
  }
}

easy2<-function(x) {
  for (j in 1:5) {
    for (i in (j+1):(11-j)) {z<-x[i,j]
      x[i,j]<-x[i,12-j]
      x[i,12-j]<-z }
  } 
  x
}
easy2(x)


3번) 11x11 행렬에서 오른쪽 위에서 왼쪽 아래로 향하는 대각선을 기준으로 , 두 개의 삼각형이 만들어 질텐데, 두 삼각형 안에서 max값의 원소를 서로 위치교환 시키세요 (단, 대각선은 양쪽 삼각형에 모두 포함됩니다)

x<-matrix(c(1:121),11)
zmake<-function(x) {
  y=c() ; z=c()
  for( i in 1:nrow(x)) {
    for (j in 1:(ncol(x)+1-i)) {
      y<-c(y,x[i,j])
      if(x[i,j]==max(y)) {myi<-i 
      myj<-j}
    }
  }
  for( i in 1:nrow(x)) {
    for (j in (ncol(x)+1-i):ncol(x)) {
      z<-c(z,x[i,j])
      if(x[i,j]==max(z)) {mzi<-i 
      mzj<-j}
    }
  }
  x[myi,myj] <-max(z) ; x[mzi,mzj]<-max(y)
  x
}
zmake(x)


<과제 총평>

1번 : F test 는 수업시간에도 많이 다루고, n 주차 강의에도 있으니, 쉬웠을 겁니다

그리고, T test 또한 분산이 같냐, 다르냐에 따라서 잘 이해하고 있었다면, 역시 쉬웠을 겁니다

 

2번 : 4개의 분리된 영역을 어디에, 어떻게 저장시킬건지? 에 대한 아이디어만 가지셨다면야... (위의 빨간색 글씨 참고)

 

3번 : 오히려 2번보다 쉽고, 그나마 곤란한 점은 두 삼각형의 max값의 위치를 어떻게 빼올지? 정도일 듯 싶네요

TAG