diff --git a/DESCRIPTION b/DESCRIPTION index cdc2e2f..e685a4b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,7 @@ Package: SRMService Type: Package Title: Report Quantitative Mass Spectrometry Data Date: 2018-09-10 -Version: 0.1.9.23 +Version: 0.1.9.24 Authors@R: c(person("Witold", "Wolski", email = "wewolski@gmail.com", role = c("aut", "cre")), person("Jonas", "Grossmann", email = "jg@fgcz.ethz.ch", role = c("aut")), person("Christian", "Panse", email = "cp@fgcz.ethz.ch", role = c("aut"))) @@ -38,14 +38,23 @@ Imports: usethis, yaml Suggests: - missForest + missForest, + testthat, + ggplot2, + knitr, + readxl, + MSqRob +Remotes: + protViz/quantable, + statOmics/MSqRob License: GPL LazyData: TRUE URL: https://github.com/protViz/SRMService BugReports: https://github.com/protViz/SRMService/issues Repository: CRAN -RoxygenNote: 6.1.1 -Collate: +RoxygenNote: 7.1.1 +VignetteBuilder: knitr +Collate: 'A_dataset_docu.R' 'RequiredColumns.R' 'eb.fit.R' @@ -64,14 +73,5 @@ Collate: 'readMaxQuant.R' 'transitionCorrelations.R' 'zzz.R' -Suggests: - testthat, - ggplot2, - knitr, - readxl, - MSqRob -Remotes: - protViz/quantable, - protViz/bibliospec, - statOmics/MSqRob -VignetteBuilder: knitr +Depends: + R (>= 2.10) diff --git a/R/PrepareRmdAnalysisEnv.R b/R/PrepareRmdAnalysisEnv.R index 186b2b1..b74c8c4 100644 --- a/R/PrepareRmdAnalysisEnv.R +++ b/R/PrepareRmdAnalysisEnv.R @@ -36,8 +36,8 @@ RMD_MQ_Quant_2GrpAnalysis <- function(workdir = getwd()){ .scriptCopyHelperVec(c("/RunScripts/Run_MQ_QuantTwoGroupAnalysis.R", "/doc/Grp2Analysis.Rmd", "/doc/bibliography.bib", - "/doc/Grp2Analysis_Empty.Rmd_t", - "/doc/Grp2Analysis_MissingInOneCondition.Rmd_t"), workdir = workdir ) + "/doc/Grp2Analysis_MissingInOneCondition.Rmd", + "/doc/Empty.Rmd"), workdir = workdir ) } #' copies the RMD and Run files for 2 grp analysis based on a PD (protein discoverer) in your working directory. diff --git a/man/Annotation.Rd b/man/Annotation.Rd index dff8163..f4e1c14 100644 --- a/man/Annotation.Rd +++ b/man/Annotation.Rd @@ -4,11 +4,9 @@ \name{Annotation} \alias{Annotation} \title{Condition Map} -\format{An object of class \code{R6ClassGenerator} of length 24.} -\usage{ -Annotation -} \description{ +Condition Map + Condition Map } \examples{ @@ -29,4 +27,117 @@ cm$sampleID cm$get_sample_id() cm$annotation } -\keyword{datasets} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-new}{\code{Annotation$new()}} +\item \href{#method-exists}{\code{Annotation$exists()}} +\item \href{#method-levels}{\code{Annotation$levels()}} +\item \href{#method-get}{\code{Annotation$get()}} +\item \href{#method-get_factors}{\code{Annotation$get_factors()}} +\item \href{#method-get_sample_id}{\code{Annotation$get_sample_id()}} +\item \href{#method-as_numeric}{\code{Annotation$as_numeric()}} +\item \href{#method-get_color}{\code{Annotation$get_color()}} +\item \href{#method-clone}{\code{Annotation$clone()}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-new}{}}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$new( + annotation, + experimentID, + fixed = NULL, + random = NULL, + sampleID = "Raw.file" +)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-exists}{}}} +\subsection{Method \code{exists()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$exists(colname)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-levels}{}}} +\subsection{Method \code{levels()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$levels(colname)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get}{}}} +\subsection{Method \code{get()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$get(colname)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_factors}{}}} +\subsection{Method \code{get_factors()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$get_factors()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_sample_id}{}}} +\subsection{Method \code{get_sample_id()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$get_sample_id()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-as_numeric}{}}} +\subsection{Method \code{as_numeric()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$as_numeric(colname)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_color}{}}} +\subsection{Method \code{get_color()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$get_color( + colname, + pal_function = dichromat_pal, + pal_name = "BrowntoBlue.10" +)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{Annotation$clone(deep = FALSE)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{
}} +} +} +} diff --git a/man/Grp2Analysis-class.Rd b/man/Grp2Analysis-class.Rd index 3dd89a0..c40f879 100644 --- a/man/Grp2Analysis-class.Rd +++ b/man/Grp2Analysis-class.Rd @@ -59,8 +59,7 @@ Perform 2 group analysis with visualization \item{\code{setMQProteinGroups(MQProteinGroups)}}{set MQ protein groups table} -\item{\code{setNormalizationMethod(normalizationMethod = "robustscale", - housekeeper = "")}}{set the normalization parameters} +\item{\code{setNormalizationMethod(normalizationMethod = "robustscale", housekeeper = "")}}{set the normalization parameters} \item{\code{setProteins(protein)}}{used to verify proteingroups structure and set members} }} diff --git a/man/MQtoMSstatsFormat.Rd b/man/MQtoMSstatsFormat.Rd index d37cde4..9f4ce2e 100644 --- a/man/MQtoMSstatsFormat.Rd +++ b/man/MQtoMSstatsFormat.Rd @@ -4,9 +4,15 @@ \alias{MQtoMSstatsFormat} \title{MaxQtoMSstatsFormat} \usage{ -MQtoMSstatsFormat(evidence, annotation, proteinGroups, - useUniquePeptide = TRUE, summaryforMultipleRows = max, - fewMeasurements = "remove", removeMpeptides = TRUE) +MQtoMSstatsFormat( + evidence, + annotation, + proteinGroups, + useUniquePeptide = TRUE, + summaryforMultipleRows = max, + fewMeasurements = "remove", + removeMpeptides = TRUE +) } \arguments{ \item{evidence}{MQ evidence.txt read using read.csv(sep=\"\\t\")} diff --git a/man/ProteinTableR6.Rd b/man/ProteinTableR6.Rd index a22670a..64d4853 100644 --- a/man/ProteinTableR6.Rd +++ b/man/ProteinTableR6.Rd @@ -4,21 +4,11 @@ \name{ProteinTableR6} \alias{ProteinTableR6} \title{Protein Table} -\format{An object of class \code{R6ClassGenerator} of length 24.} -\usage{ -ProteinTableR6 -} \description{ Protein Table -} -\section{Fields}{ - -\describe{ -\item{\code{data}}{data.frame with colnames sample ID rownames proteinID} - -\item{\code{experimentID}}{name of the experiment} -}} +Protein Table +} \examples{ library(SRMService) x <- data.frame(Raw.file = c("A","B","C"),"MeasurementOrder" = c(1,2,3) , Gender = c("F","F","M")) @@ -32,4 +22,117 @@ pt$get_data_long() pt$get_data_wide() pt$get_all_long() } -\keyword{datasets} +\section{Public fields}{ +\if{html}{\out{
}} +\describe{ +\item{\code{data}}{data.frame with colnames sample ID rownames proteinID} + +\item{\code{experimentID}}{name of the experiment} +} +\if{html}{\out{
}} +} +\section{Active bindings}{ +\if{html}{\out{
}} +\describe{ +\item{\code{experimentID}}{name of the experiment} +} +\if{html}{\out{
}} +} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-new}{\code{ProteinTableR6$new()}} +\item \href{#method-set_data_wide}{\code{ProteinTableR6$set_data_wide()}} +\item \href{#method-get_protein_id}{\code{ProteinTableR6$get_protein_id()}} +\item \href{#method-get_data_long}{\code{ProteinTableR6$get_data_long()}} +\item \href{#method-get_all_long}{\code{ProteinTableR6$get_all_long()}} +\item \href{#method-get_data_wide}{\code{ProteinTableR6$get_data_wide()}} +\item \href{#method-get_annotation}{\code{ProteinTableR6$get_annotation()}} +\item \href{#method-clone}{\code{ProteinTableR6$clone()}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-new}{}}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$new( + annotation, + proteinID = "proteinID", + required = c("NrPeptides", "Fasta.Headers") +)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-set_data_wide}{}}} +\subsection{Method \code{set_data_wide()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$set_data_wide(data)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_protein_id}{}}} +\subsection{Method \code{get_protein_id()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$get_protein_id()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_data_long}{}}} +\subsection{Method \code{get_data_long()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$get_data_long()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_all_long}{}}} +\subsection{Method \code{get_all_long()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$get_all_long()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_data_wide}{}}} +\subsection{Method \code{get_data_wide()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$get_data_wide()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-get_annotation}{}}} +\subsection{Method \code{get_annotation()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$get_annotation()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinTableR6$clone(deep = FALSE)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{
}} +} +} +} diff --git a/man/ProteinVariableSelect.Rd b/man/ProteinVariableSelect.Rd index 1ea35f4..52befa7 100644 --- a/man/ProteinVariableSelect.Rd +++ b/man/ProteinVariableSelect.Rd @@ -1,14 +1,84 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/R6_ProteinVariableSelect.R -\docType{data} \name{ProteinVariableSelect} \alias{ProteinVariableSelect} \title{Wraps 4 column matrix, with Condition, Run, Protein, Intensity} -\format{An object of class \code{R6ClassGenerator} of length 24.} -\usage{ -ProteinVariableSelect -} \description{ Wraps 4 column matrix, with Condition, Run, Protein, Intensity + +Wraps 4 column matrix, with Condition, Run, Protein, Intensity +} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-new}{\code{ProteinVariableSelect$new()}} +\item \href{#method-getIntensities}{\code{ProteinVariableSelect$getIntensities()}} +\item \href{#method-getWideFormat}{\code{ProteinVariableSelect$getWideFormat()}} +\item \href{#method-getWideNoMissing}{\code{ProteinVariableSelect$getWideNoMissing()}} +\item \href{#method-getIntensitiesNoMissing}{\code{ProteinVariableSelect$getIntensitiesNoMissing()}} +\item \href{#method-clone}{\code{ProteinVariableSelect$clone()}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-new}{}}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$new(data)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-getIntensities}{}}} +\subsection{Method \code{getIntensities()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$getIntensities()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-getWideFormat}{}}} +\subsection{Method \code{getWideFormat()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$getWideFormat()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-getWideNoMissing}{}}} +\subsection{Method \code{getWideNoMissing()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$getWideNoMissing()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-getIntensitiesNoMissing}{}}} +\subsection{Method \code{getIntensitiesNoMissing()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$getIntensitiesNoMissing()}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ProteinVariableSelect$clone(deep = FALSE)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{
}} +} +} } -\keyword{datasets} diff --git a/man/annotationColumns.Rd b/man/annotationColumns.Rd index 9a374bc..68f7e27 100644 --- a/man/annotationColumns.Rd +++ b/man/annotationColumns.Rd @@ -4,7 +4,9 @@ \name{annotationColumns} \alias{annotationColumns} \title{Annotation Columns} -\format{An object of class \code{character} of length 5.} +\format{ +An object of class \code{character} of length 5. +} \usage{ annotationColumns } diff --git a/man/correlatedPeptideList.Rd b/man/correlatedPeptideList.Rd index e9def26..5bb655c 100644 --- a/man/correlatedPeptideList.Rd +++ b/man/correlatedPeptideList.Rd @@ -4,7 +4,9 @@ \name{correlatedPeptideList} \alias{correlatedPeptideList} \title{List with peptide intensities} -\format{A list of data frames} +\format{ +A list of data frames +} \usage{ correlatedPeptideList } diff --git a/man/fgcz_render_One2OneReport.Rd b/man/fgcz_render_One2OneReport.Rd index 87652ab..d5c6798 100644 --- a/man/fgcz_render_One2OneReport.Rd +++ b/man/fgcz_render_One2OneReport.Rd @@ -4,8 +4,10 @@ \alias{fgcz_render_One2OneReport} \title{perform rendering} \usage{ -fgcz_render_One2OneReport(maxquanttxtdirectory = ".", - reportFileBaseName = "fgcz_MQ_QC_report") +fgcz_render_One2OneReport( + maxquanttxtdirectory = ".", + reportFileBaseName = "fgcz_MQ_QC_report" +) } \description{ perform rendering diff --git a/man/genericQuantMatrixGRP2.Rd b/man/genericQuantMatrixGRP2.Rd index 89870c6..92164a9 100644 --- a/man/genericQuantMatrixGRP2.Rd +++ b/man/genericQuantMatrixGRP2.Rd @@ -4,7 +4,9 @@ \name{genericQuantMatrixGRP2} \alias{genericQuantMatrixGRP2} \title{Grp2Analysis reference class for running 2 grp analysis} -\format{reference class} +\format{ +reference class +} \usage{ genericQuantMatrixGRP2 } diff --git a/man/grp2PullDownExample.Rd b/man/grp2PullDownExample.Rd index a6b2530..aea1182 100644 --- a/man/grp2PullDownExample.Rd +++ b/man/grp2PullDownExample.Rd @@ -4,7 +4,9 @@ \name{grp2PullDownExample} \alias{grp2PullDownExample} \title{Grp2Analysis on pulldown data example} -\format{reference class} +\format{ +reference class +} \usage{ grp2PullDownExample } diff --git a/man/mqQuantMatrixGRP2.Rd b/man/mqQuantMatrixGRP2.Rd index 297460f..8c897ff 100644 --- a/man/mqQuantMatrixGRP2.Rd +++ b/man/mqQuantMatrixGRP2.Rd @@ -4,7 +4,9 @@ \name{mqQuantMatrixGRP2} \alias{mqQuantMatrixGRP2} \title{Grp2Analysis on of nockout with missing data} -\format{reference class} +\format{ +reference class +} \usage{ mqQuantMatrixGRP2 } diff --git a/man/proteinColumns.Rd b/man/proteinColumns.Rd index e45c5f9..c6d8feb 100644 --- a/man/proteinColumns.Rd +++ b/man/proteinColumns.Rd @@ -4,7 +4,9 @@ \name{proteinColumns} \alias{proteinColumns} \title{Protein Columns} -\format{An object of class \code{character} of length 4.} +\format{ +An object of class \code{character} of length 4. +} \usage{ proteinColumns } diff --git a/man/transitionCorrelationsJack.Rd b/man/transitionCorrelationsJack.Rd index 80ccc0d..8534817 100644 --- a/man/transitionCorrelationsJack.Rd +++ b/man/transitionCorrelationsJack.Rd @@ -4,8 +4,11 @@ \alias{transitionCorrelationsJack} \title{Compute correlation matrix with jack} \usage{ -transitionCorrelationsJack(dataX, distmethod = function(x) { cor(x, - use = "pairwise.complete.obs", method = "pearson") }) +transitionCorrelationsJack( + dataX, + distmethod = function(x) { cor(x, use = "pairwise.complete.obs", method = + "pearson") } +) } \arguments{ \item{dataX}{data.frame with transition intensities per peptide} diff --git a/vignettes/.install_extras b/vignettes/.install_extras index a9fd4ad..380ee2a 100644 --- a/vignettes/.install_extras +++ b/vignettes/.install_extras @@ -1,2 +1,3 @@ bibliography.bib$ -Rmd_t$ +Grp2Analysis_MissingInOneCondition.Rmd$ +Empty.Rmd$ diff --git a/vignettes/Grp2Analysis.Rmd b/vignettes/Grp2Analysis.Rmd index ae60134..61debf7 100644 --- a/vignettes/Grp2Analysis.Rmd +++ b/vignettes/Grp2Analysis.Rmd @@ -57,7 +57,7 @@ library(rlang) The following analysis compares protein signal intensities recorded in two groups of samples (Tables \@ref(tab:samples) and \@ref(tab:annotation)) by computing the fold change $log2(condition/reference)$ (difference between the means in both groups - also called effect size), and testing if it is different from zero. Table \@ref(tab:groupingvars) shows the group used as the reference. -The protein identification and quantification were performed using the _MaxQuant_ software and _Andromeda_ search engine [@Cox2008, @Cox2011]. Based on the `proteinGroups.txt` file we generated by MaxQuant; we run a set of functions implemented in the R package SRMService [@SRMService2018] to generate visualizations and to compute +The protein identification and quantification were performed using the _MaxQuant_ software and _Andromeda_ search engine [@Cox2008; @Cox2011]. Based on the `proteinGroups.txt` file we generated by MaxQuant; we run a set of functions implemented in the R package SRMService [@SRMService2018] to generate visualizations and to compute a _moderated t-test_ [@Smyth2004] for all proteins quantified with at least `r grp2$nrPeptides` peptides, employing the R package limma [@Ritchie2015a]. @@ -373,19 +373,21 @@ ggplot(top20CI, aes(x = proteinID, y = log2FC, results <- grp2$getResultTable() NAinfo <- c(sum(is.na(results[, grp2$getConditions()$reference])) , sum(is.na(results[, grp2$getConditions()$condition])) ) -NAinfo<-data.frame(name = unlist(grp2$getConditions()), nrProteins= NAinfo) +NAinfo <- data.frame(name = unlist(grp2$getConditions()), nrProteins = NAinfo) ``` ```{r referencingChildDocument} -child_docs <- "Grp2Analysis_MissingInOneCondition.Rmd_t" -if(!sum(NAinfo$nrProteins > 0) > 0){ - child_docs <- "Grp2Analysis_Empty.Rmd_t" +missingInOne <- "Grp2Analysis_MissingInOneCondition.Rmd" +if (!sum(NAinfo$nrProteins > 0) > 0) { + missingInOne <- "Empty.Rmd" } +print(missingInOne) + ``` -```{r includeMissingInOne, child = child_docs} +```{r includeMissingInOne, child = missingInOne} ``` # Data Interpretation