我今天大部分时间都在研究这个问题,但无法在网上找到答案。
我有一组包含两个因子变量和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'必须具有相同的长度
答案 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。