Code Monkey home page Code Monkey logo

pcr's Introduction

Build Status Build status Build status Coverage Status CRAN version downloads

pcr

Overview

Quantitative real-time PCR is an important technique in medical and biomedical applications. The pcr package provides a unified interface for quality assessing, analyzing and testing qPCR data for statistical significance. The aim of this document is to describe the different methods and modes used to relatively quantify gene expression of qPCR and their implementation in the pcr package.

Getting started

The pcr is available on CRAN. To install it, use:

# install package CRAN
install.packages('pcr')

The development version of the package can be obtained through:

# install package from github (under development)
devtools::install_github('MahShaaban/pcr')
# load required libraries
library(pcr)

The following chunk of code locates a dataset of CT values of two genes from 12 different samples and performs a quick analysis to obtain the expression of a target gene c-myc normalized by a control GAPDH in the Kidney samples relative to the brain samples. pcr_analyze provides different methods, the default one that is used here is 'delta_delta_ct' applies the popular Double Delta CT method.

# default mode delta_delta_ct
## locate and read raw ct data
fl <- system.file('extdata', 'ct1.csv', package = 'pcr')
ct1 <- readr::read_csv(fl)

## add grouping variable
group_var <- rep(c('brain', 'kidney'), each = 6)

# calculate all values and errors in one step
## mode == 'separate_tube' default
res <- pcr_analyze(ct1,
                   group_var = group_var,
                   reference_gene = 'GAPDH',
                   reference_group = 'brain')
  
res

The output of pcr_analyze is explained in the documentation of the function ?pcr_analyze and the method it calls ?pcr_ddct. Briefly, the input includes the CT value of c-myc normalized to the control GAPDH, The calibrated value of c-myc in the kidney relative to the brain samples and the final relative_expression of c-myc. In addition, an error term and a lower and upper intervals are provided.

The previous analysis makes a few assumptions. One of which is a perfect amplification efficiency of the PCR reaction. To assess the validity of this assumption, pcr_assess provides a method called efficiency. The input data.frame is the CT values of c-myc and GAPDH at different input amounts/dilutions.

## locate and read data
fl <- system.file('extdata', 'ct3.csv', package = 'pcr')
ct3 <- readr::read_csv(fl)

## make a vector of RNA amounts
amount <- rep(c(1, .5, .2, .1, .05, .02, .01), each = 3)

## calculate amplification efficiency
res <- pcr_assess(ct3,
                  amount = amount,
                  reference_gene = 'GAPDH',
                  method = 'efficiency')
res

In the case of using the Double Delta C_T, the assumption of the amplification efficiency is critical for the reliability of the model. In particular, the slope and the R^2 of the line between the log input amount and Delta C_T or difference between the CT value of the target c-myc and GAPDH. Typically, The slope should be very small (less than 0.01). The slope here is appropriate, so the assumption holds true.

Other analysis methods ?pcr_analyze

  • Delta CT method
  • Relative standard curve method

Testing statistical significance ?pcr_test

  • Two group testing t-test and wilcoxon test
  • Linear regression testing

Documnetation

browseVignettes("pcr")

Alternatively, the vignette can be found online, here.

Citation

citation("pcr")

PeerJ Article

For details about the methods and more examples, check out our PeerJ article.

pcr's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pcr's Issues

Importing from QuantStudio file?

Hi! Thanks for this package.

It looks like I need to import a .csv, but cannot figure out from the vignette how the .csv is supposed to be structured. I have a .xls and .eds from QuantStudio. Is there a wrapper I should use first? Or an example you may have of how it is supposed to look? Thanks for any assistance

-Michael

use pcr package for three sample group experiment

Hi @MahShaaban,

many thanks for developing pcr!

I'm very keen to use the package to analyze qPCR data for a three sample group comparison (i.e. small time series with three sampling points).
Preferably, I would like to use a standard curve method to determine and visualize relative mRNA expression.

Is it possible to do this with the current version of pcr?
I'm using pcr_1.2.2.

Many thanks in advance for your help!

Jan

Method of normalisation for pcr_test?

