【问题标题】:Combine t.test and var.test into a function in R将 t.test 和 var.test 组合成 R 中的函数
【发布时间】:2014-10-14 05:32:22
【问题描述】:

我正在尝试将 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 返回的值 > 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 值

 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)

谢谢女士们先生们。

【问题讨论】:

    标签: r function


    【解决方案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)
    

    【讨论】:

    • 非常感谢,先生!您是否也可以让我知道为什么我的原始功能失败 *8 (。再次感谢。
    • 天哪,我花了整个周末,但我仍然卡住了。无法相信 if 条件的括号是关键。谢谢你,先生,我永远感激你!!!
    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多