New module src/math/correlation
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 8 Nov 2009 15:33:52 +0000 (16:33 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 8 Nov 2009 15:33:52 +0000 (16:33 +0100)
Created a new module to hold some common routines pertaining
to correlation coefficients.

src/language/stats/correlations.c
src/math/automake.mk
src/math/correlation.c [new file with mode: 0644]
src/math/correlation.h [new file with mode: 0644]

index e397dae53b2ff482bb0ea9b31cc4b2685ddd14dd..605609a7d68cc559e42cc605cf2543f49e9a441d 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <libpspp/assertion.h>
 #include <math/covariance.h>
+#include <math/correlation.h>
 #include <math/design-matrix.h>
 #include <gsl/gsl_matrix.h>
 #include <data/casegrouper.h>
 #define N_(msgid) msgid
 
 
-static double
-significance_of_correlation (double rho, double w)
-{
-  double t = w - 2;
-  t /= 1 - MIN (1, pow2 (rho));
-  t = sqrt (t);
-  t *= rho;
-  
-  if (t > 0)
-    return  gsl_cdf_tdist_Q (t, w - 2);
-  else
-    return  gsl_cdf_tdist_P (t, w - 2);
-}
-
-
 struct corr
 {
   size_t n_vars_total;
@@ -291,32 +277,6 @@ output_correlation (const struct corr *corr, const struct corr_opts *opts,
 }
 
 
-static gsl_matrix *
-correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v)
-{
-  size_t i, j;
-  gsl_matrix *corr = gsl_matrix_calloc (cv->size1, cv->size2);
-  
-  for (i = 0 ; i < cv->size1; ++i)
-    {
-      for (j = 0 ; j < cv->size2; ++j)
-       {
-         double rho = gsl_matrix_get (cv, i, j);
-         
-         rho /= sqrt (gsl_matrix_get (v, i, j))
-           * 
-           sqrt (gsl_matrix_get (v, j, i));
-         
-         gsl_matrix_set (corr, i, j, rho);
-       }
-    }
-  
-  return corr;
-}
-
-
-
-
 static void
 run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr *corr)
 {
index 9fc15aaf10a35088095399764f85a910178e9816..a17919e405a92e81c56cd3828f4f5987c7af5082 100644 (file)
@@ -17,6 +17,8 @@ src_math_libpspp_math_la_SOURCES = \
        src/math/covariance.h \
        src/math/covariance-matrix.c \
        src/math/covariance-matrix.h \
+       src/math/correlation.c \
+       src/math/correlation.h \
        src/math/design-matrix.c src/math/design-matrix.h \
        src/math/extrema.c src/math/extrema.h \
        src/math/group.c  src/math/group.h \
diff --git a/src/math/correlation.c b/src/math/correlation.c
new file mode 100644 (file)
index 0000000..303b48b
--- /dev/null
@@ -0,0 +1,63 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "correlation.h"
+
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_cdf.h>
+#include <math.h>
+#include <libpspp/misc.h>
+#include "minmax.h"
+
+
+double
+significance_of_correlation (double rho, double w)
+{
+  double t = w - 2;
+  t /= 1 - MIN (1, pow2 (rho));
+  t = sqrt (t);
+  t *= rho;
+  
+  if (t > 0)
+    return  gsl_cdf_tdist_Q (t, w - 2);
+  else
+    return  gsl_cdf_tdist_P (t, w - 2);
+}
+
+gsl_matrix *
+correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v)
+{
+  size_t i, j;
+  gsl_matrix *corr = gsl_matrix_calloc (cv->size1, cv->size2);
+  
+  for (i = 0 ; i < cv->size1; ++i)
+    {
+      for (j = 0 ; j < cv->size2; ++j)
+       {
+         double rho = gsl_matrix_get (cv, i, j);
+         
+         rho /= sqrt (gsl_matrix_get (v, i, j))
+           * 
+           sqrt (gsl_matrix_get (v, j, i));
+         
+         gsl_matrix_set (corr, i, j, rho);
+       }
+    }
+  
+  return corr;
+}
diff --git a/src/math/correlation.h b/src/math/correlation.h
new file mode 100644 (file)
index 0000000..27621c4
--- /dev/null
@@ -0,0 +1,27 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+
+#ifndef SRC_MATH_CORRELATION_H
+#define SRC_MATH_CORRELATION_H
+
+#include <gsl/gsl_matrix.h>
+
+gsl_matrix * correlation_from_covariance (const gsl_matrix *cv, const gsl_matrix *v);
+
+double significance_of_correlation (double rho, double w);
+
+#endif