Metabolomics Society Forum

Software => XCMS => R => XCMS - Cookbook => Topic started by: hpbenton on August 19, 2011, 09:43:03 AM

Title: Normalise to Fresh weight
Post by: hpbenton on August 19, 2011, 09:43:03 AM
Problem: Your samples may contain different amounts of freshweight, so you want to correct the peak intensities accordingly. The following snippet will take a vector of the same length as your number of samples, and apply the correction factor to each peak in the xcmsSet:

Code corrected for full pipeline processing - (thank you Axel) viewtopic.php?t=286&p=839#p839 (http://metabolomics-forum.com/viewtopic.php?t=286&p=839#p839)
Code: [Select]
library(xcms)
library(faahKO)
cdfpath <- system.file("cdf", package = "faahKO")
cdffiles <- list.files(cdfpath, recursive = TRUE,full=T)
faahko <- xcmsSet(cdffiles)
faahko <- group(faahko)
faahko <- retcor(faahko, p="m", f="s")
xset14<-fillPeaks(faahko)
Finish xcms processing before correcting. The next step, the diffreport will use the corrected numbers for the statistical analysis and for the box plots, if you have multiple classes. Also remember that the EICs are not corrected as they are generated directly from the original data files themselves.


Start the correction
Code: [Select]
#samples: 20    21     22       23     …              example sample names
fw <-    c(99.0, 94.3, 101.3, 83.4, …)        #example fresh weights (mg)

#first part of factors, for detected peaks
factors1 <- rep(100/fw, times=table(peaks(xset13)[,"sample"]))
#second part of factors, for filled peaks
nrorigpeaks<-nrow(xset13@peaks)+1
nrtotalpeaks<-nrow(xset14@peaks)
factors2<-rep(100/fw, times=table(peaks(xset14)[nrorigpeaks:nrtotalpeaks,"sample"]))
#combine factors
factors<-c(factors1, factors2)

#weight correct
intensitycolumns <- c("into", "intb", "maxo")
xset14@peaks[,intensitycolumns] <- xset14@peaks[,intensitycolumns] * factors




old code
Code: [Select]
library(xcms)
library(faahKO)
xs <- faahko
## Example Freshweights
fw <- c(1.3, 0.6, 0.5, 0.6, 0.4, 2.4, 0.5, 0.8, 0.4, 0.7, 0.9, 0.9)
## Calculate correction factor for each peak
factors <- rep(1/fw, times=table(peaks(xs)[,"sample"]))
## Apply to peak intensities
intensitycolumns <- c("into", "intf", "maxo", "maxf")
xs@peaks[,intensitycolumns] <- xs@peaks[,intensitycolumns] * factors