将t.test和var.test组合成R中的函数

时间:2014-10-14 05:32:23

标签: r function

我正在尝试将f-test和t-test结合到一个函数中,但R不断返回错误。

ds <- structure(list(Gender = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("F", "M"), class = "factor"), 
    Ratings = c(4L, 1L, 3L, 4L, 5L, 5L, 5L, 3L, 1L, 5L, 4L, 5L
    )), .Names = c("Gender", "Ratings"), class = "data.frame", row.names = c(NA, 
-12L))

从基本统计数据来看,如果var.test返回值&gt; 0.05,t.test应该有参数var.equal = TRUE。

因此

> var.test(ds$Ratings~ ds$Gender)

    F test to compare two variances

data:  ds$Ratings by ds$Gender
F = 1.1324, num df = 5, denom df = 5, p-value = 0.8948
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.1584512 8.0922265
sample estimates:
ratio of variances 
      1.132353

t.test应该是

> t.test(ds$Ratings~ ds$Gender, var.equal = TRUE)

    Two Sample t-test

data:  ds$Ratings by ds$Gender
t = 0.1857, df = 10, p-value = 0.8564
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.833149  2.166482
sample estimates:
mean in group F mean in group M 
   3.833333        3.666667

我正在尝试将这两者组合成一个函数,以便如果var.test的p值为&lt; 0.05则应设置var.equal = FALSE,反之亦然。但是,R仍然返回错误。

 super.t <- function(y,x) {
   tmp <- var.test(y~x)
   if tmp$p.value < 0.05 {
     tmp1 <- t.test(y~x, var.equal = FALSE)
   } else {
     tmp1 <- t.test(y~x, var.equal = TRUE) 
   }
   return(tmp1)
 }

 super.t(ds$Ratings~ ds$Gender)

谢谢女士们,先生们。

1 个答案:

答案 0 :(得分:1)

您的代码无效的原因是您必须在经过测试的if条件周围加上括号,例如:

if (tmp$p.value < 0.05) {

你也是以错误的方式调用函数,你只需要这样做:

super.t(ds$Ratings,ds$Gender)

通过使用公式接口,data=参数以及var.equal=采用逻辑值的事实,您可以简化一些事情:

super.t <- function(form,data,level=0.05) {
  vareq <- var.test(form, data)[["p.value"]] >= level
  t.test(form, data, var.equal = vareq)
}

然后称之为:

super.t(Ratings ~ Gender, ds)