Hi,
Thanks for the great package, I've found it very useful.
I am new to RStudio and new to real-time PCR, so I have been trying to understand the maths behind your package. I am researching gene expression in animal tissue based on different dietary treatments.
I have a standard curve for every run of my qPCR. Therefore, I have used the relative_curve method in the function pcr_analyze.
From what I understand, if I use the "relative_curve" method it will normalize the data to a reference gene using "divide" (if separate tubes). However, if I then want to use pcr_test to run a linear model, it will use the same data but normalize using the "subtract" method as default.
I don't know how to make changes as you mention in your contributing guidelines, but I have a working example to show you that the statistical results are different when I ran the pcr_test with a "divide" normalization. Can you please confirm with method is correct?

Other issues I've made work-arounds for in this example:

  • fixed errors bars for when there are 2 genes side by side
  • Because there are 3 treatment effects, the pcr_test does not do all comparisons, therefore it needs to be run twice with 2 "reference_genes" to get the third comparison. This example will do this and pull all unique comparisons into a new table.

Thanks

library(pcr)
library(dplyr)
library(ggplot2)
library(purrr)

#test data
df <- data.frame(control = c(16.14,16.01,15.99,15.99,16.18,16.42,16.25,15.66,15.86,16.14,16.16,16.18,16.39,16.37,16.42),
                 GOI_1 = c(24.5,24.5,23.1,23.9,23.8,23.1,23,23.1,23.1,22.8,22.7,23.9,24.1,24,23.4),
                 GOI_2 = c(15.86,22.44,19.81,21.97,19.54,16.29,21.56,21.97,13.71,18.58,20.36,17.89,22.64,18.22,21.43))

group_var1 <- c("Diet_1","Diet_1","Diet_1","Diet_1","Diet_1","Diet_2","Diet_2","Diet_2","Diet_2","Diet_2","Diet_3","Diet_3","Diet_3","Diet_3","Diet_3")

#intercept and slope:
intercept <- c(26.86229, 24.76040, 32.02007)

slope <- c(-3.661974, -3.357405, -3.250362)


#Analysis

plot <- pcr_analyze(df,
                    group_var = group_var1,
                    reference_gene = 'control',
                    reference_group = 'Diet_1',
                    intercept = intercept,
                    slope = slope,
                    method = 'relative_curve',
                    plot=T)

#to fix error bars:
plot$layers[[2]] <- NULL
plot <-
  plot + geom_errorbar(
    aes_string(ymin = "lower", ymax = "upper"),
    size = .3,
    width = .25,
    position = position_dodge(.9)
  )

plot


#To statistically test results using lm
#default method:
Diet_1_default <- pcr_test(
  df,
  group_var = group_var1,
  reference_gene = 'control',
  reference_group = 'Diet_1',
  test = 'lm'
) %>% data.frame(ComparisonGroup = "Diet_1")


Diet_3_default <- pcr_test(
  df,
  group_var = group_var1,
  reference_gene = 'control',
  reference_group = 'Diet_3',
  test = 'lm'
) %>% data.frame(ComparisonGroup = "Diet_3")

#combine results and display only unique comparisons (matched on p_value)
Combined <- rbind(Diet_1_default, Diet_3_default) %>% format(digits = 3)
Combined <- Combined[!duplicated(Combined$p_value), ]

stats_table_default <- Combined[order(Combined$gene, Combined$ComparisonGroup),] %>% as.data.frame(row.names = seq(1,length(Combined$gene)))

###Method modification - create new functions and re-run statistics using the normalisation = "divide"

pcr_lm_2 <-
  function (df,
            group_var,
            reference_gene,
            reference_group,
            model_matrix = NULL,
            ...)
  {
    norm <-
      pcr:::.pcr_normalize(df, reference_gene = reference_gene, mode = "divide") #added mode = "divide", as default for .pcr_normalize is mode = "substract"
    if (is.null(model_matrix)) {
      group_var <- relevel(factor(group_var), ref = reference_group)
    }
    tst <- map(norm, function(x) {
      if (is.null(model_matrix)) {
        linear_model <- lm(x ~ group_var, ...)
        conf_int <- confint(linear_model, ...)
      }
      else {
        linear_model <- lm(x ~ model_matrix + 0, ...)
        conf_int <- confint(linear_model, ...)
      }
      data_frame(
        term = names(linear_model$coefficients)[-1],
        estimate = unname(linear_model$coefficients)[-1],
        p_value = summary(linear_model)$coefficients[-1,
                                                     4],
        lower = conf_int[-1, 1],
        upper = conf_int[-1,
                         2]
      )
    })
    tst <- bind_rows(tst, .id = "gene")
    return(tst)
  }

