2015-08-14 5 views
1

Я работаю над этим в течение большей части сегодняшнего дня и не могу найти ответ нигде в Интернете.fligner.test на R для нескольких столбцов

У меня есть набор данных с двумя переменными факторами и 30 зависимыми переменными. Я хотел бы использовать тест fligner, чтобы определить, выполняется ли предположение о равной дисперсии для КАЖДОЙ зависимой переменной, основанной на взаимодействии между двумя множителями.

я могу сделать это для одной переменной в то время, и получить р-значение:

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

Но я не могу сделать это для всех переменных одновременно. Я пробовал работать (это то, что я использовал, чтобы получить все данные shiroiro.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 (с (1,06, 0,98, 0,94, 0,95, 1,08, 0,95, 0,76, : «х» и «г» должны иметь одинаковую длину

ответ

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 

конечно мой набор данных не очень хорошо подходит для этой проверки гипотезы, однако, р-значение. для первого теста было 1 а значение р для второго теста было равно 0,298.

+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) 
Смежные вопросы