/* PSPP - a program for statistical analysis.
- Copyright (C) 2009 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2011 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
#include <config.h>
-#include "correlation.h"
+#include <assert.h>
+#include "math/correlation.h"
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_cdf.h>
#include <math.h>
-#include <libpspp/misc.h>
-#include "minmax.h"
+
+#include "libpspp/misc.h"
+
+#include "gl/minmax.h"
double
t = sqrt (t);
t *= rho;
-
+
if (t > 0)
return gsl_cdf_tdist_Q (t, w - 2);
else
{
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;
}
+
+gsl_matrix *
+covariance_from_correlation (const gsl_matrix *corr, const gsl_matrix *v)
+{
+ size_t i, j;
+ assert (corr->size1 == corr->size2);
+
+ gsl_matrix *output = gsl_matrix_calloc (corr->size1, corr->size2);
+
+ for (i = 0 ; i < corr->size1; ++i)
+ {
+ for (j = 0 ; j < corr->size2; ++j)
+ {
+ double r = gsl_matrix_get (corr, i, j);
+
+ r *= sqrt (gsl_matrix_get (v, i, j))
+ *
+ sqrt (gsl_matrix_get (v, j, i));
+
+ gsl_matrix_set (output, i, j, r);
+ }
+ }
+
+ return output;
+}