| ConfInt documentation | Contained in the ConfInt distribution. |
ConfInt - Perl extension for calculating the confidence interval of meassured values.
use ConfInt;
ConfInt([ARGUMENT_1],[ARGUMENT_2]);
This module calculates and returns the relative error of the turned over values. ConfInt needs two things to be turned over: 1st is the width of the confidence interval. 2nd is the reference to an array including the values. Supported confidence interval width:
0.7 (+/- 0.35) ; probability of 0.65
0.6 (+/- 0.30) ; probability of 0.70
0.5 (+/- 0.25) ; probability of 0.75
0.4 (+/- 0.20) ; probability of 0.80
0.3 (+/- 0.15) ; probability of 0.85
0.2 (+/- 0.10) ; probability of 0.90
0.1 (+/- 0.05) ; probability of 0.95
0.05 (+/- 0.025); probability of 0.975
0.02 (+/- 0.01) ; probability of 0.99
0.01 (+/- 0.005); probability of 0.995
EXAMPLE: use ConfInt; @ValueArray = (1,1,1,1,1,2,3,2,1,1,1,1,2,1); $ReturnValue = &ConfInt::ConfInt(0.05,\@ValueArray); print "$ReturnValue";
Returns the relative error of a summary of values.
written by Christian Gernhardt <christian.gernhardt@web.de>
Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
perl(1).
| ConfInt documentation | Contained in the ConfInt distribution. |
package ConfInt;
require Exporter; our @ISA = qw(Exporter); our %EXPORT_TAGS = ( 'all' => [ qw( ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( ); our $VERSION = '1.0.1'; # ########################### # ## Begin of ConfInt Code ## # ########################### sub ConfInt { # # Measurement value-array # $MEAS_VALUES_REF = $_[1]; @MEAS_VALUES = @$MEAS_VALUES_REF; # # number of measurement values # $NUM_MEAS_VALUES = 0; foreach(@MEAS_VALUES) { $NUM_MEAS_VALUES++; } # # selection of t-distribution array # if($_[0] == 0.7) { # # probability 0.65 (intervalsize: 0.7; +/- 0.35); degree of freedom 1...25 # @TDISTRIB_07 = (0.510, 0.445, 0.424, 0.414, 0.408, 0.404, 0.402, 0.399, 0.398, 0.397, 0.396, 0.395, 0.394, 0.393, 0.393, 0.392, 0.392, 0.392, 0.391, 0.391, 0.391, 0.390, 0.390, 0.390, 0.390); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_07[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 0.389; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 0.388; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 0.388; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 0.387; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 0.387; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 0.387; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 0.387; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 0.386; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 0.386; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 0.386; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 0.386; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 0.385; } if($k >= 1000) { $TDISTRIB[$k] = 0.384; } } } } elsif($_[0] == 0.6) { # # probability 0.7 (intervalsize: 0.6; +/- 0.3); degree of freedom 1...25 # @TDISTRIB_06 = (0.727, 0.617, 0.584, 0.569, 0.559, 0.553, 0.549, 0.546, 0.543, 0.542, 0.540, 0.539, 0.538, 0.537, 0.536, 0.535, 0.534, 0.534, 0.533, 0.533, 0.532, 0.532, 0.532, 0.531, 0.531); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_06[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 0.530; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 0.529; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 0.528; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 0.527; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 0.527; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 0.526; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 0.526; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 0.526; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 0.526; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 0.525; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 0.525; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 0.525; } if($k >= 1000) { $TDISTRIB[$k] = 0.524; } } } } elsif($_[0] == 0.5) { # # probability 0.75 (intervalsize: 0.5; +/- 0.25); degree of freedom 1...25 # @TDISTRIB_05 = (1.000, 0.816, 0.765, 0.741, 0.727, 0.718, 0.711, 0.706, 0.703, 0.700, 0.697, 0.695, 0.694, 0.692, 0.691, 0.690, 0.689, 0.688, 0.688, 0.687, 0.686, 0.686, 0.685, 0.685, 0.684); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_05[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 0.683; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 0.681; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 0.679; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 0.679; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 0.678; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 0.678; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 0.677; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 0.677; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 0.676; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 0.676; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 0.675; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 0.675; } if($k >= 1000) { $TDISTRIB[$k] = 0.674; } } } } elsif($_[0] == 0.4) { # # probability 0.8 (intervalsize: 0.4; +/- 0.2); degree of freedom 1...25 # @TDISTRIB_04 = (1.376, 1.061, 0.978, 0.941, 0.920, 0.906, 0.896, 0.889, 0.883, 0.879, 0.876, 0.873, 0.870, 0.868, 0.866, 0.865, 0.863, 0.862, 0.861, 0.860, 0.859, 0.858, 0.858, 0.857, 0.856); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_04[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 0.854; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 0.851; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 0.849; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 0.848; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 0.847; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 0.846; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 0.846; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 0.845; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 0.844; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 0.843; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 0.842; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 0.842; } if($k >= 1000) { $TDISTRIB[$k] = 0.841; } } } } elsif($_[0] == 0.3) { # # probability 0.85 (intervalsize: 0.3; +/- 0.15); degree of freedom 1...25 # @TDISTRIB_03 = (1.963, 1.386, 1.250, 1.190, 1.156, 1.134, 1.119, 1.108, 1.100, 1.093, 1.088, 1.083, 1.079, 1.076, 1.074, 1.071, 1.069, 1.067, 1.066, 1.064, 1.063, 1.061, 1.060, 1.059, 1.058); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_03[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 1.055; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 1.050; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 1.047; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 1.045; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 1.044; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 1.043; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 1.042; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 1.042; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 1.040; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 1.039; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 1.038; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 1.037; } if($k >= 1000) { $TDISTRIB[$k] = 1.036; } } } } elsif($_[0] == 0.2) { # # probability 0.9 (intervalsize: 0.2; +/- 0.1); degree of freedom 1...25 # @TDISTRIB_02 = (3.078, 1.886, 1.638, 1.533, 1.476, 1.440, 1.415, 1.397, 1.383, 1.372, 1.363, 1.356, 1.350, 1.345, 1.341, 1.337, 1.333, 1.330, 1.328, 1.325, 1.323, 1.321, 1.319, 1.318, 1.316); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_02[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 1.310; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 1.303; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 1.299; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 1.296; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 1.294; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 1.292; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 1.291; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 1.290; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 1.287; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 1.286; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 1.283; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 1.282; } if($k >= 1000) { $TDISTRIB[$k] = 1.281; } } } } elsif($_[0] == 0.1) { # # probability 0.95 (intervalsize: 0.1; +/- 0.05); degree of freedom 1...25 # @TDISTRIB_01 = (6.314, 2.92, 2.353, 2.132, 2.015, 1.943, 1.895, 1.860, 1.833, 1.812, 1.796, 1.782, 1.771, 1.761, 1.753, 1.746, 1.740, 1.734, 1.729, 1.725, 1.721, 1.717, 1.714, 1.711, 1.708); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_01[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 1.697; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 1.684; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 1.676; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 1.671; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 1.667; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 1.664; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 1.662; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 1.660; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 1.655; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 1.653; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 1.648; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 1.646; } if($k >= 1000) { $TDISTRIB[$k] = 1.644; } } } } elsif($_[0] == 0.05) { # # probability 0.975 (intervalsize: 0.05; +/- 0.025); degree of freedom 1...25 # @TDISTRIB_005 = (12.706, 4.303, 3.182, 2.776, 2.571, 2.447, 2.365, 2.306, 2.262, 2.228, 2.201, 2.179, 2.160, 2.145, 2.131, 2.120, 2.110, 2.101, 2.093, 2.086, 2.080, 2.074, 2.069, 2.064, 2.060); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_005[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 2.042; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 2.021; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 2.009; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 2.000; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 1.994; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 1.990; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 1.987; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 1.984; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 1.976; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 1.972; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 1.965; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 1.962; } if($k >= 1000) { $TDISTRIB[$k] = 1.960; } } } } elsif($_[0] == 0.02) { # # probability 0.99 (intervalsize: 0.02; +/- 0.01); degree of freedom 1...25 # @TDISTRIB_002 = (31.821, 6.965, 4.541, 3.747, 3.365, 3.143, 2.998, 2.896, 2.821, 2.764, 2.718, 2.681, 2.650, 2.624, 2.602, 2.583, 2.567, 2.552, 2.539, 2.528, 2.518, 2.508, 2.500, 2.492, 2.485); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_002[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 2.457; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 2.423; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 2.403; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 2.390; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 2.381; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 2.374; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 2.368; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 2.364; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 2.351; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 2.345; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 2.334; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 2.330; } if($k >= 1000) { $TDISTRIB[$k] = 2.328; } } } } elsif($_[0] == 0.01) { # # probability 0.995 (intervalsize: 0.01; +/- 0.005); degree of freedom 1...25 # @TDISTRIB_001 = (63.656, 9.952, 5.841, 4.604, 4.032, 3.707, 3.499, 3.355, 3.250, 3.169, 3.106, 3.055, 3.012, 2.977, 2.947, 2.921, 2.898, 2.878, 2.861, 2.845, 2.831, 2.819, 2.807, 2.797, 2.787); for($k=0;$k<$NUM_MEAS_VALUES;$k++) { if($k < 25) { $TDISTRIB[$k] = $TDISTRIB_001[$k]; } if($k >= 25) { if($k < 30 && $k >= 25) { $TDISTRIB[$k] = 2.750; } if($k < 40 && $k >= 30) { $TDISTRIB[$k] = 2.704; } if($k < 50 && $k >= 40) { $TDISTRIB[$k] = 2.678; } if($k < 60 && $k >= 50) { $TDISTRIB[$k] = 2.660; } if($k < 70 && $k >= 60) { $TDISTRIB[$k] = 2.648; } if($k < 80 && $k >= 70) { $TDISTRIB[$k] = 2.639; } if($k < 90 && $k >= 80) { $TDISTRIB[$k] = 2.632; } if($k < 100 && $k >= 90) { $TDISTRIB[$k] = 2.626; } if($k < 150 && $k >= 100) { $TDISTRIB[$k] = 2.609; } if($k < 200 && $k >= 150) { $TDISTRIB[$k] = 2.601; } if($k < 500 && $k >= 200) { $TDISTRIB[$k] = 2.586; } if($k < 1000 && $k >= 500){ $TDISTRIB[$k] = 2.581; } if($k >= 1000) { $TDISTRIB[$k] = 2.578; } } } } else { return -1; } # # calculation of mean value # $MEAN_VALUE_TMP = 0; for($i=0;$i<$NUM_MEAS_VALUES;$i++) { $MEAN_VALUE_TMP = $MEAS_VALUES[$i] + $MEAN_VALUE_TMP; } $MEAN_VALUE = $MEAN_VALUE_TMP/$NUM_MEAS_VALUES; # # calculation of standard variation # $STD_VAR_TMP = 0; for($j=0;$j<$NUM_MEAS_VALUES;$j++) { $STD_VAR_TMP = ((($MEAS_VALUES[$j] - $MEAN_VALUE)**2)/($NUM_MEAS_VALUES - 1)) + $STD_VAR_TMP; } $STD_VAR = $STD_VAR_TMP**0.5; # # calculation of confidence intervall # $CONF_INT = $TDISTRIB[$NUM_MEAS_VALUES - 2] * $STD_VAR / ($NUM_MEAS_VALUES**0.5); # # calculation of relative error # $REL_ERR = $CONF_INT / $MEAN_VALUE * 100; return $REL_ERR; } # ######################### # ## End of ConfInt Code ## # ######################### 1; __END__