#modify pcr_test
pcr_test_2 <- function (df, test = "t.test", ...)
{
  switch(
    test,
    t.test = pcr_ttest(df, ...),
    wilcox.test = pcr_wilcox(df, ...),
    lm = pcr_lm_2(df, ...)
  )
}


#run modified method:
Diet_1_modified <- pcr_test_2(
  df,
  group_var = group_var1,
  reference_gene = 'control',
  reference_group = 'Diet_1',
  test = 'lm'
) %>% data.frame(ComparisonGroup = "Diet_1")


Diet_3_modified <- pcr_test_2(
  df,
  group_var = group_var1,
  reference_gene = 'control',
  reference_group = 'Diet_3',
  test = 'lm'
) %>% data.frame(ComparisonGroup = "Diet_3")
        
#combine results and display only unique comparisons (matched on p_value)
Combined_2 <- rbind(Diet_1_modified, Diet_3_modified) %>% format(digits = 3)
Combined_2 <- Combined_2[!duplicated(Combined_2$p_value), ]
        
stats_table_modified <- Combined_2[order(Combined_2$gene, Combined_2$ComparisonGroup), ] %>% as.data.frame(row.names = seq(1, length(Combined_2$gene)))

print(stats_table_default)
print(stats_table_modified)

Corrupt file - pcr.rdb

I am attempting to run an analysis utilizing either pcr_analyze or pcr_ddct and I receive warnings shown below:
Error: lazy-load database '/Library/Frameworks/R.framework/Versions/3.5/Resources/library/pcr/R/pcr.rdb' is corrupt
In addition: Warning messages:
1: In args(pcr_ddct) : restarting interrupted promise evaluation
2: In args(pcr_ddct) : internal error -3 in R_decompress1

What can be done to fix the issue to continue my analysis

How to calculate the R2 for targets that have different number of replicates?

Hi Mahmoud,
Thank you for this very useful package. Now I am trying to use for a bigger dataset where I have several Assays (genes) but the standard curves have different number of replicates, because I had to apply filters and some of them got removed. This way the 'amount' does not represent all Assays (genes) and therefore the R2 cannot be calculated. I tried to create an amount list for each one of the genes with the precise amount of replicates for each. I am not sure how to run a loop within the function 'pcr_assess' and get the results for all the Assays.

## Here an example file to mimic the issue:
df <- data.frame(Sample.Name = c(1E-01,1E-01,1E-01,1E-02,1E-02,1E-02,1E-03,1E-03,1E-03,1E-04,1E-04,1E-04,
  1E-05,1E-05,1E-05,1E-06,1E-06,1E-01,1E-01,1E-01,1E-02,1E-02,1E-02,1E-03,1E-03,1E-03,1E-04,1E-04,1E-04,1E-05,1E-05,
  1E-05,1E-06,1E-06,1E-01,1E-01,1E-01,1E-02,1E-02,1E-02,1E-03,1E-03,1E-03,1E-04,1E-04,1E-04,1E-05,1E-05,1E-05,1E-06,
  1E-06,1E-06), CT = c(13.43761,13.47637,13.43361,16.94466,16.95963,17.00617,20.36111,20.47487,20.50990,23.73218,
  23.80931,23.69554,27.26124,27.16503,27.28794,31.09467,31.74184,14.43796,14.41361,14.35675,17.92048,17.93056,
  17.94622,21.44288,21.41265,21.47235,24.84470,24.84674,24.84562,28.36251,27.98210,28.43939,31.89748,31.98399,
  13.84862,13.82174,13.80726,17.15890,17.13154,17.13531,20.58301,20.61107,20.55656,23.94169,23.91247,23.84745,
  27.34220,27.45825,27.21272,30.91330,30.64840,31.09571), Assay.Name = c("Assay01","Assay01","Assay01","Assay01",
"Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay01","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay02","Assay03","Assay03", "Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03","Assay03",
  "Assay03","Assay03","Assay03","Assay03"))

