전산통계학 4주차 강의 - LIST, F test, T test, var test
코딩 공부/R-전산 통계학 2019. 11. 15. 09:44Data 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 순서이다"
위 명령어를 쳤을 때, 나오는 값과 동일한 함수를 만들어라 (여러가지로 응용되니 꼭 해보는 것을 추천)