#include "linearalgebra.h"
-/* references used to make this command: "Nonmetric Multidimensional Scalling: A Numerical Method"
- by J. B. Kruskal Psychometrika - Vol 29, No. 2 June 1964 */
+/*
+ Translated from the nmds.R code written by Sarah Goslee using,
+
+ # Non-metric multidimensional scaling function
+ # using the majorization algorithm from
+ # Borg & Groenen 1997, Modern Multidimensional Scaling.
+ #
+
+ # also referenced (Kruskal 1964)
+
+ */
/*****************************************************************/
class NMDSCommand : public Command {
bool abort;
string phylipfile, outputDir, axesfile;
- int dimension, maxIters;
- double step, cutoff;
+ int maxdim, mindim, maxIters, iters;
+ double epsilon;
vector<string> outputNames;
map<string, vector<string> > outputTypes;
LinearAlgebra linearCalc;
- vector< vector<double> > generateStartingConfiguration(int); //pass in numNames, return axes
- int normalizeConfiguration(vector< vector<double> >&, int);
- vector<seqDist> satisfyMonotonicity(vector<seqDist>);
- double calculateStress(vector<seqDist>&, vector<seqDist>&, double&);
- vector< vector<double> > calculateStressGradientVector(vector<seqDist>&, vector<seqDist>&, double, double, vector< vector<double> >&);
- double calculateMagnitude(vector< vector<double> >&);
- double calculateStep(vector< vector<double> >&, vector< vector<double> >&, vector<double>&);
- vector< vector<double> > calculateNewConfiguration(double, vector< vector<double> >&, vector< vector<double> >&);
+ vector< vector<double> > nmdsCalc(vector< vector<double> >&, vector< vector<double> >&, double&);
+ vector< vector<double> > getConfiguration(vector< vector<double> >&, int);
+ vector< vector<double> > generateStartingConfiguration(int, int); //pass in numNames, return axes
+ int normalizeConfiguration(vector< vector<double> >&, int, int);
+ double calculateStress(vector< vector<double> >&, vector< vector<double> >&);
vector< vector<double> > readAxes(vector<string>);
- int output(string, string, vector< vector<double> >&, vector<double>&, vector<string>&);
+ int output(vector< vector<double> >&, vector<string>&, ofstream&);
};
/*****************************************************************/