FL上的fligner.test用于多列

时间:2015-08-14 18:17:03

标签: r anova

我今天大部分时间都在研究这个问题,但无法在网上找到答案。

我有一组包含两个因子变量和30个因变量的数据。我想使用fligner测试来确定是否满足EACH因变量的相等方差假设,基于我的两个因子变量之间的相互作用。

我可以一次为一个变量执行此操作并获取p值:

fligner=fligner.test(variable~interaction(factor1,factor2),data=mydata)
fligner$p.value`

但我无法同时为所有变量做到这一点。我尝试了lapply(这是我以前得到的所有shapiro.test数据)。这是我的代码:

#Do the regressions and get residuals for all variables

variables <- as.matrix( mydata[,x:y] )
allfits<-lm(variables~Drug*Pollutant,data=mydata)
allresiduals<-residuals(allfits)

#Shapiro test on all of it
residuals<-as.data.frame(allresiduals)
lshap <- lapply(residuals, shapiro.test)
lres <- sapply(lshap, `[`, c("p.value"))
lres

请帮忙!这让我发疯了。

我尝试过这个并不起作用:

fligners<-fligner.test(variables~interaction(Pollutant,Drug),data=mydata)

我收到此错误:fligner.test.default中的错误(c(1.06,0.98,0.94,0.95,1.08,0.95,0.76,:   'x'和'g'必须具有相同的长度

1 个答案:

答案 0 :(得分:0)

这是一个例子

data(CO2)
mydata <- CO2

# columns to apply fligner test to
cols <- 4:5

# interaction columns
factor_cols <- 2:3

# apply test
fligner <- sapply(cols, function(x) {
    fligner.test(mydata[,x] ~ 
                 interaction(mydata[,factor_cols[1]], mydata[,factor_cols[2]]))
})

# get p-values
p.values <- apply(fligner, 2, function(x) {
    x$p.value
})

# p.values = 1.0000000 0.2983002

当然,我的数据集并不适合这种假设检验。但是,第一次测试的p值为1,第二次测试的p值为0.2983。