diff options
Diffstat (limited to 'modules/statistics/macros/covar.sci')
-rwxr-xr-x | modules/statistics/macros/covar.sci | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/modules/statistics/macros/covar.sci b/modules/statistics/macros/covar.sci new file mode 100755 index 000000000..89308ba02 --- /dev/null +++ b/modules/statistics/macros/covar.sci @@ -0,0 +1,44 @@ + +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) 1999 - INRIA - Carlos Klimann +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +// + +function [s]=covar(x,y,fre) + // + //This function computes the covariance of two variables x + //and y where x is a numerical vector of length n, y is a + //numerical vector of length m and fre is an array of + //dimensions nxm. In fre the element of indices (i,j) + //corresponds to the number or frequencies of x_i&y_j. + // + //References: Wonacott, T.H. & Wonacott, R.J.; Introductory Statistics, + //J.Wiley & Sons, 1990. + // + // + //small correction (bug number 1072) date : 8 nov 2004 + // + [lhs,rhs]=argn(0) + if rhs <> 3 then error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"covar",3)), end + if x==[] | y==[] then s=%nan; return, end + [lfre cfre]=size(fre); + [lx cx]=size(x) + [ly cy]=size(y) + if lx<>1 & cx<>1 then error(msprintf(gettext("%s: Wrong type for input argument #%d: Vector expected.\n"),"covar",1)), end + if ly<>1 & cy<>1 then error(msprintf(gettext("%s: Wrong type for input argument #%d: Vector expected.\n"),"covar",2)), end + fre(isnan(fre))=0 + lx=lx*cx; + cy=ly*cy; + if lx<>lfre then error(msprintf(gettext("%s: Wrong value for input argument #%d: Same number of line as first input argument expected.\n"),"covar",3)), end + if cy<>cfre then error(msprintf(gettext("%s: Wrong value for input argument #%d: Same number of column as first input argument expected.\n"),"covar",3)), end + x=matrix(x,lx,1); + y=matrix(y,1,cy); + fr=fre/sum(fre) + s=sum(((x-sum(x.*sum(fr,"c")))*ones(1,cy)) .. + .* (fr) .* (ones(lx,1)*(y-sum(y.* sum(fr,"r"))))) +endfunction |