private double[,] ComputeCorrelationMatrix(List<double>[] ListValueDesc) { int NumDesc = ListValueDesc.Length; double[,] CorrelationMatrix = new double[NumDesc, NumDesc]; if (GlobalInfo.OptionsWindow.radioButtonMIC.Checked) { double[][] dataset1 = new double[NumDesc][]; string[] VarNames = new string[NumDesc]; for (int iDesc = 0; iDesc < NumDesc; iDesc++) { dataset1[iDesc] = new double[ListValueDesc[iDesc].Count]; Array.Copy(ListValueDesc[iDesc].ToArray(), dataset1[iDesc], ListValueDesc[iDesc].Count); VarNames[iDesc] = iDesc.ToString(); } data.Dataset data1 = new data.Dataset(dataset1, VarNames, 0); VarPairQueue Qu = new VarPairQueue(data1); for (int iDesc = 0; iDesc < NumDesc; iDesc++) for (int jDesc = 0; jDesc < NumDesc; jDesc++) { Qu.addPair(iDesc, jDesc); } Analysis ana = new Analysis(data1, Qu); AnalysisParameters param = new AnalysisParameters(); double resparam = param.commonValsThreshold; analysis.results.FullResult Full = new analysis.results.FullResult(); //List<analysis.results.BriefResult> Brief = new List<analysis.results.BriefResult>(); analysis.results.BriefResult Brief = new analysis.results.BriefResult(); java.lang.Class t = java.lang.Class.forName("analysis.results.BriefResult"); //java.lang.Class restype = null; ana.analyzePairs(t, param); // object o = (ana.varPairQueue().peek()); // ana.getClass(); // int resNum = ana.numResults(); analysis.results.Result[] res = ana.getSortedResults(); // double main = res[0].getMainScore(); for (int iDesc = 0; iDesc < NumDesc; iDesc++) for (int jDesc = 0; jDesc < NumDesc; jDesc++) { int X = int.Parse(res[jDesc + iDesc * NumDesc].getXVar()); int Y = int.Parse(res[jDesc + iDesc * NumDesc].getYVar()); CorrelationMatrix[X, Y] = res[jDesc + iDesc * NumDesc].getMainScore(); } } else { //return null; for (int iDesc = 0; iDesc < NumDesc; iDesc++) for (int jDesc = 0; jDesc < NumDesc; jDesc++) { try { if (GlobalInfo.OptionsWindow.radioButtonPearson.Checked) CorrelationMatrix[iDesc, jDesc] = (alglib.pearsoncorr2(ListValueDesc[iDesc].ToArray(), ListValueDesc[jDesc].ToArray())); else if (GlobalInfo.OptionsWindow.radioButtonSpearman.Checked) CorrelationMatrix[iDesc, jDesc] = (alglib.spearmancorr2(ListValueDesc[iDesc].ToArray(), ListValueDesc[jDesc].ToArray())); } catch { //Console.WriteLine("Input string is not a sequence of digits."); return null; } } } return CorrelationMatrix; }
public void DisplayMINE(List<double>[] ListValueDesc) { int NumDesc = ListValueDesc.Length; double[,] CorrelationMatrix = new double[NumDesc, NumDesc]; double[][] dataset1 = new double[NumDesc][]; string[] VarNames = new string[NumDesc]; for (int iDesc = 0; iDesc < NumDesc; iDesc++) { dataset1[iDesc] = new double[ListValueDesc[iDesc].Count]; Array.Copy(ListValueDesc[iDesc].ToArray(), dataset1[iDesc], ListValueDesc[iDesc].Count); VarNames[iDesc] = iDesc.ToString(); } data.Dataset data1 = new data.Dataset(dataset1, VarNames, 0); VarPairQueue Qu = new VarPairQueue(data1); for (int iDesc = 0; iDesc < NumDesc; iDesc++) for (int jDesc = 0; jDesc < iDesc; jDesc++) { Qu.addPair(iDesc, jDesc); } Analysis ana = new Analysis(data1, Qu); AnalysisParameters param = new AnalysisParameters(); double resparam = param.commonValsThreshold; // analysis.results.FullResult Full = new analysis.results.FullResult(); //List<analysis.results.BriefResult> Brief = new List<analysis.results.BriefResult>(); //analysis.results.BriefResult Brief = new analysis.results.BriefResult(); java.lang.Class t = java.lang.Class.forName("analysis.results.BriefResult"); //java.lang.Class restype = null; ana.analyzePairs(t, param); // object o = (ana.varPairQueue().peek()); // ana.getClass(); // int resNum = ana.numResults(); analysis.results.Result[] res = ana.getSortedResults(); List<string[]> ListValues = new List<string[]>(); List<string> NameX = CompleteScreening.ListDescriptors.GetListNameActives(); List<bool> ListIscolor = new List<bool>(); for (int Idx = 0; Idx < res.Length; Idx++) { ListValues.Add(res[Idx].toString().Split(',')); ListValues[Idx][0] = NameX[int.Parse(ListValues[Idx][0])]; ListValues[Idx][1] = NameX[int.Parse(ListValues[Idx][1])]; } string[] ListNames = res[0].getHeader().Split(','); ListNames[0] = "Descriptor A"; ListNames[1] = "Descriptor B"; for (int NIdx = 0; NIdx < ListNames.Length; NIdx++) { if (NIdx == 0) ListIscolor.Add(false); else if (NIdx == 1) ListIscolor.Add(false); else ListIscolor.Add(true); } cDisplayTable DisplayForTable = new cDisplayTable("MINE Analysis results", ListNames, ListValues, GlobalInfo, true); }
public void Run() { // define names string[] VarNames = new string[Input.Count]; double[][] dataset = new double[Input.Count][]; int Idx = 0; foreach (var item in Input) { dataset[Idx] = new double[item.Count]; Array.Copy(item.ToArray(), dataset[Idx], item.Count); VarNames[Idx++] = item.Name; } //// define data data.Dataset data_Set = new data.Dataset(dataset, VarNames, 0); analysis.VarPairQueue Qu = new analysis.VarPairQueue(data_Set); for(int Idx_0=0;Idx_0<this.Input.Count;Idx_0++) for (int Idx_1 = 0; Idx_1 <= Idx_0; Idx_1++) Qu.addPair(Idx_1,Idx_0); Analysis ana = new Analysis(data_Set, Qu); AnalysisParameters param = new AnalysisParameters(); double resparam = param.commonValsThreshold; java.lang.Class t = java.lang.Class.forName("analysis.results.FullResult"); if(this.Is_BriefReport) t = java.lang.Class.forName("analysis.results.BriefResult"); ana.analyzePairs(t, param); analysis.results.Result[] res = ana.getSortedResults(); List<string[]> ListValues = new List<string[]>(); List<bool> ListIscolor = new List<bool>(); for (Idx = 0; Idx < res.Length; Idx++) { ListValues.Add(res[Idx].toString().Split(',')); } string[] ListNames = res[0].getHeader().Split(','); this.Output = new cListExtendedTable(); for (int IdxTest = 2; IdxTest < ListNames.Length; IdxTest++) // loop over all the different type of results { // remove useless informations if (ListNames[IdxTest] == "MI via KDE") continue; if (ListNames[IdxTest] == "Fisher") continue; if (ListNames[IdxTest] == "last value") continue; if (ListNames[IdxTest] == "MAS found at (X)") continue; if (ListNames[IdxTest] == "MAS found at (Y)") continue; if (ListNames[IdxTest] == "MICfound at (Y)") continue; double[,] TmpTable = new double[VarNames.Length, VarNames.Length]; for (int i = 0; i < res.Length; i++) // loop over the different pairs { string TmpName0 = res[i].getXVar(); string TmpName1 = res[i].getYVar(); int Idx_var0 = 0; int Idx_var1 = 0; for (Idx_var0 = 0; Idx_var0 < VarNames.Length; Idx_var0++) if(VarNames[Idx_var0]==TmpName0) break; for (Idx_var1 = 0; Idx_var1 < VarNames.Length; Idx_var1++) if (VarNames[Idx_var1] == TmpName1) break; double Value=0; double.TryParse(res[i].toString().Split(',')[IdxTest], out Value); TmpTable[Idx_var0, Idx_var1] = TmpTable[Idx_var1, Idx_var0] = Value; } cExtendedTable NewTable = new cExtendedTable(TmpTable); NewTable.ListRowNames = new List<string>(); for (int i = 0; i < VarNames.Length; i++) { NewTable.ListRowNames.Add(VarNames[i]); NewTable[i].Name = VarNames[i]; if (CurrentScreening != null) { int IdxDesc = cGlobalInfo.CurrentScreening.ListDescriptors.GetDescriptorIndex(NewTable[i].Name); if (IdxDesc > -1) { NewTable[i].Tag = cGlobalInfo.CurrentScreening.ListDescriptors[IdxDesc]; } } } NewTable.Name = ListNames[IdxTest]; this.Output.Add(NewTable); } }