전산통계학 5주차 강의 - F test, T test, Matrix

코딩 공부/R-전산 통계학 2019. 11. 17. 02:37
반응형

F+T test

sm<-function(x1, x2, alpha1, alpha2, sided) { 
  fpvalue<-var.test(x,y)$p.value
  if (fpvalue < alpha1) {tpvalue<-t.test(x,y, var.equal = TRUE)$p.value
  }
  else {tpvalue<-t.test(x,y, sided, var.equal =FALSE)$p.value
  }
  ifelse (tpvalue < alpha2,
          result<-"reject H0"
          ,result<-"accept H0")
  result
  
}
 sm(x, y, 0.05, 0.05, "less")

 

그러면, var.test 나 t.test 명령어가 아닌, 직접 프로그램을 짜서 F+T test 를 돌리게 만들 수 있을까? (아마 과제로 낼 겁니다)


matrix exercise (시험문제 단골)

#DATA (everytime, fixed it)

x<-matrix(1:121,11)        

sm<-function(x) {
      y<-x[,1]
      x[,1]<-x[,11]
      x[,11]<-y
  z<-x
  
  w<-z[1,]
  z[1,]<-z[11,]
  z[11,]<-w
  z
  }
sm(x)

 

#professor's example 1 (맨 좌우콜럼을 바꾼 후, 맨 위아래 로우를 서로 바꿈)


<문제>

다음 명령어가 어떤 규칙에 의거해서 바꾼 것인지 알아보시오

sm<-function (x) {
  n<-nrow(x) ; m<-ncol(x)
  for (i in 1:n) {
    y[i]=x[i,i] 
    for (j in 1:m){
      if(i+j==12) {
        x[i,i]<-x[i,j]
        x[i,j]=y[i]
      }
    }
  }
  x
}
sm(x)


<첨언>

바뀐 곳만 보고싶다면, NA를 활용하는 것도 나쁘지 않은 방법이다

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

jesus<-function (x) {
  for ( i in 1:nrow(x)) {
    for ( j in 1:ncol(x)) {
      if (j==i+5) {x[i,j]<-3}
      else if (i+j==17) {x[i,j]<-2}
      else if (i==j+5) {x[i,j]<-1}
      else if (i+j==7) {x[i,j]<-0}
      else {x[i,j]<-NA}
    }
  }
  x
}
jesus(x)


<문제>

11x11 행렬에서 4모양을 0으로 만든 후에, 4안의 공백중에서 가장 큰 값(max) 으로 그 공백칸을 채워라

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

four<-function(x) {
  y=c()
  for ( i in 1:nrow(x)) {
    for (j in 1:ncol(x)) {
      if(i+j==7) {x[i,j]<-0}
      x[6,]<-0
      x[,6]<-0
      if (i<6 & j<6 & i+j>=8 & i+j<=10) {z<-x[i,j]}
    }
  }
  for ( i in 3:5) {
    for (j in (8-i):5) {
      y<-c(y,x[i,j])
    }
  }
  for ( i in 3:5) {
    for (j in (8-i):5) {
      x[i,j]<-max(y)
    }
  }
  x
}
four(x)

이 문제에서 핵심은 4 안의 공백의 숫자들을 어떻게 저장해두고, 활용해야 하는가? 를 곰곰히 생각해보아야 한다

TAG