I need help with a percent difference custom field

I have the following scenario:

label spl name inj
A Asy1 1 Avg Amount Percent Difference Amount
A Asy1 2
A Asy2 1 Avg Amount
A Asy2 2
B Asy1 1 Avg Amount Percent Difference Amount
B Asy1 2
B Asy2 1 Avg Amount
B Asy2 2

I would like a custom field to calculate the average amount of the duplicate assay injections.
Then I would like a custom field to calculate the percent difference of the average amount for each set of assays.

Best Answer

  • Empower2019
    Accepted Answer
    If you used Area instead of Amount, then at least it calculated correctly since you tested it. To edit it for Amount, just copy and paste the formula to Wordpad, replace Area with Amount, and paste them back into the translation table. I don't see any difficulties with your average amount custom field SAME.%..AVE(Amount) since you have different labels for each sample but check my post above for issues with Amount. 

    All depends on your bracket standard set-up. Using sliding with overlap may be an issue. Using Average of standards throughout run will work. You will have to test that. 


  • For the average amount of duplicate assay injections, create a peak, real, calculated CF, result set only, sample and peak type All. Formula is SAME.%..AVE(Amount) and make sure you have the function "Summarize Custom Fields" as the last line in sample set before processing. Then label the first set of Asy 1 injections as for example A, the second set B, then for Asy 2 first set C second set D. The custom field will calculate the average amount for all injections of samples with the same label. So make sure each set of Assy gets a unique label. 

    As for percent difference, what do you mean? How are you calculating this? 
  • Thank you for your reply.
    For each lot/batch we do two assay preps (Asy1 & Asy 2)  I would like to have the same label for these.  Is that possible?

    For the percent difference. I would like to get a percent difference between the average amount from Asy1 and Asy2.  
    (ABS(avgamount(asy1)-avgamount(asy2))/ AVE(avgamount of asy1&asy2) X 100

    Thanks for the help
  • Empower2019
    edited March 2020
    Hi. Yes, for the 2 assay preps per lot, you can label all injections of Asy1 as A and all injections of Asy2 as B. Then the SAME.%..AVE(Amount) will average the amount for all the As and all the Bs to give you two results. Problem is this custom field wont "relate" back to the labels A and B when calculating % Difference, so if you code a CF as your formula for % Difference and reference SAME.%..AVE(Amount), you end up with the same value subtracted from itself, divided by half of itself, so there is no way to ask it to only take into account the As and Bs. 

    Another way is to create 2 CFs as A.%..AVE(Amount) and B.%..AVE(Amount) and call them Avr_A and Avr_B. Then a 3rd peak, real CF search order Result Set Only, all peak and sample type. Formula is:

    ABS((Avr_A-Avr_B))/((0.5*(Avr_A+Avr_B)))*100 and this will give you a % Difference value. But the drawback is you are limited to A and B so if you running several batches of assay you may need a lot of CFs or to combine them into one long formula. 

    Another way to make it easier is to use the report method to calculate the average amount per batch, so an All Peaks Table filtered by Label = "X" and a summary function of average against all the Amounts. 

    Then you just need one CF Peak, Real, Calculated:

  • Hmmmm.......
    If there is no way to have it correlate back to the  labels, then there in lies the rub.  A sample set could have anywhere from 1 to 20 batches.  If we went back to your original thought and had each Assay a different label, could it be correlated that then?
  • No, using the original idea of a different label will still only give one result per label for SAME.%..AVE(Amount) so if asking Empower to subtract this value from itself, it only has one value to look to, and that's the current value. Its not going to subtract B from A, and then on down to C from B etc. 

    There is another way around it but its a long formula. I cant see any other way. You could keep SAME.%..AVE(Amount) for the average off all Assay 1, Assay 2, Assay 3 etc. Then for % Difference, taking into account the worst case of 20 batches:

    Create a Peak, Enumerated CF Search Order Result Set Only. All Samples and Peak Type. Set the "Use as" to Field. Lets say 20 batches in a sample set. Assay 1 injections are labelled U1, Assay 2 Injections are labelled U2 all the way to Assay 20 injections labelled as U20. Presuming you want to calculate the percent Diff between Assay 1 and Assay 2 then between Assay 2 and Assay 3 etc (if its only % Diff between 1 and 2, then 3 and 4, then 5 and 6 etc adjust the formula as appropriate), for the formula for the CF put in:

    ENUM(EQ(Label,"U2"),EQ(Label,"U3"),EQ(Label,"U4")….EQ(Label,"U20")) and for the translation table you get a list of integers starting with 0 down to 19. So 0 corresponds to the first argument (ie anywhere where Label = U2), 1 corresponds to the second argument (ie anywhere where Label = U3 and on to argument 19 corresponding to Label = U20), so for position 0 the formula you type in is:

    ABS(((U1.%..AVE(Amount))-(U2.%..AVE(Amount))))/((0.5*((U1.%..AVE(Amount))+(U2.%..AVE(Amount)))*100 (fc) then position 1 becomes:

    ABS(((U2.%..AVE(Amount))-(U3.%..AVE(Amount))))/((0.5*((U2.%..AVE(Amount))+(U3.%..AVE(Amount)))*100 (fc) all the way down to position 19. 

    An easy way to do this is to type in the formula in Wordpad for position 0 then just copy and paste into the different translations from 1 to 19, only changing the U2, U3 parts etc of the formula. Its critical you add a space and then (fc) after each formula. Only that way will Empower return it as a calculated custom field. 

    You can only set the precision of this CF once so set it to whatever you want, eg 3 decimal places. Also note that you cant do anything further with this CF, like get an average of the tabulated values. However, it should work for what you are trying to do and even if you have 40 batches you just run a second sample set of U1 to U20. Good luck. 
  • Thank you very much I would have never figured this one out.  I will test this out.
  • No problem. You may have to edit the formula a bit to get the brackets right, Empower is very dependant on brackets. But I have used those CFs a lot of the type Average Area A - Average Area B/0.5*(Average Area A + Average Area B)*100 so I know that they work, you just need to test the formula against some example data.
  • Yes I will test it with some data sometime in the next couple of days and get back to you how it worked.
  • Just to add I tested the following CF for 3 injections of A followed by 3 injections of B and it worked fine. So copy the syntax as I have it for your translation table but tailor it for U1, U2 etc:

    ABS((A.%..AVE(Area)-B.%..AVE(Area)))/((0.5*((A.%..AVE(Area))+B.%..AVE(Area))))*100 (fc)
  • Hi , I tried a similar approach for another calculation for duplicate injections in standards :

    (S0101.1.(Area)-S0101.2.(Area))/((S0101.1.(Area)+S0101.2.(Area))/2)*100 (fc)

    This works fine but a similar approach for unknowns and average amount :

    (U0101.1.(Amount)-U0102.1.(Amount))/((U0101.1.(Amount)+U0102.1.(Amount))/2)*100 (fc)

    returns a value of 200


    any thoughts thanks

  • sorry not average,  % difference
  • Simple things first- is the Sample and Peak Type for the CF set to all? So as to include both Standards and Unknowns? 

    I have had problems with intersample CFs before with Amount, and I think its linked to how Empower calculates Amount and how you do your standard bracketing routine. If you run standards throughout the sample set, building one overall calibration curve to quantitate all unknowns, it isn't a problem as only one curve is associated with the sample set and processing method.

    But if you do sliding with or without overlap,jumping back and forth between building calibration curves, clearing the same ones, then building half of the previously cleared curve for the next set of unknowns, you essentially require two standards to get an amount and the second standard hasn't been acquired yet and you are asking Empower to jump forward a step to get the right calibration curve for that amount so I think that screws up the syntax and you get odd results like 200. I had a lot of trouble with this when I was looking for average amount for a batch of samples that split over 2 calibration curves ie 10 samples, 6 injections between bracket standards so 4 on a different bracket and it wouldn't work at all. Only works when either you have all the required labels of unknowns in the same bracket or if you run one calibration curve and quantify all unknowns off that. 

    Another thing, if you don't have the above issue, is double check your syntax and naming of the custom field. maybe call the CF X_PercentDiff so the Capital X will work only after all fields with the previous letters have been stored. If this doesn't work, might be worth two ENUM CFs one for all the Standard labels and one for Unknown labels but only if the previous calibration set-up isn't an issue for you.
  • Hello Empower2019

    I labeled every Assay with a different label Spl1 Asy1 +A1, Spl1 Asy2 = A2, Spl2 Asy1 = A3, Spl2 Asy2 = A4 and so on.  I expanded your equation 30 that will give me 15 total lots/batches of assays in one run.

    The ave amount calculation works great.  And the percent difference calculation works great as well.  However I just realized that the equation I put into the translation was   ABS((A1.%..AVE(Area)-A2.%..AVE(Area)))/((0.5*((A1.%..AVE(Area))+A2.%..AVE(Area))))*100 (fc) 

    I used AREA by accident and not AMOUNT.  However I did test it and it works fine.  it did give me the percent difference of the average amount.  Any thoughts?
  • Hi,
    We have 2 injections for 1 sample preparation. is it possible to create a custom field for the % difference calculation for injections from different vials. method building in empower is new to me, so it is not easy. can someone help me with this?

  • Hi David, how is your sample set set up? What % Difference are you looking for, is it the difference in area of injection 1- area of Injection 2/half the sum of the areas from injections 1 and 2?
  • hi,
    this is the sample set how I would set up, because we currently don't calculate result sets and use only a few custom fields.
    We have to inject every solution from 2 different vials except "check". this is because someone created a CF for % difference and it would only work if it is 2 injections out of 1 vial.--> % difference = (response inj1 - response inj2) / (0.5 x average response inj1 & 2)
    My question is to calculate % difference between Sample 1B (S0101-S0102), ...
    and if this % difference is outside the limit (<2.0%) can I show this on a report by adding a summarize custom field line in the sample set

  • Thanks for that. I'm not sure if you were looking for % Diff of Area or Amount between the different sets of samples but I don't think you can do it using your current set-up in the sample set, particularly with having the Processing set to Don't Process or Report. There is of course a way to do what you are looking for and that would be to label each set of your samples as A and B, so Sample 1B is labelled A and the second Sample 1B is labelled as B, then Sample 1E is labelled as A, and the second sample 1E is labelled as B etc etc.

    Then 3 x Custom Fields would do the trick. All of them: Peak, Real, Result Set Only all peak/sample type of All.  first formula is A.%.(Area), then B.%.(Area), call these Area_A and Area_B and the third custom field (and tick All or Nothing on this third one) is ABS((Area_A-Area_B))/((0.5*(Area_A+Area_B)))*100+NEQ(Label,"B")*-1*50000, called Area_Diff. When you process a sample set after making these custom fields and putting in the labels as I mention, as well as having both the standards and samples set to Normal, the % Diff populates perfectly for every "B" labelled sample, calculating the % Diff between the most recent A and B, and it will do this even if you have 100 sets in the sample set.

    But....I have had ENORMOUS trouble trying to get intersample custom fields to work whenever there is a mix of Normal and Don't Process or Report amongst Samples and Standards. I think the problem stems from how Empower processes sample sets and how many calibration curves between samples it geerates- line by line, and if the standards and samples are set to Don't Process then you ask it to clear calibrate, cal and quantitate, then all the amounts are calculated but it doesn't seem capable of then calculating custom fields between different sets of labelled samples within the one sample set, my best guess being down to "Don't Process or Report", so these custom fields where I ask empower to add the amount from sample 10 to the amount from sample 20, just seems to blow its fuse and it cant perform any follow-on calculations after the "Quantitate", I'm always left with nonsense answers.

    I think the only way you can get what you are looking for, but I'm totally open to correction here, is to process the sample set as you have it to get all your usual amounts and areas then alter the sample set to only include Lines 19 onwards (with a Clear Calibration function above it), keep everything set to Normal in the processing column, label your sets of samples as A and B then your last line is just Quantitate A B, no need for calibrate since standards are set to Normal.

    Sorry I couldn't be of more help!