MahShaaban/pcr

Factor in amplification efficiency

richardstoeckl opened this issue · 2 comments

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

So I tried a workaround myself, maybe you might have an Idea how to implement it better.

I modified the "pcr_ddct" function to also take a dataframe of amplification efficiencies as Input (which I reformatted from the output of pcr_assess to only include the genes as columns with one row where the amplification efficiency is stored).

I then added a variable "y" to the function that sets "res", which uses the variable "x" to get the column name of the column with the values in "x":


res <- apply(goi,
               MARGIN = 2,
               FUN = function(x) {
                 # get the name of the column that x points to
                 y = names(goi)[which(goi == x, arr.ind=T)[, "col"]]
                 # calculate the averages
                 x_ave <- .pcr_average(x, group_var)
                 ref_ave <- .pcr_average(ref, group_var)

and called a modified version of the ".pcr_relative" function with the addition of the amplification_efficiency dataframe and the column name:


                 # calculate the relative expression
                 rel_expr <- .pcr_relative_mod(ddct, amplification_efficiency, y)
                 
                 # calculate the error bars
                 upper <- .pcr_relative_mod(ddct - error, amplification_efficiency, y)
                 lower <- .pcr_relative_mod(ddct + error, amplification_efficiency, y)

The modified function looks like this:


.pcr_relative_mod <- function(vec, amp_eff, y) {
  a_e <- amp_eff %>% select(contains(y))
  res <- a_e[1,1] ^ (-vec)
  return(res)
}

It uses the column name (gene name) stored in "y" to get the associated amplification efficiency of the gene from the dataframe and uses that as the base instead of the "2" in the original function.

What are your thoughts on this approach?

Best regards, Richard

Thanks, @richardstoeckl for reaching out, and sorry for the late reply.
I think this approach would work. Would you like to submit a pull request? I will review the code and make sure it works with existing functions.