This is a test version of Biostars. For the public version, visit https://www.biostars.org.
R: Collapsed to unique genes (Affymetrix microarray)

I have a list of genes from an Affymetrix microarray analysis.

However I have duplicate genes, I wonder how do I collapsed to unique genes by calculating the mean expression of transcripts from the same gene locus?

Any information is valid.

Thank you!

r microarray affymetrix

1 answer

Hello Joe,

You can use aggregate() or limma's avereps() function.

Kind regards,

Kevin

Hello kevin

I tried avereps() function, after compute statistics for the data, however I don't think avereps() did the media, it seems that he just removed the gene with the lowest value.

or should I do this before generating my list of DEGs?

Thank you so much Kevin!

Hello kevin

you know how to access avereps using the function eset <- readExpressionSet("data.txt", header=T)

 `eset_fil<-avereps(eset,ID=eset$geneID)`

I always get the error:

Error in avereps.default(eset, ID = eset$geneID) : No probe IDs

Ah, your input object is an ExpressionSet, so, that changes the behaviour of the function. The bahaviour of many functions varies depending on the class of the input object (SingleCellExperiment, ExpressionSet, EList, data matrix, data frame, etc).

What is stored in eset$geneID?

Actually I have a data.txt file which is normalized microarray data and I also have Annotation data. I can easily analyze normalized data.txt, but in the end when i merge with my Annotation list, I end up with duplicate genes.

So I decided to merge data.txt + annotations and use the avereps function to avoid duplicate genes.

But that's not doing well.

What is stored in eset$geneID?

the list of genes

Could I not do it that way?

1.Find my list of differentially expressed probes after merge with the annotation and then do the avereps? and remove the NA?

Oh, but you can just read data.txt into a standard data-frame or data-matrix. Do you need it to be an ExpressionSet? limma can work with any data-matrix / -frame

Here is a quick example:

a <- as.data.frame(matrix(rexp(200, rate=.1), ncol=20))

a <- data.frame(
  geneID =c(rep("a", 5), rep("g", 5)),
  a)

a
   geneID         V1         V2         V3        V4         V5          V6
1       a 10.0124668 11.9255510  4.0475745  1.358108  5.3276694 31.85456954
2       a  1.7395386 11.2418697 32.3563350 54.580172 12.2343322 14.74439485
3       a  3.2208449  4.4952939  1.8298942  1.452729  2.5981188 12.35995226
4       a  5.4150530 12.3290295  5.6130080 16.716527 14.3667175  8.91892914
5       a 20.0084010  1.3876296 10.0609643  3.777215  0.4839389 11.18110204
6       g  0.4891083  9.6643045  9.6691789 11.450733  8.6788831  1.98622159
7       g 10.3117987 12.0075213  0.1763281 16.698935 14.1390305 16.61070795
8       g 14.1528589  2.3008524  2.4303481 11.761187  2.6730166  1.27720752
9       g  1.2306315  0.9444662 14.0066054  6.947162  2.6716584  3.47272504
10      g  6.0259514 18.1136992  9.9320698 15.407635  0.3642130  0.02209801
          V7           V8         V9        V10        V11        V12
1  10.878040 1.305372e+01  0.9893343 22.7783039  8.8343238  6.4427322
2   7.674188 1.172054e+01  6.1814065  0.7211316  4.9604433  0.5250960
3   4.754873 5.618160e+00 17.1038089  6.2044634 27.5845328 41.8400992
4   3.416827 3.392045e+00  2.1885927 36.6936841  0.7678490  9.8909097
5  29.270410 4.456995e-04  2.7364219 17.5774500 21.6362236  6.9892572
6  21.913587 1.677730e+01  3.9166071  3.9899511  0.8409301  0.7111987
7  11.465969 1.267289e+00  5.6575621  1.7919602  8.8182862  6.5374935
8  13.170292 2.390979e+01 11.3208811  8.5220598  5.2944025 35.6490934
9   6.194696 5.090157e+00  9.3267260  6.7335488 25.7741919  2.3195227
10  2.466330 1.286938e+01  7.5946475 28.1245333 13.6518179  4.7680661
          V13        V14         V15       V16        V17       V18       V19
1   2.9727924  5.2258699 29.55052895 13.821802  0.8710937  2.362678 11.799666
2   9.1994559  0.1900076  1.72736752 24.377843  3.1250694  8.846956  8.866539
3  17.9306954  9.1904710  6.34737243  6.697301  1.3553958 30.822013  6.671391
4   2.7093821  2.1168722  0.01587546 22.641845 11.4590629  4.073248 21.109629
5   5.6086534  0.7472446  3.59445844  5.283256  0.8475345 13.292848  6.956337
6   3.6795144  9.1000291 17.90547453 16.219322 13.2109528  2.547036 45.453231
7   0.1632086  4.0360949  1.90470806 11.935634  6.2560181 27.077792 14.666115
8   3.4062190  9.9844650  2.83656092  6.193150  1.0027526 49.312002  8.554801
9   2.6365014 14.2642789  2.01253534 16.994186  9.3008740 16.310225  2.268120
10  1.1968069  9.5823697  5.07947367  6.222578  7.0315114  4.734242 23.603816
          V20
1  20.1157690
2  13.9122525
3  19.4145607
4   4.1486591
5  15.0403439
6  11.6190681
7   2.3373972
8   3.5504567
9   9.7002796
10  0.6964145

limma::avereps(a[,2:ncol(a)], a$geneID)
        V1       V2        V3       V4       V5        V6       V7        V8
a 8.079261 8.275875 10.781555 15.57695 7.002155 15.811790 11.19887  6.756982
g 6.442070 8.606169  7.242906 12.45313 5.705360  4.673792 11.04218 11.982784
        V9       V10      V11       V12      V13      V14      V15      V16
a 5.839913 16.795007 12.75667 13.137619 7.684196 3.494093 8.247121 14.56441
g 7.563285  9.832411 10.87593  9.997075 2.216450 9.393448 5.947751 11.51297
       V17      V18      V19       V20
a 3.531631 11.87955 11.08071 14.526317
g 7.360422 19.99626 18.90922  5.580723

Hello Kevin,

I try it, but dont work.

I don't think I need to read it as ExpressionSet, my data.txt contains probe ID names and samples ... but I don't think i can analyze it any other way ...

or is it simply read use eset_fil<-avereps(eset,ID=eset$geneID) and do as I usually do in limma?

  f <- factor(targets$Target, levels = unique(targets$Target))
 design <- model.matrix(~0 + f)
 colnames(design) <- levels(f)
 design <- model.matrix(~0 + f)
 colnames(design) <- levels(f)
 fit <- lmFit(eset, design)
write.table(fit, file="fit.txt", sep="\t", quote=FALSE)
contrast.matrix <- makeContrasts("drug-Control", levels=design)
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
output <- topTreat(fit2, coef=1, number=Inf, adjust.method="BH", lfc=2)
write.table(output, file="DEGS.txt", sep="\t", quote=FALSE)

or there is a point I have to make after I do the avereps? para usar o limma?

I will try as you exemplified. Thanks

Fala português? In the example above, you should have:

fit <- lmFit(eset_fil, design)

..where eset_fil is the output of avereps()

Sí, pero no mucho.

I did as you said, but I still get this error.

 Error in rowMeans(y$exprs, na.rm = TRUE) : 'x' must be numeric

I tried transform eset_fil into data frame but same error. I triend as.matrix.... not results

Can you show all of your steps from when you read in the file's contents? Also, paste here a few rows of your data after you have read it in. Remember that you do not have to use readExpressionSet() - just use read.csv() or read.table()

Log in to answer this question.