📄 pairedttester.java
字号:
*
* @param baseResultset the index of the base resultset
* @param comparisonColumn the index of the column to compare over
* @param maxWidthMean width for the mean
* @param maxWidthStdDev width for the standard deviation
* @return the comparison table string
*/
private String multiResultsetFullLatex(int baseResultset,
int comparisonColumn,
int maxWidthMean,
int maxWidthStdDev) {
StringBuffer result = new StringBuffer(1000);
String tmpStr = "";
int numcols = getNumDisplayedResultsets() * 2;
if (m_ShowStdDevs) {
numcols += getNumDisplayedResultsets();
}
result.append("\\begin{table}[thb]\n\\caption{\\label{labelname}"
+"Table Caption}\n");
if (!m_ShowStdDevs) {
result.append("\\footnotesize\n");
} else {
result.append("\\scriptsize\n");
}
// output the column alignment characters
// one for the dataset name and one for the comparison column
if (!m_ShowStdDevs) {
result.append("{\\centering \\begin{tabular}{ll");
} else {
// dataset, mean, std dev
result.append("{\\centering \\begin{tabular}{lr@{\\hspace{0cm}}l");
}
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
if (!m_ShowStdDevs) {
result.append("l@{\\hspace{0.1cm}}l");
} else {
result.append("r@{\\hspace{0cm}}l@{\\hspace{0cm}}r");
}
}
}
result.append("}\n\\\\\n\\hline\n");
if (!m_ShowStdDevs) {
result.append("Data Set & ("+(baseResultset+1)+")");
} else {
result.append("Data Set & \\multicolumn{2}{c}{("+(baseResultset+1)+")}");
}
// now do the column names (numbers)
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
if (!m_ShowStdDevs) {
result.append("& (" + (j + 1) + ") & ");
} else {
result.append("& \\multicolumn{3}{c}{(" + (j + 1) + ")} ");
}
}
}
result.append("\\\\\n\\hline\n");
int datasetLength = 25;
int resultsetLength = maxWidthMean + 5 + m_MeanPrec;
if (m_ShowStdDevs) {
resultsetLength += (maxWidthStdDev + 8 + m_StdDevPrec);
}
for (int i = 0; i < getNumDatasets(); i++) {
// Print the name of the dataset
String datasetName =
templateString(m_DatasetSpecifiers.specifier(i)).replace('_','-');
try {
PairedStats pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, baseResultset,
comparisonColumn);
datasetName = Utils.padRight(datasetName, datasetLength);
result.append(datasetName);
if (!m_ShowStdDevs) {
tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 5, m_MeanPrec);
} else {
tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 5, m_MeanPrec) + "$\\pm$";
if (Double.isNaN(pairedStats.xStats.stdDev)) {
tmpStr += "&" + Utils.doubleToString(0.0, maxWidthStdDev + 3, m_StdDevPrec) + " ";
} else {
tmpStr += "&" + padIt(pairedStats.xStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + " ";
}
}
if (tmpStr.length() < resultsetLength - 2)
tmpStr = Utils.padLeft(tmpStr, resultsetLength - 2);
result.append("& ")
.append(tmpStr);
// Iterate over the resultsets
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
try {
pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, j, comparisonColumn);
String sigString = " ";
if (pairedStats.differencesSignificance < 0) {
sigString = "$\\circ$ ";
} else if (pairedStats.differencesSignificance > 0) {
sigString = "$\\bullet$";
}
if (!m_ShowStdDevs) {
tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec);
} else {
tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec) + "$\\pm$";
if (Double.isNaN(pairedStats.yStats.stdDev)) {
tmpStr += "&" + Utils.doubleToString(0.0, maxWidthStdDev + 3, m_StdDevPrec) + " ";
} else {
tmpStr += "&" + padIt(pairedStats.yStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + " ";
}
}
if (tmpStr.length() < resultsetLength - 2)
tmpStr = Utils.padLeft(tmpStr, resultsetLength - 2);
result.append(" & ")
.append(tmpStr)
.append(" & ")
.append(sigString);
} catch (Exception ex) {
ex.printStackTrace();
result.append(Utils.padLeft("", resultsetLength + 1));
}
}
}
result.append("\\\\\n");
} catch (Exception ex) {
ex.printStackTrace();
}
}
result.append("\\hline\n\\multicolumn{"+numcols+"}{c}{$\\circ$, $\\bullet$"
+" statistically significant improvement or degradation}"
+"\\\\\n\\end{tabular} ");
if (!m_ShowStdDevs) {
result.append("\\footnotesize ");
} else {
result.append("\\scriptsize ");
}
result.append("\\par}\n\\end{table}"
+"\n");
return result.toString();
}
/**
* pads the given double on the left side with blanks and returns the string
*
* @param value the value to print as string
* @param a the width of the double
* @param b the precision of the double (digits after period)
* @return the double as left-padded string
*/
private String padIt(double value, int a, int b) {
String res = Utils.doubleToString(value,
a, b);
int precision = 0;
int width = res.length();
res = res.trim();
// how many "0" to add? -> determine current precision digits
if (res.indexOf(".") == -1) {
if (b > 0)
res += ".";
precision = 0;
}
else {
precision = res.substring(res.indexOf(".") + 1).length();
}
for (int i = precision; i < b; i++)
res += "0";
while (res.length() < width) {
res = " " + res;
}
return res;
}
/**
* Generates a comparison table in latex table format
*
* @param baseResultset the index of the base resultset
* @param comparisonColumn the index of the column to compare over
* @param maxWidthMean width for the mean
* @param maxWidthStdDev width for the standard deviation
* @return the comparison table string
*/
private String multiResultsetFullPlainText(int baseResultset,
int comparisonColumn,
int maxWidthMean,
int maxWidthStdDev) {
StringBuffer result = new StringBuffer(1000);
String tmpStr = "";
int datasetLength = 25;
// int resultsetLength = 9;
// int resultsetLength = 16;
int resultsetLength = maxWidthMean + 5 + m_MeanPrec;
if (m_ShowStdDevs) {
resultsetLength += (maxWidthStdDev + 3 + m_StdDevPrec);
}
// Set up the titles
StringBuffer titles = new StringBuffer(Utils.padRight("Dataset",
datasetLength));
titles.append(' ');
StringBuffer label
= new StringBuffer(Utils.padLeft("(" + (baseResultset + 1)
+ ") "
+ getResultsetName(baseResultset),
resultsetLength + 3));
titles.append(label);
StringBuffer separator = new StringBuffer(Utils.padRight("",
datasetLength));
while (separator.length() < titles.length()) {
separator.append('-');
}
separator.append("---");
titles.append(" | ");
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
label = new StringBuffer(Utils.padLeft("(" + (j + 1) + ") "
+ getResultsetName(j), resultsetLength));
titles.append(label).append(' ');
for (int i = 0; i < label.length(); i++) {
separator.append('-');
}
separator.append('-');
}
}
result.append(titles).append('\n').append(separator).append('\n');
// Iterate over datasets
int [] win = new int [getNumResultsets()];
int [] loss = new int [getNumResultsets()];
int [] tie = new int [getNumResultsets()];
StringBuffer skipped = new StringBuffer("");
for (int i = 0; i < getNumDatasets(); i++) {
// Print the name of the dataset
String datasetName =
templateString(m_DatasetSpecifiers.specifier(i));
try {
PairedStats pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, baseResultset,
comparisonColumn);
datasetName = Utils.padRight(datasetName, datasetLength);
result.append(datasetName);
result.append(Utils.padLeft('(' + Utils.doubleToString(pairedStats.count, 0) + ')', 5))
.append(' ');
if (!m_ShowStdDevs) {
tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 1 + m_MeanPrec, m_MeanPrec);
} else {
tmpStr = padIt(pairedStats.xStats.mean, maxWidthMean + 1 + m_MeanPrec, m_MeanPrec);
if (Double.isInfinite(pairedStats.xStats.stdDev)) {
tmpStr += '(' + Utils.padRight("Inf", maxWidthStdDev + 1 + m_StdDevPrec) +')';
} else {
tmpStr += '(' + padIt(pairedStats.xStats.stdDev, maxWidthStdDev + 1 + m_StdDevPrec, m_StdDevPrec) + ')';
}
}
result.append(Utils.padLeft(tmpStr, resultsetLength - 2)).append(" | ");
// Iterate over the resultsets
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
try {
pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, j, comparisonColumn);
char sigChar = ' ';
if (pairedStats.differencesSignificance < 0) {
sigChar = 'v';
win[j]++;
} else if (pairedStats.differencesSignificance > 0) {
sigChar = '*';
loss[j]++;
} else {
tie[j]++;
}
if (!m_ShowStdDevs) {
tmpStr = padIt(pairedStats.yStats.mean, resultsetLength - 2, m_MeanPrec);
} else {
tmpStr = padIt(pairedStats.yStats.mean, maxWidthMean + 5, m_MeanPrec);
if (Double.isInfinite(pairedStats.yStats.stdDev)) {
tmpStr += '(' + Utils.padRight("Inf", maxWidthStdDev + 3) + ')';
} else {
tmpStr += '(' + padIt(pairedStats.yStats.stdDev, maxWidthStdDev + 3, m_StdDevPrec) + ')';
}
}
result.append(Utils.padLeft(tmpStr, resultsetLength - 2))
.append(' ')
.append(sigChar)
.append(' ');
} catch (Exception ex) {
ex.printStackTrace();
result.append(Utils.padLeft("", resultsetLength + 1));
}
}
}
result.append('\n');
} catch (Exception ex) {
ex.printStackTrace();
skipped.append(datasetName).append(' ');
}
}
result.append(separator).append('\n');
result.append(Utils.padLeft("(v/ /*)", datasetLength + 4 +
resultsetLength)).append(" | ");
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
result.append(Utils.padLeft("(" + win[j] + '/' + tie[j]
+ '/' + loss[j] + ')',
resultsetLength)).append(' ');
}
}
result.append('\n');
if (!skipped.equals("")) {
result.append("Skipped: ").append(skipped).append('\n');
}
return result.toString();
}
/**
* Generates a comparison table in CSV table format
*
* @param baseResultset the index of the base resultset
* @param comparisonColumn the index of the column to compare over
* @param maxWidthMean width for the mean
* @param maxWidthStdDev width for the standard deviation
* @return the comparison table string
*/
private String multiResultsetFullCSV(int baseResultset,
int comparisonColumn,
int maxWidthMean,
int maxWidthStdDev) {
StringBuffer result = new StringBuffer(1000);
int resultsetLength = maxWidthMean + 7;
if (m_ShowStdDevs) {
resultsetLength += (maxWidthStdDev + 5);
}
// Set up the titles
StringBuffer titles = new StringBuffer("Dataset");
titles.append(",");
StringBuffer label = new StringBuffer(Utils.quote("(" + (baseResultset + 1)
+ ") "
+ getResultsetName(baseResultset)));
titles.append(label);
if (m_ShowStdDevs)
titles.append(",")
.append("StdDev");
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
label = new StringBuffer(Utils.quote("(" + (j + 1) + ") " + getResultsetName(j)));
titles.append(",")
.append(label)
.append(",");
if (m_ShowStdDevs)
titles.append("StdDev")
.append(",");
}
}
result.append(titles).append('\n');
// Iterate over datasets
int [] win = new int [getNumResultsets()];
int [] loss = new int [getNumResultsets()];
int [] tie = new int [getNumResultsets()];
StringBuffer skipped = new StringBuffer("");
for (int i = 0; i < getNumDatasets(); i++) {
// Print the name of the dataset
String datasetName =
templateString(m_DatasetSpecifiers.specifier(i));
try {
PairedStats pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, baseResultset,
comparisonColumn);
result.append(Utils.quote(datasetName + Utils.doubleToString(pairedStats.count, 0)));
if (!m_ShowStdDevs) {
result.append(',')
.append(padIt(pairedStats.xStats.mean, resultsetLength - 2, m_MeanPrec).trim());
}
else {
result.append(',')
.append(padIt(pairedStats.xStats.mean, (maxWidthMean+5), m_MeanPrec).trim());
if (Double.isInfinite(pairedStats.xStats.stdDev)) {
result.append(',')
.append("Inf");
}
else {
result.append(',')
.append(padIt(pairedStats.xStats.stdDev, (maxWidthStdDev+3), m_StdDevPrec));
}
}
// Iterate over the resultsets
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
if (j != baseResultset) {
try {
pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, j, comparisonColumn);
char sigChar = ' ';
if (pairedStats.differencesSignificance < 0) {
sigChar = 'v';
win[j]++;
}
else
if (pairedStats.differencesSignificance > 0) {
sigChar = '*';
loss[j]++;
}
else {
tie[j]++;
}
if (!m_ShowStdDevs) {
result.append(',')
.append(padIt(pairedStats.yStats.mean, resultsetLength - 2, m_MeanPrec).trim())
.append(',')
.append(sigChar);
}
else {
result.append(',')
.append(padIt(pairedStats.yStats.mean, (maxWidthMean+5), m_MeanPrec).trim());
if (Double.isInfinite(pairedStats.yStats.stdDev)) {
result.append(',')
.append("Inf");
}
else {
result.append(',')
.append(padIt(pairedStats.yStats.stdDev, (maxWidthStdDev+3), m_StdDevPrec).trim());
}
result.append(',')
.append(sigChar);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
result.append('\n');
}
catch (Exception ex) {
ex.printStackTrace();
if (skipped.length() > 0)
skipped.append(',');
skipped.append(datasetName);
}
}
result.append(',')
.append(Utils.quote("(v/ /*)"));
if (m_ShowStdDevs)
result.append(',');
for (int j = 0; j < getNumResultsets(); j++) {
if (!displayResultset(j))
continue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -