2015-08-14 54 views
1

我一直在爲今天的大多數工作,並無法在任何地方在網上找到答案。fligner.test在多列R上

我有一組數據有兩個因子變量和30個因變量。我想用fligner測試來確定每個因變量是否滿足等方差假設,基於我的兩個因子變量之間的相互作用。

我可以一次爲一個變量做到這一點,得到的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

下面是一個例子

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。

+0

非常感謝你,這段代碼完美工作。 – Jini

0

有點老派:)但這個工程:

# Generate some data 
testData <- data.frame(factor1 = sample(LETTERS[1:6], 100, T), 
    factor2 = sample(LETTERS[7:10], 100, T), 
    var1 = rnorm(100), var2 = rnorm(100), var3 = rnorm(100)) 

# Create formulae - I've used all columns starting var* as the Dependant Variables 
formulae <- paste(grep("^var", names(testData), value = TRUE), " ~ interaction(factor1, factor2)") 

# Apply the function 
pValues <- sapply(formulae, function(F, DAT) fligner.test(as.formula(F), data = DAT)$p.value, DAT = testData) 
pValues 

可能吸塵器像這樣分割,對「更人道將來你」的理念......

# Funtion that performs a fligner test and returns a P value 
flignerP <- function(V, data) { 
    theForm <- as.formula(paste(V, "~ interaction(factor1, factor2)")) 
    fligner.test(theForm, data = data)$p.value 
} 

# Perform the test on the var* variables 
theVars <- grep("^var", names(testData), value = TRUE) 
sapply(theVars, flignerP, data = testData)