자동으로 여려 변수의 통계를 한번에 해결해 줄수 있는 함수를 만들어 보려고 하는데 잘 안됩니다.
이 함수는 문선생님께서 만드신 것을 가져다가 일부 수정을 해보았습니다.
방명록에 남긴 글 처럼,
우선 정규성 검정을 하고(S-W test) p-vlaue가 0.05 이하인 경우
비모수 검정을 하려고 하였는데, ties가 있을 경우 p-value가 표시가 안되어,,
median을 이용해 보려고 하다가
20% trimmed mean을 이용해 그룹간 비교를 하려고 합니다(Yuen`s method).
함수는 Rand. R. Wilcox라는 분이 만들어 놓은 패기지(WRS)가 있어
그걸 이용합니다.
문제는 만들어 놓은 함수를 보시면 아시겠지만, 두 그룹간 비교일 경우
많은 함수가 하나의 열벡터에 그룹을 코딩하게 됩니다.
그런데 이 yuen이라는 함수는
yuen(x,y,tr=0.2, alpha=0.05)로 각각의 그룹을 x,y로 분리를 해주어야 합니다.
myt2.test라는 함수를 실행시키려면
데이터 프레임 내의 분석하고자 하는 변수가 코딩되어 있는 열벡터의 이름(X)과
그룹이 코딩되어 있는 열벡터의 이름(Y)를 기입하고, 마지막에 data의 이름을 기입하게 되는데,
문제가 단순히 열벡터의 이름만 기입을 하게되면 해당 object가 없다고 나오고
data$X, data$Y의 형태로 기입을 하게 되면
subset 함수를 써서 데이터 프레임을 분리해 놓아야 가능한
yuen 함수에서 에러가 납니다...
어떻게 해결해야 할까요?
myt2.test=function(X,Y,mydata)
{
#test for normality by shapiro-wilk test
cat("먼저 두 집단의 변수가 정규분포를 따르는지 검정합니다.\n")
mdlm=lm(X~Y,data=mydata)
stout=shapiro.test(resid(mdlm))
print(stout)
if(stout$p.value<0.05)
{
cat("p value 는 ",stout$p.value," 입니다.\n ")
cat("변수가 정규분포를 따르지 않으므로 Yuen`s method(0.2 절삭)로 검정합니다.\n")
Yc=subset(mydata,Y=="C")
Yd=subset(mydata,Y=="D")
yout=yuen(Yc$X,Yd$X,tr=0.2, alpha=0.05)
print(yout$p.value)
}
else
{
cat("정규분포를 따르므로 등분산 검정을 합니다.\n")
out=var.test(X~Y,data=mydata)
print(out)
if(out$p.value<0.05)
{
cat("p value 는 ",out$p.value," 입니다.\n ")
cat("두 집단의 분산이 다르므로 Welch`s test로 검정합니다.\n")
out1=t.test(X~Y,data=mydata)
print(out1)
}
else
{
cat("p value 는 ",out$p.value,"입니다.\n ")
cat("두 집단의 분산이 같으므로 pooled variance를 이용한 t-test 로 검정합니다.\n")
out2=t.test(X~Y,data=mydata,var.equal=TRUE)
print(out2)
}
}
}