Ошибка переменной длины в цикле R ANOVA - PullRequest
0 голосов
/ 24 августа 2018

Я сейчас пытаюсь запустить ANOVA на моем фрейме данных, который имеет следующий формат:

ethnicity sampleID batch gender gene1 gene2 gene3 ...

.. до пары тысяч генов, таблица заполнена значениями экспрессии генов.

Ниже приведен код, который я использую, чтобы попытаться запустить анову для каждого гена, чтобы найти различия между этническими группами:

# here, 'merge' is the dataframe as described above
# set ethnicity to categorical
merge$ethnicity <- factor(merge$ethnicity, levels=c("Chinese","Malay","Indian"))

# parametric anova for each gene
baseformula <- " ~ ethnicity"
for (i in 5:ncol(merge))
{
  p <- anova(lm(colnames(merge)[i] ~ ethnicity, data=merge))  # variable lengths differ??
}

Когда я пытаюсь запустить этот код, я получаю следующую ошибку:

Ошибка в model.frame.default (формула = имена столбцов (объединить) [i] ~ этническая принадлежность, : переменная длина отличается (найдено для «этнической принадлежности»)

Я проверил длину моего столбца этнической принадлежности, который совпадает с длиной моего столбца gene1. Я также пытался использовать команду na.omit() для merge$ethnicity, но она по-прежнему выдает ту же ошибку.

У кого-нибудь есть предложения по поводу проблемы?

Спасибо!


РЕДАКТИРОВАТЬ: Вот первые пять строк для моего кадра данных:

Вот первые пять строк и первые пять столбцов для моего кадра данных:

    ethnicity sample.id Batch Gender X7896759  
1           1 H60903    B6      1  6.19649  
2           1 H61603    B2      1  6.74464  
3           1 H61608    B7      2  6.20268  
4           1 H62204    B4      1  6.71395  
5           1 H62901    B7      2  6.59963

Используя код:

for (i in 5:ncol(merge))
{
  print(colnames(merge)[i])
  print(summary(aov(merge[,i] ~ merge$ethnicity)))

}

, кажется, дает мне следующую ошибку:

Ошибка в уровнях (x) [x]: только 0 могут быть смешаны с отрицательными индексами Дополнительно: Предупреждающие сообщения: 1: В model.response (mf, "numeric"):
использование type = "numeric" с ответом фактора будет проигнорировано 2: In Ops.factor (y, z $ residuals): ‘-’ не имеет значения для факторов

1 Ответ

0 голосов
/ 24 августа 2018

Я сгенерировал пример. df содержит переменную etnicity, с 3 группами и двумя генами. etnicity - ваша предикторная переменная. loop выводит итоговый результат aov для каждого связанного гена в etnicity.

set.seed(1); df <- data.frame(etnicity=c('A', 'B', 'C','A', 'B', 'C','A', 'B', 'C'), gene1=rnorm(9), gene2=rnorm(9))

for(i in 2:ncol(df)){
  print(colnames(df)[i])
  print( summary( aov(df[,i] ~ df$etnicity) ) )
  }

[1] "gene1"
            Df Sum Sq Mean Sq F value Pr(>F)
df$etnicity  2  1.324  0.6619   1.006   0.42
Residuals    6  3.947  0.6579               
[1] "gene2"
            Df Sum Sq Mean Sq F value Pr(>F)
df$etnicity  2  2.436   1.218   0.977  0.429
Residuals    6  7.478   1.246 

Применяется к данным, аналогичным операциям.

df <- read.table(text="ethnicity sample.id Batch Gender X7896759  
1           1 H60903    B6      1  6.19649  
2           1 H61603    B2      1  6.74464  
3           2 H61608    B7      2  6.20268  
4           2 H62204    B4      1  6.71395  
5           3 H62901    B7      2  6.59963", header=T, stringsAsFactors=F)  


for(i in 5:ncol(df)){
  print(colnames(df)[i])
  print(summary(aov(df[,i]~df$ethnicity)))
}

[1] "X7896759"
             Df  Sum Sq Mean Sq F value Pr(>F)
df$ethnicity  1 0.00803 0.00803   0.084  0.791
Residuals     3 0.28767 0.09589  
...