전산통계학 4차 과제 - F+T 테스트, 행렬
코딩 공부/R-전산 통계학 2019. 11. 20. 23:341번) 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값의 위치를 어떻게 빼올지? 정도일 듯 싶네요