## Format df to enter pcr_assess function - CT
subtest <- df %>% 
  group_by(Assay.Name) %>% 
  dplyr::mutate(grouped_id = row_number()) %>% 
  spread(Assay.Name, CT) %>% 
  select(-grouped_id, -Sample.Name) %>% 
  arrange(Assay01)   

## Make a vector of DNA  amounts  
amount <- df[c(1,3)] %>% 
  group_by(Assay.Name) %>% 
  dplyr::mutate(grouped_id = row_number()) %>%  
  spread(Assay.Name, Sample.Name) %>% 
  select(-grouped_id) %>% 
  rename_all( ~ paste0("Amount_", .x))

## Retain curve information: calculate intercept, slope, r_squared and efficiency
  res <- pcr_assess(subtest[3],amount = Amount_Assay03,method = 'standard_curve')
  names(res)[1] <- "Assay"
  res$efficiency <- NA   
  res$efficiency <- (10^(-1/res$slope)-1)*100

pcr_wilcox function

--Hi,

I get different pvalues when I use directly the wilcox.test function on my series of values.
Why does the pcr_wilcox function of the package return a different pvalue?

thank you --

SEM instead of SD

--Hi,

sometimes people prefer to use SEM instead of SD.
pcr_analyze function return SD (error), so is there a way to obtain SEM ?
Thank you --

Rsquared not calculated

Hi @MahShaaban
I started using this package and I am managed to use pcr_assess for "standard curve", but for all my assays the rsquared is NA. could you maybe help me with that?

CRAN first round comments

I recieved the following comment from CRAN upon submission for the first time

Please only use + file LICENSE for restrictions to the GPL-3 and only include the restrictions.

NA value

