From: Kathryn Iverson Date: Thu, 28 Jun 2012 13:31:03 +0000 (-0400) Subject: updated kruskalwallis command X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=commitdiff_plain;h=f954b4d65ce86218f9f7262737f36d1e7faf58d6 updated kruskalwallis command --- diff --git a/kruskalwalliscommand.cpp b/kruskalwalliscommand.cpp index 263b1c5..f67fef8 100644 --- a/kruskalwalliscommand.cpp +++ b/kruskalwalliscommand.cpp @@ -6,13 +6,6 @@ */ #include "kruskalwalliscommand.h" -//********************************************************************************************************************** -class groupRank { -public: - string group; - double value; - double rank; -}; //********************************************************************************************************************** vector KruskalWallisCommand::setParameters(){ try { @@ -132,12 +125,32 @@ int KruskalWallisCommand::execute(){ //math goes here - int N; - double ss, H; + int N; //= thisLookUp.size(); + double H; double tmp = 0.0; + vector vec; + string group; + int count; + double sum; //merge all groups into a vector //rank function here + assignRank(vec); + + //populate counts and ranSums vectors + for (int i=0;i KruskalWallisCommand::getRank(vector vec) { +void KruskalWallisCommand::assignRank(vector &vec) { try { - multimap rankMap; double rank = 1; - double previous; - double tie = 0.0; - int tiecount = 0; + double numRanks, avgRank; + vector::iterator it, oldit; + + sort (vec.begin(), vec.end(), comparevalue); - sort (vec.begin(), vec.end()); + it = vec.begin(); + + while ( it != vec.end() ) { + j = rank; + oldit = it; + if (!equalvalue(*it, *it+1)) { *it->rank = rank; rank++; it++; } + else { + while(equalrank(*it, *it+1)) { + j = j + (j+1.0); + rank++; + it++; + } + numRanks = double (distance(oldit, it)); + avgRank = j / numRanks; + while(oldit != it) { + *oldit->rank = avgRank; + oldit++; + } + } - for (int i=0;ierrorOut(e, "KruskalWallisCommand", "getRank"); diff --git a/kruskalwalliscommand.h b/kruskalwalliscommand.h index 7e52613..003ea91 100644 --- a/kruskalwalliscommand.h +++ b/kruskalwalliscommand.h @@ -10,10 +10,16 @@ #include "command.hpp" -class KruskalWallisCommand : public Command { + struct groupRank { + sstring group; + double value; + double rank; + }; +class KruskalWallisCommand : public Command { + public: - + KruskalWallisCommand(string); KruskalWallisCommand(); ~KruskalWallisCommand(){} @@ -28,7 +34,7 @@ public: int execute(); void help() { m->mothurOut(getHelpString()); } - multimap getRank(vector); + void assignRank(vector); private: string outputDir; @@ -36,6 +42,14 @@ private: vector rankSums; vector rankMeans; + + + bool comparevalue(const groupRank &a, const groupRank &b) { return a.value < b.value; } + bool equalvalue(const groupRank &a, const groupRank &b) { return a.value == b.value; } + bool comparerank(const groupRank &a, const groupRank &b) { return a.rank < b.rank; } + bool equalrank(const groupRank &a, const groupRank &b) { return a.rank == b.rank; } + bool equalgroup(const groupRank &a, const groupRank &b) { return a.group == b.group; } + }; #endif /* KRUSKALWALLISCOMMAND_H */