attributes = {
ORGANIZATIONNAME = "Schloss Lab";
};
- buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "mothur" */;
+ buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Mothur" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
1DEB928B08733DD80010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ ARCHS = "$(NATIVE_ARCH_ACTUAL)";
DEPLOYMENT_LOCATION = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
"-lreadline",
);
PREBINDING = NO;
- SDKROOT = macosx10.5;
+ SDKROOT = "";
};
name = Release;
};
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "mothur" */ = {
+ 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Mothur" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB928A08733DD80010E9CD /* Debug */,
vector<string> groupNames;
ifstream in;
- m->openInputFile(axesfile, in);
+ m->openInputFile(metadatafile, in);
string headerLine = m->getline(in); m->gobble(in);
istringstream iss (headerLine,istringstream::in);
//read the first label, because it refers to the groups
string columnLabel;
iss >> columnLabel; m->gobble(iss);
-
+
//save names of columns you are reading
while (!iss.eof()) {
iss >> columnLabel; m->gobble(iss);
m->openOutputFile(HOMOVAFileName, HOMOVAFile);
outputNames.push_back(HOMOVAFileName); outputTypes["homova"].push_back(HOMOVAFileName);
- HOMOVAFile << "HOMOVA\tBValue\tP-value\tSSwithin_values" << endl;
- m->mothurOut("HOMOVA\tBValue\tP-value\tSSwithin_values\n");
+ HOMOVAFile << "HOMOVA\tBValue\tP-value\tSSwithin/(Ni-1)_values" << endl;
+ m->mothurOut("HOMOVA\tBValue\tP-value\tSSwithin/(Ni-1)_values\n");
double fullHOMOVAPValue = runHOMOVA(HOMOVAFile, origGroupSampleMap, experimentwiseAlpha);
for(itA=origGroupSampleMap.begin();itA!=origGroupSampleMap.end();itA++){
itB = itA;itB++;
- for(itB;itB!=origGroupSampleMap.end();itB++){
-
+ for(;itB!=origGroupSampleMap.end();itB++){
map<string, vector<int> > pairwiseGroupSampleMap;
pairwiseGroupSampleMap[itA->first] = itA->second;
pairwiseGroupSampleMap[itB->first] = itB->second;
HOMOVAFile << it->first;
m->mothurOut(it->first);
it++;
- for(it;it!=groupSampleMap.end();it++){
+ for(;it!=groupSampleMap.end();it++){
HOMOVAFile << '-' << it->first;
m->mothurOut('-' + it->first);
}
secondTermSum += (numSamplesInGroup - 1) * log(ssWithinVector[index] / (double)(numSamplesInGroup - 1));
inverseOneMinusSum += 1.0 / (double)(numSamplesInGroup - 1);
+
+ ssWithinVector[index] /= (double)(numSamplesInGroup - 1); //this line is only for output purposes to scale SSw by the number of samples in the group
index++;
}
if (axesfile != "") { axes = readAxes(names); }
string outputFileName = outputDir + m->getRootName(m->getSimpleName(phylipfile)) + "nmds.iters";
- string stressFileName = outputDir + m->getRootName(m->getSimpleName(phylipfile)) + "stress.nmds";
+ string stressFileName = outputDir + m->getRootName(m->getSimpleName(phylipfile)) + "nmds.stress";
outputNames.push_back(outputFileName); outputTypes["iters"].push_back(outputFileName);
outputNames.push_back(stressFileName); outputTypes["stress"].push_back(stressFileName);
out.setf(ios::fixed, ios::floatfield);
out.setf(ios::showpoint);
- out2 << "Dimension\tIter\tStress\tCorr" << endl;
+ out2 << "Dimension\tIter\tStress\tRsq" << endl;
double bestStress = 10000000;
+ double bestR2 = 10000000;
vector< vector<double> > bestConfig;
+ int bestDim = 0;
for (int i = mindim; i <= maxdim; i++) {
m->mothurOut("Processing Dimension: " + toString(i)); m->mothurOutEndLine();
if (m->control_pressed) { out.close(); out2.close(); for (int k = 0; k < outputNames.size(); k++) { remove(outputNames[k].c_str()); } return 0; }
//calc correlation between original distances and euclidean distances from this config
- double corr = linearCalc.calcPearson(newEuclid, matrix);
- corr *= corr;
+ double rsquared = linearCalc.calcPearson(newEuclid, matrix);
+ rsquared *= rsquared;
if (m->control_pressed) { out.close(); out2.close(); for (int k = 0; k < outputNames.size(); k++) { remove(outputNames[k].c_str()); } return 0; }
//output results
out << "Config" << (j+1) << '\t';
for (int k = 0; k < i; k++) { out << "axis" << (k+1) << '\t'; }
out << endl;
- out2 << i << '\t' << (j+1) << '\t' << stress << '\t' << corr << endl;
+ out2 << i << '\t' << (j+1) << '\t' << stress << '\t' << rsquared << endl;
output(endConfig, names, out);
//save best
if (stress < bestStress) {
+ bestDim = i;
bestStress = stress;
+ bestR2 = rsquared;
bestConfig = endConfig;
}
string BestFileName = outputDir + m->getRootName(m->getSimpleName(phylipfile)) + "nmds.axes";
outputNames.push_back(BestFileName); outputTypes["nmds"].push_back(BestFileName);
+ m->mothurOut("\nNumber of dimensions:\t" + toString(bestDim) + "\n");
+ m->mothurOut("Lowest stress :\t" + toString(bestStress) + "\n");
+ m->mothurOut("R-squared for configuration:\t" + toString(bestR2) + "\n");
+
ofstream outBest;
m->openOutputFile(BestFileName, outBest);
outBest.setf(ios::fixed, ios::floatfield);
double corr = linearCalc.calcPearson(EuclidDists, D); //G is the pcoa file, D is the users distance matrix
- m->mothurOut("Pearson's coefficient using " + toString(i) + " axis: " + toString(corr)); m->mothurOutEndLine();
+ m->mothurOut("Rsq " + toString(i) + " axis: " + toString(corr * corr)); m->mothurOutEndLine();
if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; }
}