📄 pairedttester.java
字号:
">-<".length());
String result;
if (m_latexOutput) {
result = "\\begin{table}[thb]\n\\caption{\\label{labelname}Table Caption"
+"}\n\\footnotesize\n{\\centering \\begin{tabular}{rlll}\\\\\n\\hline\n";
result += "Resultset & Wins$-$ & Wins & Losses \\\\\n& Losses & & "
+"\\\\\n\\hline\n";
} else {
result = Utils.padLeft(">-<", width) + ' '
+ Utils.padLeft(">", width) + ' '
+ Utils.padLeft("<", width) + " Resultset\n";
}
int [] ranking = Utils.sort(diff);
for (int i = numResultsets - 1; i >= 0; i--) {
int curr = ranking[i];
if (m_latexOutput) {
result += "(" + (curr+1) + ") & "
+ Utils.padLeft("" + diff[curr], width)
+" & " + Utils.padLeft("" + wins[curr], width)
+" & " + Utils.padLeft("" + losses[curr], width)
+"\\\\\n";
} else {
result += Utils.padLeft("" + diff[curr], width) + ' '
+ Utils.padLeft("" + wins[curr], width) + ' '
+ Utils.padLeft("" + losses[curr], width) + ' '
+ getResultsetName(curr) + '\n';
}
}
if (m_latexOutput) {
result += "\\hline\n\\end{tabular} \\footnotesize \\par}\n\\end{table}";
}
return result;
}
/**
* 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 multiResultsetFullLatex(int baseResultset,
int comparisonColumn,
int maxWidthMean,
int maxWidthStdDev) {
StringBuffer result = new StringBuffer(1000);
int numcols = getNumResultsets() * 2;
if (m_ShowStdDevs) {
numcols += getNumResultsets();
}
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 (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 (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 + 7;
if (m_ShowStdDevs) {
resultsetLength += (maxWidthStdDev + 5);
}
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) {
result.append("& "+padIt(pairedStats.xStats.mean,
resultsetLength - 2, 2));
} else {
result.append("& "+padIt(pairedStats.xStats.mean,
(maxWidthMean+5), 2)+"$\\pm$");
if (Double.isNaN(pairedStats.xStats.stdDev)) {
result.append("&"+Utils.doubleToString(0.0,
(maxWidthStdDev+3),2)+" ");
} else {
result.append("&"+padIt(pairedStats.xStats.stdDev,
(maxWidthStdDev+3),2)+" ");
}
}
// Iterate over the resultsets
for (int j = 0; j < getNumResultsets(); j++) {
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) {
result.append(" & "+padIt(pairedStats.yStats.mean,
resultsetLength - 2,
2)).append(" & "+sigString);
} else {
result.append(" & "
+padIt(pairedStats.yStats.mean,
(maxWidthMean+5),
2)+"$\\pm$");
if (Double.isNaN(pairedStats.yStats.stdDev)) {
result.append("&"+Utils.doubleToString(0.0,
(maxWidthStdDev+3),2)+" ");
} else {
result.append("&"+padIt(pairedStats.
yStats.stdDev, (maxWidthStdDev+3),2)+" ");
}
result.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");
System.out.println(result.toString()+"\n\n");
return result.toString();
}
private String padIt(double value, int a, int b) {
String res = Utils.doubleToString(value,
a, b);
int width = res.length();
res = res.trim();
if (res.indexOf(".") == -1) {
res += ".00";
} else if (res.indexOf(".") == res.length()-2) {
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);
int datasetLength = 25;
// int resultsetLength = 9;
// int resultsetLength = 16;
int resultsetLength = maxWidthMean + 7;
if (m_ShowStdDevs) {
resultsetLength += (maxWidthStdDev + 5);
}
// 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 (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) {
result.append(padIt(pairedStats.xStats.mean,
resultsetLength - 2, 2)).
append(" | ");
} else {
result.append(padIt(pairedStats.xStats.mean,
(maxWidthMean+5), 2));
if (Double.isInfinite(pairedStats.xStats.stdDev)) {
result.append('(' + Utils.padRight("Inf", maxWidthStdDev + 3)
+')').append(" | ");
} else {
result.append('('+padIt(pairedStats.xStats.stdDev,
(maxWidthStdDev+3),2)
+')').append(" | ");
}
}
// Iterate over the resultsets
for (int j = 0; j < getNumResultsets(); j++) {
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(padIt(pairedStats.yStats.mean,
resultsetLength - 2,
2)).append(' ')
.append(sigChar).append(' ');
} else {
result.append(padIt(pairedStats.yStats.mean,
(maxWidthMean+5),
2));
if (Double.isInfinite(pairedStats.yStats.stdDev)) {
result.append('('
+ Utils.padRight("Inf", maxWidthStdDev + 3)
+')');
} else {
result.append('('+padIt(pairedStats.
yStats.stdDev,
(maxWidthStdDev+3),
2)+')');
}
result.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 (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();
}
/**
* Creates a comparison table where a base resultset is compared to the
* other resultsets. Results are presented for every dataset.
*
* @param baseResultset the index of the base resultset
* @param comparisonColumn the index of the column to compare over
* @return the comparison table string
* @exception Exception if an error occurs
*/
public String multiResultsetFull(int baseResultset,
int comparisonColumn) throws Exception {
int maxWidthMean = 2;
int maxWidthStdDev = 2;
// determine max field width
for (int i = 0; i < getNumDatasets(); i++) {
for (int j = 0; j < getNumResultsets(); j++) {
try {
PairedStats pairedStats =
calculateStatistics(m_DatasetSpecifiers.specifier(i),
baseResultset, j, comparisonColumn);
if (!Double.isInfinite(pairedStats.yStats.mean) &&
!Double.isNaN(pairedStats.yStats.mean)) {
double width = ((Math.log(Math.abs(pairedStats.yStats.mean)) /
Math.log(10))+1);
if (width > maxWidthMean) {
maxWidthMean = (int)width;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -