
1. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 2:03 AM (in response to bossombritto)What's the formula that you want to use?

2. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 6:40 AM (in response to try67)stddev = sqrt (sum (sampleXRow1  average)^2 / (n1))

3. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 6:59 AM (in response to bossombritto)Not 100% sure about this code, but give it a try...
var avg = Number(this.getField("Average").valueAsString); var sum = 0; var n = 0; for (var i=1; i<=8; i++) { var v = this.getField("sample"+i+"Row1").valueAsString; if (v!="") { sum+=(Number(v)avg); n++; } } if (n==0  n==1) event.value = ""; else event.value = Math.sqrt(Math.pow(sum,2) / (n1));
I assume that "n" stands for the number of (filledin) fields.
I'm not sure how are you calculating the average, though, and if you're including empty fields in this calculation...
Edit: Syntax error fixed

4. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 6:57 AM (in response to try67)am getting SyntaxError: unterminated string literal 5: at line 6
yes "n" stands for the number of "filledin" fields.
average is calculated in the average field using the output of "Value is the " Average" in the Calculate option of the "Text filed properties"

5. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 6:59 AM (in response to bossombritto)Change line #5 to:
var v = this.getField("sample"+i+"Row1").valueAsString;
Regarding the Average field, you need to doublecheck how it works. I think that it includes empty fields as zero in the calculations, which might not be what you want.

6. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 7:13 AM (in response to try67)This ran without any errors , however I am getting the output as "0"
Regarding Average field empty field taken as zero would be fine , because we a re running sample lab tests and all the fields will be mandatory for inputs, if it would be empty then "0" has to be assumed in that.

7. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 7:18 AM (in response to bossombritto)I'll need to see the actual file to help you further.

8. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 7:25 AM (in response to try67) 
9. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 7:44 AM (in response to bossombritto)The actual PDF file. You can either send it to me directly (try6767 at gmail.com) or upload it to something like Dropbox and post a share link here on the forum.

10. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 8:01 AM (in response to try67)Hi Try67,
Appreciate your assistance.
Attaching the file for your help.
Thanks in advance
Regards
Bossom Britto
+19199142620

11. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 8:01 AM (in response to try67)Sent the .pdf to your email ID

12. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 8:03 AM (in response to bossombritto)Are you sure? It seems like you sent an email to the forum, instead...

13. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 8:05 AM (in response to try67)Never mind, got it now...
The field names you provided were not accurate. Open the JS Console and you'll see an error message about the "Average" field.
The actual name seems to be "AverageRow1", so adjust it accordingly in the code.

14. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 8:13 AM (in response to try67)I also think there's something wrong with your formula, because it seems to me that the sum of all the values minus the average will always be zero...

15. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 8:42 AM (in response to try67)so if I take sample1Row1, sample2Row1,..... sample8Row1 = 1,2,3,4,5,6,7,8
the average would be 1+2+3+4+5+6+7+8 / 8 = 4.5
The desired output should be :
Stddev = sqrt {[summation [(x  4.5)^2] / (81)} = sqrt { [sum [(14.5)^2 +.........+(84.5)^2] ] / (81)
= sqrt { [sum (12.25 + 6.25 + 2.25 + 0.25 + 0.25 +2.25 +6.25+12.25 )] / (81)}
= sqrt { 42/7}
= 6

16. Re: need a custom calculation script to calculate standard deviation
try67 Aug 29, 2016 8:51 AM (in response to bossombritto)1 person found this helpfulSo the formula is not:
stddev = sqrt (sum (sampleXRow1  average)^2 / (n1))
But:
stddev = sqrt (sum ((sampleXRow1  average)^2) / (n1))
So the code should be something like this:
var avg = Number(this.getField("AverageRow1").valueAsString); var sum = 0; var n = 0; for (var i=1; i<=8; i++) { var v = this.getField("sample"+i+"Row1").valueAsString; if (v!="") { sum+=Math.pow((Number(v)avg),2); n++; } } if (n==0  n==1) event.value = ""; else event.value = Math.sqrt(sum / (n1));

17. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 29, 2016 9:08 AM (in response to try67)You are excellent, thank you very much Try, that works !! you made my day.

18. Re: need a custom calculation script to calculate standard deviation
gkaiseril Aug 29, 2016 11:27 AM (in response to try67)Since this could be a fairly frequent type of calculation, I would create a document level function for this calculation. Even if you use just once in a form, you could copy the function to other forms as needed.
Calculating Standard Deviation with Array.map and Array.reduce, In JavaScript by Derick Bailey.
By putting all the values needed for the calculation one can use the "fitter" method" of the array object to remove any unwanted values like "null" or zeros if needed. The code also includes a function to compute the average.

19. Re: need a custom calculation script to calculate standard deviation
bossombritto Aug 31, 2016 10:22 AM (in response to gkaiseril)Thanks gKaiseril,
I did go through this earlier but I do not have much knowledge of Java, so was not able to get this to map it to the way I had my form laid out.

20. Re: need a custom calculation script to calculate standard deviation
gkaiseril Aug 31, 2016 11:31 AM (in response to bossombritto)1 person found this helpfulFirst Acrobat uses JavaScript and not the Java computer language.
An array is a special type of object that represents a collection of items. It is very similar to an array in algebra. Use of the array allows one create a set of items for processing that might not be only from fields. It could also have constants inserted into the array. since the array can dynamically grow the number of elements that can be processed is not limited to just fixed number.
Again using a function to process the data and not the specific fields makes the calculation available to more than one field of file.
Here is a sample form Standard Deviation.
The custom calculation script for the Standard Deviation is:
var MyValues = new Array();
var MyFields = new Array("F1", "F2", "F3", "F4", "F5");
var oField;
var nField;
for(var i = 0; i < MyFields.length; i++)
{
nField = '';
nField = GetField(this, MyFields[i]).valueAsString;
if(nField != "") MyValues.push(Number(nField));
}
event.value = standardDeviation(MyValues);By inserting more field names to the "MyFields" array will increase the number of values to be included in the calculation.
I could also use the "filter" method of the array object to remove unwanted values and the script could then be written as:
var MyValues = new Array();
var MyFields = new Array("F1", "F2", "F3", "F4", "F5");
var oField;
var nField;
for(var i = 0; i < MyFields.length; i++)
{
nField = '';
nField = GetField(this, MyFields[i]).valueAsString;
MyValues.push(Number(nField));
}function RemoveNulls(element) {
return element.toString != null;
}MyValues = MyValues.filter(RemoveNulls)
event.value = standardDeviation(MyValues);
If one looks through the other calculated fields, one will see I call other functions defined to assist in the standard deviation calculation.

21. Re: need a custom calculation script to calculate standard deviation
sarnold1 Mar 30, 2017 11:57 AM (in response to gkaiseril)@gkaiseril
I have followed your example, but I have two issue. I need to calculate the standard deviation of the sample not the population so how do I change the document JavaScript? Also, when I don't have any variation in my 10 values, I get a warning: JavaScript Window that says The value entered does not match the format of the field [StdDev4]
Here are the Document JavaScripts
Fields:
function GetField(oDoc, cField)
{
var oField = oDoc.getField(cField);
if(oField == null)
{
app.alert("Error accessing field \"" + cField + "\"!", 1, 0)
}
return oField;
}
StdDev:
function standardDeviation(values)
{
// compute the standard deviation from an array of vlaues;
// compute the average of the vaues;
var stdDev = "";
var avg = average(values);
if(avg != "")
{
// compute the squared difference of the values and the average;
var squareDiffs = values.map(function(value){
var diff = value  avg;
var sqrDiff = diff * diff;
return sqrDiff;
});
// average the squared differences;
var avgSquareDiff = average(squareDiffs);
stdDev = Math.sqrt(avgSquareDiff);
} // end avg not null;
return stdDev;
}function average(data)
{
// compute the average of an array of values;
//sum the values in the array;
var sum = data.reduce(function(sum, value){
return sum + value;
}, 0);
// compute the average of the sum of the values if number of array elements is not 0;
var avg = '';
if(data.length > 0)
{
var avg = sum / data.length;
}
return avg;
}function sum(value)
{
// sum an array of values;
var Sum = value.reduce(function(Sum, value){
return Sum + value;
}, 0);
return Sum;
}Custom Calculation Script:
var MyValues = new Array();
var MyFields = new Array("AdjustedResult5.1", "AdjustedResult5.2","AdjustedResult5.3", "AdjustedResult5.4", "AdjustedResult5.5", "AdjustedResult5.6", "AdjustedResult5.7", "AdjustedResult5.8", "AdjustedResult5.9", "AdjustedResult5.10" );
var oField;
var nField;
for(var i = 0; i < MyFields.length; i++)
{
nField = '';
nField = GetField(this, MyFields[i]).valueAsString;
if(nField != "") MyValues.push(Number(nField));
}
event.value = standardDeviation(MyValues);

22. Re: need a custom calculation script to calculate standard deviation
sarnold1 Apr 3, 2017 11:57 AM (in response to gkaiseril)I have also tried this for the standard deviation of the sample:
var Ravg = Number(this.getField("AvgAdjResult.1.0").valueAsString);
var Rsum = 0;
var Rn = 0;
for (var i=1; i<=10; i++) {
var Rv = this.getField("AdjustedResult1."+i).valueAsString;
if (Rv!="") {
Rsum+=Math.pow((Number(Rv)Ravg),2);
Rn++;
}
}
if (Rn==0  Rn==1) event.value = "";
else event.value = Math.sqrt(Rsum / (Rn1));
However, I want the cell to stay blank unless there is an average calculated. Also we have low variability in our 10 replicates so the standard deviation can be zero, but I get the error mentioned above: The value entered does not match the format of the field [StdDev4] because it doesn't like to take the square root of zero. How do I make this error disappear, but the cell still have a numeric value of 0.000000?
I tried changing it to this:
var Ravg = Number(this.getField("AvgAdjResult.1.0").valueAsString);
var Rsum = 0;
var Rn = 0;
for (var i=1; i<=10; i++) {
var Rv = this.getField("AdjustedResult1."+i).valueAsString;
if (Rv!="") {
Rsum+=Math.pow((Number(Rv)Ravg),2);
Rn++;
}
}var b = +getField("Result1.10").value;
var c = Rsum / (Rn1);
if (b==0) event.value = "";
else if (c==0) event.value = 0.000000;
else event.value = Math.sqrt (c);but then I don't get a result at all.
Field names are shown in bold below and an example of the data is below as well
Barometric
Pressure (mm/Hg)Result 1 Result 2 Result 3 Result 4 Result 5 Result 6 Result 7 Result 8 Result 9 Result 10 Average of Adjusted Results Standard Deviationof Adj Results %RSD for dry gas standard Standard Uncertainty Expanded Uncertainty 99%, k=3.25 UoM g/210L mmHg Actual Result1.1 Result1.2 Result1.3 Result1.4 Result1.5 Result1.6 Result1.7 Result1.8 Result1.9 Result1.10 AvgAdjResult.1.0 StdDev1 RSD1 StdUnc1 ExpUnc1 UoM1 Adjusted* AdjustedResult1.1 AdjustedResult1.2 AdjustedResult1.3 AdjustedResult1.4 AdjustedResult1.5 AdjustedResult1.6 AdjustedResult1.7 AdjustedResult1.8 AdjustedResult1.9 AdjustedResult1.10 Barometric
Pressure (mm/Hg)Result 1 Result 2 Result 3 Result 4 Result 5 Result 6 Result 7 Result 8 Result 9 Result 10 Average of Adjusted Results Standard Deviation of Adj Results %RSD for dry gas standard Standard Uncertainty Expanded Uncertainty 99%, k=3.25 UoM g/210L 752 Actual 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.000000 0.000000 0.000000 3.447146 0.001 Adjusted* 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 0.018 752 Actual 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.000000 0.000000 0.000000 3.447146 0.001 Adjusted* 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 0.036 752 Actual 0.081 0.081 0.081 0.081 0.081 0.081 0.081 0.081 0.081 0.081 0.081 0.000000 0.000000 0.000000 3.447146 0.003 Adjusted* 0.082 0.082 0.082 0.082 0.082 0.082 0.082 0.082 0.082 0.082 752 Actual 0.148 0.149 0.149 0.149 0.148 0.148 0.148 0.148 0.148 0.148 0.149 0.000488 0.327641 0.036405 3.449175 0.005 Adjusted* 0.150 0.151 0.151 0.151 0.150 0.150 0.150 0.150 0.150 0.150 752 Actual 0.297 0.297 0.297 0.297 0.297 0.297 0.296 0.296 0.296 0.296 0.299 0.000522 0.174546 0.019394 3.447722 0.010 Adjusted* 0.300 0.300 0.300 0.300 0.300 0.300 0.299 0.299 0.299 0.299