Hi
There are missing (NA) values in our datasets. How to use the function pcr_analyze? "na.rm = T" - does not work((
Andrei

CRAN second round comments

I received the following comments upon the second submission

Thanks, please elaborate in your description the used methods (e.g. which tests).
Please add a reference in the 'Description' field of your DESCRIPTION file reference in the form
authors (year) doi:...
authors (year) arXiv:...
authors (year, ISBN:...)
with no space after 'doi:', 'arXiv:' and angle brackets for auto-linking.
Please explain the acronym PCR in your description.
Please fix and resubmit.

Factor in amplification efficiency

Hi,
thank you for your very useful package!

In your publication you mention the ability to factor in less-than-perfect amplification efficiencies in a future version of this package.
Sadly, I was not able to find this option.
Is this feature still in development?

Greetings, Richard

CpAverage or CrossingPoint

--Hi all,

I have a question about the output ixo files from the Lightcycler 480:
in these files there are the CpAverage and CrossingPoint values.
What values do I need to retrieve to use the pcr package?

Thanks

Data formatting

Could you please provide some tips on data formatting/loading data, other than using system.file to load the data? Thank you

Handling different starting sample masses

Is there a way to integrate sample mass (prior to DNA extraction) into our analysis, or scaling the results to account for different starting sample masses using the pcr package?

geNorm Normalisation

--Hi,

In further improvement it would be usefull to add geNorm normalization option to take into account several control genes.
Thank you --

Laurent --

`pcr_test` return error when passed `group_var` as a factor

The testing function pcr_test returns an error when the group_var is a factor rather than a character

# load library
library(pcr)

# locate and read data
fl <- system.file('extdata', 'ct4.csv', package = 'pcr')
ct4 <- readr::read_csv(fl)
#> Parsed with column specification:
#> cols(
#>   ref = col_double(),
#>   target = col_double()
#> )

# make group variable
group <- rep(c('control', 'treatment'), each = 12)

# test using t-test
pcr_test(ct4,
         group_var = group,
         reference_gene = 'ref',
         reference_group = 'control',
         test = 't.test')
#> # A tibble: 1 x 5
#>   gene   estimate   p_value  lower  upper
#>   <chr>     <dbl>     <dbl>  <dbl>  <dbl>
#> 1 target   -0.685 0.0000343 -0.956 -0.414

# make group variable as factor
group <- factor(group, levels = c('control', 'treatment'))

# test using t-test
pcr_test(ct4,
         group_var = group,
         reference_gene = 'ref',
         reference_group = 'control',
         test = 't.test')
#> Warning in Ops.factor(ref, 1): '<' not meaningful for factors
#> Warning in Ops.factor(ref, nlev): '>' not meaningful for factors
#> Error in if (ref < 1 || ref > nlev) stop(gettextf("ref = %d must be in 1L:%d", : missing value where TRUE/FALSE needed

Created on 2019-09-24 by the reprex package (v0.2.1)

pcr

Hi,
I have difficulty when I get to that level: "res<-pcr_analyze(ct1,group_var=group,reference_gene='RPS7',reference_group='Kisumu')
res <- pcr_analyze(ct1,group_var = group_var,reference_gene='RPS7',reference_group='Kisumu')";

here's what I get as a result; > res<-pcr_analyze(ct1,group_var=group,reference_gene='RPS7',reference_group='Kisumu')
Error in pcr_analyze(ct1, group_var = group, reference_gene = "RPS7", :
could not find function "pcr_analyze"

Note: when I install the package and load "library 'pcr', this appears:

library(pcr)
Erreur : package or namespace load failed for ‘pcr’:
.onLoad a échoué dans loadNamespace() pour 'pillar', détails :
appel : utils::packageVersion("vctrs")
erreur : package ‘vctrs’ not found

Thanks for helping me

`group_var` don't support variable names with `_` (underscore)

Hi @MahShaaban,

I found this situation (could it be a bug?) where the naming of the elements of the group_var for some reason leads to a wrong calculation of the $calibrated when one variable (in my case the reference_group) has an underscore, as you can see in the screenshot.
Oddly enough it substracts to it self, but then the subtractions to the other groups are not correct.
In my case I named a group total_dna, and replacing it with input instead fixed the error in the subtractions.

rstudio_9afexzPffE

pcr_test function no longer provides estimate using "wilcox.test"

Since a "recent" (a few months I guess) update, the pcr_test function from the package no longer provides an estimate in the resulting data.table using the "wilcox.test" argument. The "estimate" column now only contains NA.

Reproducible example using the vignette:

fl <- system.file('extdata', 'ct4.csv', package = 'pcr')
ct4 <- readr::read_csv(fl)

group <- rep(c('control', 'treatment'), each = 12)

Results <- pcr_test(ct4,
         group_var = group,
         reference_gene = 'ref',
         reference_group = 'control',
         test = 'wilcox.test')

Results

I made a workaround by manually extracting a estimate from the result of the call to the base R wilcox.test(..., conf.int = T) function, but this quickly gets tedious. I quickly parsed the code of the pcr_test and the pcr_wilcox function i guess that the problems arises from this part of the pcr_wilcox function which doesn't properly extract the estimate value from the htest object produced by pcr_wilcox :

wilcox_test <- data_frame(estimate = unname(wilcox_test$estimate[1] - 
            wilcox_test$estimate[2]), p_value = wilcox_test$p.value, 
            lower = wilcox_test$conf.int[1], upper = wilcox_test$conf.int[2])

Thanks for this otherwise great package.

technical replicates

Your example file ct1.csv contains 12 measurements, I assume these to be biological replicates / distinct samples?
The data I have to work with now typically have 3 technical replicates per biological sample, which adds another layer for summarizing and error propagation. Just averaging technical replicates and feed means would ignore that source of variability.
How would this be handled in your package?
Grateful for clarification!

PCR Package. could not find function "pcr_analyze"

Hey there,
I have been trying to use your R package for qPCR analysis. But R shows an error that the “pcr_analyze” function was not found.

So far I've done:

# install package:
install.packages('pcr')

# load required libraries:
library(pcr)

# default mode delta_delta_ct
## locate and read raw ct data
fl <- system.file('extdata', 'ct1.csv', package = 'pcr')
ct1 <- read.csv(fl)

## add grouping variable
group_var <- rep(c('brain', 'kidney'), each = 6)
str(ct1)

# calculate all values and errors in one step 
res <- pcr_analyze(ct1,
                   group_var = group_var,
                   reference_gene = 'GAPDH',
                   reference_group = 'brain')

Here is when I get the error "Error in pcr_analyze(ct1, group_var = group_var, reference_gene = "GAPDH", : could not find function "pcr_analyze""

I am very new to R coding, so I might need a more thorough explanation than experienced users!

Thanks!..

Negative lower value while analysing the using standard curve

Dear @MahShaaban,
thank you a lot for developping this pcr package.
While using pcr analysis with the relative_curve method I got a strange output. The lower column of the output show me a negative value for one sample. I found it strange since the result should be express as expression relative to the control sample, in my case SC5314.
I was thinking it could be very useful to have access to all normalised and calibrated values, especially if you want to show result as box plot and dots. The second advantage would be to check incoherent results. Find below the matter to reproduce my error.
slopes = c(-3.065913, -2.868899)
intercept=c(17.31675, 18.71079)
Reference_groupe="SC5314"
Reference_gene="Cт.Mean.EFB1"
group_var=c(CEC3619, CEC3619, CEC3619, CEC5114, CEC5114, SC5314)
InputValue=
Cт.Mean.EFB1 Cт.Mean.orf19_2713
5 19.9565 22.1486
6 19.9993 22.5788
7 19.6004 22.2507
8 20.0437 36.9872
9 19.4609 36.1748
11 20.2800 21.7199

here is the output tbl from pcr_analysis:
group gene normalized calibrated error lower upper
1 SC5314 Cт.Mean.orf19_2713 8.272646e-01 1.000000e+00 NA NA NA
2 CEC3619 Cт.Mean.orf19_2713 3.692645e-01 4.463681e-01 8.969421e-02 0.2034685 0.6892677
3 CEC5114 Cт.Mean.orf19_2713 3.782855e-06 4.572727e-06 2.041283e-06 -0.5396098 0.5396190

Use column in data table for grouping when column name is passed as string to group_var

It would be nice if I could specify a column name as grouping variable instead of supplying it as a vector.

For example:

pcr_analyze(ct1,
group_var = 'tissue',
reference_gene = 'GAPDH',
reference_group = 'brain',
method = 'delta_delta_ct')

would use values in the 'tissue' column as grouping variable.

Same approach could be used for specifying covariates for lm, if covariate (or target_gene) column name(s) could be specified rather than implying all columns correspond to genes.

Add p-values on the plot

Hi!
Thank you for developing this wonderful package.

I got confused at adding p values calculated by 'pcr_test' to ggplot when there were several genes included in a single run.
Here's the plot I got using 'pcr_analyze' and 'ggplot'
image

And here are the p values I got using 'pcr_test'.
gene estimate p_value lower upper 1 gene2 -0.44260692 6.629252e-02 -0.9348677 0.04965387 2 gene3 0.02309579 8.166044e-01 -0.2375637 0.28375527 3 gene4 2.86152226 1.150798e-02 1.4078153 4.31522920 4 gene5 1.21538222 1.974057e-05 1.0795814 1.35118304 5 gene6 0.98096805 1.806444e-01 -0.7195197 2.68145577

Is there a way to add p values to the plot?

Many thanks in advance for your help!

Ariadne

Installation Error

I'm a new R user and I'm having trouble installing your PCR package. I get the error below. Could you help me get this issue solved? Thanks!

install.packages('pcr')
trying URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.6/pcr_1.2.0.tgz'
Content type 'application/x-gzip' length 493549 bytes (481 KB)
==================================================
downloaded 481 KB

The downloaded binary packages are in
/var/folders/m_/8j8153kd00v2nh0y1nw1vxww0000gn/T//RtmpZRNSHJ/downloaded_packages

library(pcr)
Error: package or namespace load failed for ‘pcr’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):
there is no package called ‘rlang’

Aggregate in .pcr_average

Hello,

The aggregate function used in .pcr_average, .pcr_sd and .pcr_cv sorts the groups in alphabetical order but not their corresponding values. So if the original order of groups in not sorted alphabetically, it will mess up the mean, sd and cv respectively, resulting in a reversed assignment of normalized values.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.