public AnovaTestResult KruskalWallisWithDunnDynamic(Parameter parameter)
{
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
dynamic scipyStats = Py.Import("scipy.stats");
dynamic statsmodels = Py.Import("statsmodels.sandbox.stats.multicomp");
dynamic scikit_posthocs = Py.Import("scikit_posthocs");
dynamic pandas = Py.Import("pandas");
var groupsData = parameter.GroupedParameterValues.Values;
var groupLabelsPair = parameter.GroupedParameterValues.Keys;
var pyGroupsData = new PyList();
foreach (List<double> groupData in groupsData)
{
var pyGroupData = new PyList();
foreach (double value in groupData)
{
pyGroupData.Append(value.ToPython());
}
pyGroupsData.Append(pyGroupData);
}
PyTuple pyGroupsDataTuple = new PyTuple(pyGroupsData.ToArray());
dynamic groupLabels = parameter.GroupedParameterValues.Keys.ToList().ToPython();
List<double> allValues = new List<double>();
List<double> allGroupLabels = new List<double>();
foreach (var kvp in parameter.GroupedParameterValues)
{
double groupLabel = kvp.Key;
List<double> groupValues = kvp.Value;
allGroupLabels.AddRange(Enumerable.Repeat(groupLabel, groupValues.Count));
allValues.AddRange(groupValues);
}
dynamic data_dict = new PyDict();
foreach (var kvp in parameter.GroupedParameterValues)
{
string key = kvp.Key.ToString();
List<double> svalues = kvp.Value;
var pyGroupData = new PyList();
foreach (double value in svalues)
{
pyGroupData.Append(value.ToPython());
}
data_dict[key] = pyGroupData;
}
dynamic data = np.array(allValues.ToArray());
dynamic groupLabelsCombined = np.array(allGroupLabels.ToArray());
dynamic df = pandas.DataFrame(data, groupLabelsCombined);
//
string pythonScript = @"
result_kw = scipyStats.kruskal(*groups_data) dunn_result = scikit_posthocs.posthoc_dunn(df , val_col=data, group_col=group_labels_combined) ";
dynamic locals = new PyDict();
dynamic globals = new PyDict();
globals["scipyStats"] = scipyStats;
globals["statsmodels"] = statsmodels;
globals["groups_data"] = pyGroupsDataTuple;
globals["group_labels"] = groupLabels;
globals["np"] = np;
globals["df"] = df;
globals["scikit_posthocs"] = scikit_posthocs;
globals["data"] = data;
globals["group_labels_combined"] = groupLabelsCombined;
PythonEngine.Exec(pythonScript, locals, globals);
dynamic kwResult = globals["result_kw"];
dynamic result = globals["dunn_result"];
// Create a pandas DataFrame
//dynamic dunnResult = globals["dunn_result"];
double hValue = kwResult[0].As<double>();
double pValueKruskalWallis = kwResult[1].As<double>();
if (pValueKruskalWallis < 0.05)
{
parameter.ISFAnovaSig = true;
}
string pValueString = pValueKruskalWallis <= 0.001 ? "<0.001" : pValueKruskalWallis.ToString("0.000");
dynamic pValuesDunn = result;
List<string[]> pairwisecomparisons = new List<string[]>();
int k = 0;
for (int i = 0; i < groupsData.Count; i++)
{
for (int j = i + 1; j < groupsData.Count; j++)
{
string labelA = parameter.GroupedParameterValues.Keys.ElementAt(i).ToString();
string labelB = parameter.GroupedParameterValues.Keys.ElementAt(j).ToString();
double pAdjValue = Math.Round(pValuesDunn[k].As<double>(), 3);
string pAdjString = pAdjValue <= 0.001 ? "<0.001" : pAdjValue.ToString("0.000");
MessageBox.Show(pAdjString);
string comparison = $"{labelA} vs {labelB}";
pairwisecomparisons.Add(new string[] { comparison, pAdjString });
parameter.FPairwise.Add(pAdjString);
k++;
}
}
return new AnovaTestResult
{
TestValue = hValue.ToString("0.000"),
PValue = pValueString,
PairwiseComparisons = pairwisecomparisons
};
}
}
i am constructing data frame but getting this error Python.Runtime.PythonException: 'The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()' any thoughts? here is my dataframe 0 1.0 7.0 1.0 7.0 1.0 7.0 1.0 9.0 1.0 9.0 .. ... 3.0 7.0 3.0 7.0 3.0 7.0 3.0 7.0 3.0 7.0
[84 rows x 1 columns]