2016-12-07 2 views
2

Mein Datensatz besteht aus Genexpressionswerten, die über 3 Zeitpunkte aufgezeichnet wurden. Ich versuche einen Anova-Test mit Tukey-Korrektur anzuwenden, um nach differenziellen Genexpressionen über die Zeitpunkte zu suchen. So für jedes Gen möchte ich einen Vergleich wie: Gen ein Zeitpunkt 1 vs 2 Gen ein Zeitpunkt 2 vs 3 Gen ein Zeitpunkt 3 vs 1ANOVA innerhalb von Teilmengen von Daten

Meine Daten sind im folgenden Format:

> head(rf) 
       gene  expn timepoint rep 
2 EG620009 // EG620009 8.428851  x0hr 0 
3     LYPLA1 10.386500  x0hr 0 
21 EG620009 // EG620009 8.582346  x0hr 1 
31    LYPLA1 10.379710  x0hr 1 
22 EG620009 // EG620009 8.566248  x0hr 2 
32    LYPLA1 10.399080  x0hr 2 
    > tail(rf) 
       gene  expn timepoint rep 
23 EG620009 // EG620009 8.561409  x24hr 0 
33    LYPLA1 10.233400  x24hr 0 
24 EG620009 // EG620009 8.750639  x24hr 1 
34    LYPLA1 10.023780  x24hr 1 
25 EG620009 // EG620009 8.560267  x24hr 2 
35    LYPLA1 10.025980  x24hr 2 

wenn ich tun waren:

TukeyHSD(aov(rf$expn ~ rf$timepoint * rf$gene)) 

dies würde mir einen Vergleich zwischen jedem Zeitpunkt über alle Gene dh. einschließlich Vergleiche wie Gen ein Zeitpunkt 1 gegen Gen b Zeitpunkt 2

Ich habe versucht zu erarbeiten, wie die AOV-Funktion auf die Daten-Teilmenge nach Gen anzuwenden. Ich habe eine Funktion definiert, die den p-Wert als Ausgabe gibt und versuchte, das auf jedes Gen einzeln anzuwenden, indem ich die by-Funktion wie unten verwende;

> gene.aov = function(x) {TukeyHSD(aov(expn ~ timepoint, data = x))} 
> aov.pval = function(y) {y$timepoint[,4]} 
> gene.pval = function(z) {aov.pval(gene.aov(z))} 
> pvals = by(rf$expn,list(rf$gene),gene.pval) 
> Error in eval(predvars, data, env) : 
    numeric 'envir' arg not of length one 

Irgendein Hinweis, warum das nicht funktioniert? Oder sollte ich dieses Problem ganz anders angehen? Danke!

Antwort

1

es funktioniert nicht, weil by erwartet es erste Argument ist eine data.frame oder Matrix zu sein, sind Sie vorbei ist rf$exp, die einen numeric Vektor ist. Sie könnten dies tun und es wird gut funktionieren (Ich habe die verschiedenen Funktionen für die Lesbarkeit aufgegeben).

by(rf, rf$gene, function(x) {TukeyHSD(aov(expn ~ timepoint, data = x))}, simplify = F) 

rf$gene: EG620009 
    Tukey multiple comparisons of means 
    95% family-wise confidence level 

Fit: aov(formula = expn ~ timepoint, data = x) 

$timepoint 
       diff  lwr  upr  p adj 
x24hr-x0hr 0.09829 -0.123391 0.319971 0.2857424 

--------------------------------------------------------------------------- 
rf$gene: LYPLA1 
    Tukey multiple comparisons of means 
    95% family-wise confidence level 

Fit: aov(formula = expn ~ timepoint, data = x) 

$timepoint 
       diff  lwr  upr  p adj 
x24hr-x0hr -0.2940433 -0.4876756 -0.100411 0.0135193 
+0

Großartig, vielen Dank für Ihre Hilfe :) – Sarah

Verwandte Themen