我正在尝试将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)
谢谢女士们,先生们。
答案 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)