/Epi Info 7/Epi.UnitTests/AnalysisTest.cs

# · C# · 501 lines · 490 code · 11 blank · 0 comment · 17 complexity · 65687cf1dd977772797534c034687f6e MD5 · raw file

  1. using System;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using System.IO;
  4. using Epi.Windows;
  5. using EpiDashboard;
  6. using Epi.Core;
  7. using StatisticsRepository;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. namespace Epi.UnitTests
  11. {
  12. [TestClass]
  13. public class AnalysisTest : StatisticsTests
  14. {
  15. [TestMethod]
  16. public void MeansTestTwoValues()
  17. {
  18. int iterations = 100;
  19. var reader = new StreamReader(File.OpenRead(@"..\..\Data\MeansTwoValueResults.csv"));
  20. int linesinfile = iterations;
  21. double[] obs0s = new double[linesinfile];
  22. double[] obs1s = new double[linesinfile];
  23. double[] total0s = new double[linesinfile];
  24. double[] total1s = new double[linesinfile];
  25. double[] mean0s = new double[linesinfile];
  26. double[] mean1s = new double[linesinfile];
  27. double[] var0s = new double[linesinfile];
  28. double[] var1s = new double[linesinfile];
  29. double[] sd0s = new double[linesinfile];
  30. double[] sd1s = new double[linesinfile];
  31. double[] min0s = new double[linesinfile];
  32. double[] min1s = new double[linesinfile];
  33. double[] q10s = new double[linesinfile];
  34. double[] q11s = new double[linesinfile];
  35. double[] median0s = new double[linesinfile];
  36. double[] median1s = new double[linesinfile];
  37. double[] q30s = new double[linesinfile];
  38. double[] q31s = new double[linesinfile];
  39. double[] max0s = new double[linesinfile];
  40. double[] max1s = new double[linesinfile];
  41. double[] mode0s = new double[linesinfile];
  42. double[] mode1s = new double[linesinfile];
  43. double[] poolmeans = new double[linesinfile];
  44. double[] poollcls = new double[linesinfile];
  45. double[] poolucls = new double[linesinfile];
  46. double[] sattermeans = new double[linesinfile];
  47. double[] satterlcls = new double[linesinfile];
  48. double[] satterucls = new double[linesinfile];
  49. double[] sds = new double[linesinfile];
  50. double[] equaldfs = new double[linesinfile];
  51. double[] equalts = new double[linesinfile];
  52. double[] equaltps = new double[linesinfile];
  53. double[] unequaldfs = new double[linesinfile];
  54. double[] unequalts = new double[linesinfile];
  55. double[] unequaltps = new double[linesinfile];
  56. double[] betweensss = new double[linesinfile];
  57. double[] withinsss = new double[linesinfile];
  58. double[] totalsss = new double[linesinfile];
  59. double[] betweendfs = new double[linesinfile];
  60. double[] withindfs = new double[linesinfile];
  61. double[] totaldfs = new double[linesinfile];
  62. double[] betweenmss = new double[linesinfile];
  63. double[] withinmss = new double[linesinfile];
  64. double[] fanovas = new double[linesinfile];
  65. double[] pfanovas = new double[linesinfile];
  66. double[] dfbarts = new double[linesinfile];
  67. double[] chibarts = new double[linesinfile];
  68. double[] chipbarts = new double[linesinfile];
  69. double[] chikwts = new double[linesinfile];
  70. double[] dfkwts = new double[linesinfile];
  71. double[] pchikwts = new double[linesinfile];
  72. int i = 0;
  73. while (!reader.EndOfStream)
  74. {
  75. var line = reader.ReadLine();
  76. var values = line.Split(',');
  77. bool rv = Double.TryParse(values[1], out obs0s[i]);
  78. rv = Double.TryParse(values[2], out obs1s[i]);
  79. rv = Double.TryParse(values[3], out total0s[i]);
  80. rv = Double.TryParse(values[4], out total1s[i]);
  81. rv = Double.TryParse(values[5], out mean0s[i]);
  82. rv = Double.TryParse(values[6], out mean1s[i]);
  83. rv = Double.TryParse(values[7], out var0s[i]);
  84. rv = Double.TryParse(values[8], out var1s[i]);
  85. rv = Double.TryParse(values[9], out sd0s[i]);
  86. rv = Double.TryParse(values[10], out sd1s[i]);
  87. rv = Double.TryParse(values[11], out min0s[i]);
  88. rv = Double.TryParse(values[12], out min1s[i]);
  89. rv = Double.TryParse(values[13], out q10s[i]);
  90. rv = Double.TryParse(values[14], out q11s[i]);
  91. rv = Double.TryParse(values[15], out median0s[i]);
  92. rv = Double.TryParse(values[16], out median1s[i]);
  93. rv = Double.TryParse(values[17], out q30s[i]);
  94. rv = Double.TryParse(values[18], out q31s[i]);
  95. rv = Double.TryParse(values[19], out max0s[i]);
  96. rv = Double.TryParse(values[20], out max1s[i]);
  97. rv = Double.TryParse(values[21], out mode0s[i]);
  98. rv = Double.TryParse(values[22], out mode1s[i]);
  99. rv = Double.TryParse(values[23], out poolmeans[i]);
  100. rv = Double.TryParse(values[24], out poollcls[i]);
  101. rv = Double.TryParse(values[25], out poolucls[i]);
  102. rv = Double.TryParse(values[26], out sattermeans[i]);
  103. rv = Double.TryParse(values[27], out satterlcls[i]);
  104. rv = Double.TryParse(values[28], out satterucls[i]);
  105. rv = Double.TryParse(values[29], out sds[i]);
  106. rv = Double.TryParse(values[30], out equaldfs[i]);
  107. rv = Double.TryParse(values[31], out equalts[i]);
  108. rv = Double.TryParse(values[32], out equaltps[i]);
  109. rv = Double.TryParse(values[33], out unequaldfs[i]);
  110. rv = Double.TryParse(values[34], out unequalts[i]);
  111. rv = Double.TryParse(values[35], out unequaltps[i]);
  112. rv = Double.TryParse(values[36], out betweensss[i]);
  113. rv = Double.TryParse(values[37], out withinsss[i]);
  114. rv = Double.TryParse(values[38], out totalsss[i]);
  115. rv = Double.TryParse(values[39], out betweendfs[i]);
  116. rv = Double.TryParse(values[40], out withindfs[i]);
  117. rv = Double.TryParse(values[41], out totaldfs[i]);
  118. rv = Double.TryParse(values[42], out betweenmss[i]);
  119. rv = Double.TryParse(values[43], out withinmss[i]);
  120. rv = Double.TryParse(values[44], out fanovas[i]);
  121. rv = Double.TryParse(values[45], out pfanovas[i]);
  122. rv = Double.TryParse(values[46], out dfbarts[i]);
  123. rv = Double.TryParse(values[47], out chibarts[i]);
  124. rv = Double.TryParse(values[48], out chipbarts[i]);
  125. rv = Double.TryParse(values[49], out chikwts[i]);
  126. rv = Double.TryParse(values[50], out dfkwts[i]);
  127. rv = Double.TryParse(values[51], out pchikwts[i]);
  128. i++;
  129. if (i == linesinfile)
  130. break;
  131. }
  132. EpiDashboard.MeansParameters Parameters = new MeansParameters();
  133. Parameters.CrosstabVariableName = "crosstabvar2";
  134. Parameters.ColumnNames.Add("meanvar");
  135. Parameters.ColumnNames.Add("crosstabvar2");
  136. Parameters.IncludeFullSummaryStatistics = true;
  137. for (int j = 0; j < iterations; j++)
  138. {
  139. getData("MeansTestData", "iteration = " + j);
  140. Parameters.CustomFilter = "iteration = " + j;
  141. Dictionary<DataTable, List<DescriptiveStatistics>> stratifiedFrequencyTables = DashboardHelper.GenerateFrequencyTable(Parameters);
  142. foreach (object key in stratifiedFrequencyTables.Keys)
  143. {
  144. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].observations, obs0s[j]);
  145. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].observations, obs1s[j]);
  146. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].sum.Value, total0s[j], 0.0001);
  147. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].sum.Value, total1s[j], 0.0001);
  148. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].mean.Value, mean0s[j], 0.0001);
  149. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].mean.Value, mean1s[j], 0.0001);
  150. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].variance.Value, var0s[j], 0.0001);
  151. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].variance.Value, var1s[j], 0.0001);
  152. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].stdDev.Value, sd0s[j], 0.0001);
  153. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].stdDev.Value, sd1s[j], 0.0001);
  154. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].min.Value, min0s[j], 0.0001);
  155. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].min.Value, min1s[j], 0.0001);
  156. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].q1.Value, q10s[j], 0.0001);
  157. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].q1.Value, q11s[j], 0.0001);
  158. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].median.Value, median0s[j], 0.0001);
  159. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].median.Value, median1s[j], 0.0001);
  160. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].q3.Value, q30s[j], 0.0001);
  161. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].q3.Value, q31s[j], 0.0001);
  162. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].max.Value, max0s[j], 0.0001);
  163. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].max.Value, max1s[j], 0.0001);
  164. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].mode.Value, mode0s[j], 0.0001);
  165. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].mode.Value, mode1s[j], 0.0001);
  166. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].meansDiff, poolmeans[j], 0.0001);
  167. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].equalLCLMean, poollcls[j], 0.0001);
  168. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].equalUCLMean, poolucls[j], 0.0001);
  169. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].meansDiff, sattermeans[j], 0.0001);
  170. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].unequalLCLMean, satterlcls[j], 0.001);
  171. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].unequalUCLMean, satterucls[j], 0.001);
  172. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].stdDevDiff, sds[j], 0.0001);
  173. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].df, equaldfs[j], 0.0001);
  174. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].tStatistic, equalts[j], 0.0001);
  175. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].pEqual, equaltps[j], 0.0001);
  176. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].SatterthwaiteDF, unequaldfs[j], 0.0001);
  177. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].tStatisticUnequal, unequalts[j], 0.0001);
  178. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].pUneqal, unequaltps[j], 0.0001);
  179. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssBetween.Value, betweensss[j], 0.0001);
  180. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssWithin.Value, withinsss[j], 0.0001);
  181. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssBetween.Value + stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssWithin.Value, totalsss[j], 0.0001);
  182. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, betweendfs[j], 0.0001);
  183. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfWithin.Value, withindfs[j], 0.0001);
  184. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value + stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfWithin.Value, totaldfs[j], 0.0001);
  185. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].msBetween.Value, betweenmss[j], 0.0001);
  186. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].msWithin.Value, withinmss[j], 0.0001);
  187. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].fStatistic.Value, fanovas[j], 0.0001);
  188. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].anovaPValue.Value, pfanovas[j], 0.0001);
  189. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, dfbarts[j], 0.0001);
  190. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].chiSquare.Value, chibarts[j], 0.0001);
  191. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].bartlettPValue.Value, chipbarts[j], 0.0001);
  192. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].kruskalWallisH.Value, chikwts[j], 0.0001);
  193. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, dfkwts[j], 0.0001);
  194. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].kruskalPValue.Value, pchikwts[j], 0.0001);
  195. }
  196. }
  197. }
  198. [TestMethod]
  199. public void MeansTestFourValues()
  200. {
  201. int iterations = 100;
  202. var reader = new StreamReader(File.OpenRead(@"..\..\Data\MeansFourValueResults.csv"));
  203. int linesinfile = iterations;
  204. double[] obs0s = new double[linesinfile];
  205. double[] obs1s = new double[linesinfile];
  206. double[] obs2s = new double[linesinfile];
  207. double[] obs3s = new double[linesinfile];
  208. double[] total0s = new double[linesinfile];
  209. double[] total1s = new double[linesinfile];
  210. double[] total2s = new double[linesinfile];
  211. double[] total3s = new double[linesinfile];
  212. double[] mean0s = new double[linesinfile];
  213. double[] mean1s = new double[linesinfile];
  214. double[] mean2s = new double[linesinfile];
  215. double[] mean3s = new double[linesinfile];
  216. double[] var0s = new double[linesinfile];
  217. double[] var1s = new double[linesinfile];
  218. double[] var2s = new double[linesinfile];
  219. double[] var3s = new double[linesinfile];
  220. double[] sd0s = new double[linesinfile];
  221. double[] sd1s = new double[linesinfile];
  222. double[] sd2s = new double[linesinfile];
  223. double[] sd3s = new double[linesinfile];
  224. double[] min0s = new double[linesinfile];
  225. double[] min1s = new double[linesinfile];
  226. double[] min2s = new double[linesinfile];
  227. double[] min3s = new double[linesinfile];
  228. double[] q10s = new double[linesinfile];
  229. double[] q11s = new double[linesinfile];
  230. double[] q12s = new double[linesinfile];
  231. double[] q13s = new double[linesinfile];
  232. double[] median0s = new double[linesinfile];
  233. double[] median1s = new double[linesinfile];
  234. double[] median2s = new double[linesinfile];
  235. double[] median3s = new double[linesinfile];
  236. double[] q30s = new double[linesinfile];
  237. double[] q31s = new double[linesinfile];
  238. double[] q32s = new double[linesinfile];
  239. double[] q33s = new double[linesinfile];
  240. double[] max0s = new double[linesinfile];
  241. double[] max1s = new double[linesinfile];
  242. double[] max2s = new double[linesinfile];
  243. double[] max3s = new double[linesinfile];
  244. double[] mode0s = new double[linesinfile];
  245. double[] mode1s = new double[linesinfile];
  246. double[] mode2s = new double[linesinfile];
  247. double[] mode3s = new double[linesinfile];
  248. double[] betweensss = new double[linesinfile];
  249. double[] withinsss = new double[linesinfile];
  250. double[] totalsss = new double[linesinfile];
  251. double[] betweendfs = new double[linesinfile];
  252. double[] withindfs = new double[linesinfile];
  253. double[] totaldfs = new double[linesinfile];
  254. double[] betweenmss = new double[linesinfile];
  255. double[] withinmss = new double[linesinfile];
  256. double[] fanovas = new double[linesinfile];
  257. double[] pfanovas = new double[linesinfile];
  258. double[] dfbarts = new double[linesinfile];
  259. double[] chibarts = new double[linesinfile];
  260. double[] chipbarts = new double[linesinfile];
  261. double[] chikwts = new double[linesinfile];
  262. double[] dfkwts = new double[linesinfile];
  263. double[] pchikwts = new double[linesinfile];
  264. int i = 0;
  265. while (!reader.EndOfStream)
  266. {
  267. var line = reader.ReadLine();
  268. var values = line.Split(',');
  269. bool rv = Double.TryParse(values[1], out obs0s[i]);
  270. rv = Double.TryParse(values[2], out obs1s[i]);
  271. rv = Double.TryParse(values[3], out obs2s[i]);
  272. rv = Double.TryParse(values[4], out obs3s[i]);
  273. rv = Double.TryParse(values[5], out total0s[i]);
  274. rv = Double.TryParse(values[6], out total1s[i]);
  275. rv = Double.TryParse(values[7], out total2s[i]);
  276. rv = Double.TryParse(values[8], out total3s[i]);
  277. rv = Double.TryParse(values[9], out mean0s[i]);
  278. rv = Double.TryParse(values[10], out mean1s[i]);
  279. rv = Double.TryParse(values[11], out mean2s[i]);
  280. rv = Double.TryParse(values[12], out mean3s[i]);
  281. rv = Double.TryParse(values[13], out var0s[i]);
  282. rv = Double.TryParse(values[14], out var1s[i]);
  283. rv = Double.TryParse(values[15], out var2s[i]);
  284. rv = Double.TryParse(values[16], out var3s[i]);
  285. rv = Double.TryParse(values[17], out sd0s[i]);
  286. rv = Double.TryParse(values[18], out sd1s[i]);
  287. rv = Double.TryParse(values[19], out sd2s[i]);
  288. rv = Double.TryParse(values[20], out sd3s[i]);
  289. rv = Double.TryParse(values[21], out min0s[i]);
  290. rv = Double.TryParse(values[22], out min1s[i]);
  291. rv = Double.TryParse(values[23], out min2s[i]);
  292. rv = Double.TryParse(values[24], out min3s[i]);
  293. rv = Double.TryParse(values[25], out q10s[i]);
  294. rv = Double.TryParse(values[26], out q11s[i]);
  295. rv = Double.TryParse(values[27], out q12s[i]);
  296. rv = Double.TryParse(values[28], out q13s[i]);
  297. rv = Double.TryParse(values[29], out median0s[i]);
  298. rv = Double.TryParse(values[30], out median1s[i]);
  299. rv = Double.TryParse(values[31], out median2s[i]);
  300. rv = Double.TryParse(values[32], out median3s[i]);
  301. rv = Double.TryParse(values[33], out q30s[i]);
  302. rv = Double.TryParse(values[34], out q31s[i]);
  303. rv = Double.TryParse(values[35], out q32s[i]);
  304. rv = Double.TryParse(values[36], out q33s[i]);
  305. rv = Double.TryParse(values[37], out max0s[i]);
  306. rv = Double.TryParse(values[38], out max1s[i]);
  307. rv = Double.TryParse(values[39], out max2s[i]);
  308. rv = Double.TryParse(values[40], out max3s[i]);
  309. rv = Double.TryParse(values[41], out mode0s[i]);
  310. rv = Double.TryParse(values[42], out mode1s[i]);
  311. rv = Double.TryParse(values[43], out mode2s[i]);
  312. rv = Double.TryParse(values[44], out mode3s[i]);
  313. rv = Double.TryParse(values[45], out betweensss[i]);
  314. rv = Double.TryParse(values[46], out withinsss[i]);
  315. rv = Double.TryParse(values[47], out totalsss[i]);
  316. rv = Double.TryParse(values[48], out betweendfs[i]);
  317. rv = Double.TryParse(values[49], out withindfs[i]);
  318. rv = Double.TryParse(values[50], out totaldfs[i]);
  319. rv = Double.TryParse(values[51], out betweenmss[i]);
  320. rv = Double.TryParse(values[52], out withinmss[i]);
  321. rv = Double.TryParse(values[53], out fanovas[i]);
  322. rv = Double.TryParse(values[54], out pfanovas[i]);
  323. rv = Double.TryParse(values[55], out dfbarts[i]);
  324. rv = Double.TryParse(values[56], out chibarts[i]);
  325. rv = Double.TryParse(values[57], out chipbarts[i]);
  326. rv = Double.TryParse(values[58], out chikwts[i]);
  327. rv = Double.TryParse(values[59], out dfkwts[i]);
  328. rv = Double.TryParse(values[60], out pchikwts[i]);
  329. i++;
  330. if (i == linesinfile)
  331. break;
  332. }
  333. EpiDashboard.MeansParameters Parameters = new MeansParameters();
  334. Parameters.CrosstabVariableName = "crosstabvar4";
  335. Parameters.ColumnNames.Add("meanvar");
  336. Parameters.ColumnNames.Add("crosstabvar4");
  337. Parameters.IncludeFullSummaryStatistics = true;
  338. for (int j = 0; j < iterations; j++)
  339. {
  340. getData("MeansTestData", "iteration = " + j);
  341. Parameters.CustomFilter = "iteration = " + j;
  342. Dictionary<DataTable, List<DescriptiveStatistics>> stratifiedFrequencyTables = DashboardHelper.GenerateFrequencyTable(Parameters);
  343. foreach (object key in stratifiedFrequencyTables.Keys)
  344. {
  345. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].observations, obs0s[j]);
  346. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].observations, obs1s[j]);
  347. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].observations, obs2s[j]);
  348. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].observations, obs3s[j]);
  349. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].sum.Value, total0s[j], 0.0001);
  350. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].sum.Value, total1s[j], 0.0001);
  351. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].sum.Value, total2s[j], 0.0001);
  352. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].sum.Value, total3s[j], 0.0001);
  353. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].mean.Value, mean0s[j], 0.0001);
  354. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].mean.Value, mean1s[j], 0.0001);
  355. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].mean.Value, mean2s[j], 0.0001);
  356. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].mean.Value, mean3s[j], 0.0001);
  357. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].variance.Value, var0s[j], 0.0001);
  358. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].variance.Value, var1s[j], 0.0001);
  359. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].variance.Value, var2s[j], 0.0001);
  360. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].variance.Value, var3s[j], 0.0001);
  361. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].stdDev.Value, sd0s[j], 0.0001);
  362. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].stdDev.Value, sd1s[j], 0.0001);
  363. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].stdDev.Value, sd2s[j], 0.0001);
  364. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].stdDev.Value, sd3s[j], 0.0001);
  365. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].min.Value, min0s[j], 0.0001);
  366. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].min.Value, min1s[j], 0.0001);
  367. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].min.Value, min2s[j], 0.0001);
  368. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].min.Value, min3s[j], 0.0001);
  369. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].q1.Value, q10s[j], 0.0001);
  370. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].q1.Value, q11s[j], 0.0001);
  371. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].q1.Value, q12s[j], 0.0001);
  372. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].q1.Value, q13s[j], 0.0001);
  373. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].median.Value, median0s[j], 0.0001);
  374. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].median.Value, median1s[j], 0.0001);
  375. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].median.Value, median2s[j], 0.0001);
  376. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].median.Value, median3s[j], 0.0001);
  377. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].q3.Value, q30s[j], 0.0001);
  378. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].q3.Value, q31s[j], 0.0001);
  379. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].q3.Value, q32s[j], 0.0001);
  380. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].q3.Value, q33s[j], 0.0001);
  381. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].max.Value, max0s[j], 0.0001);
  382. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].max.Value, max1s[j], 0.0001);
  383. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].max.Value, max2s[j], 0.0001);
  384. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].max.Value, max3s[j], 0.0001);
  385. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].mode.Value, mode0s[j], 0.0001);
  386. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][1].mode.Value, mode1s[j], 0.0001);
  387. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][2].mode.Value, mode2s[j], 0.0001);
  388. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][3].mode.Value, mode3s[j], 0.0001);
  389. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssBetween.Value, betweensss[j], 0.0001);
  390. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssWithin.Value, withinsss[j], 0.0001);
  391. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssBetween.Value + stratifiedFrequencyTables[(System.Data.DataTable)key][0].ssWithin.Value, totalsss[j], 0.0001);
  392. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, betweendfs[j], 0.0001);
  393. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfWithin.Value, withindfs[j], 0.0001);
  394. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value + stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfWithin.Value, totaldfs[j], 0.0001);
  395. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].msBetween.Value, betweenmss[j], 0.0001);
  396. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].msWithin.Value, withinmss[j], 0.0001);
  397. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].fStatistic.Value, fanovas[j], 0.0001);
  398. if (pfanovas[j] < 0.001)
  399. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].anovaPValue.Value, pfanovas[j], 0.0001);
  400. else if (pfanovas[j] < 0.01)
  401. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].anovaPValue.Value, pfanovas[j], 0.001);
  402. else if (pfanovas[j] < 0.1)
  403. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].anovaPValue.Value, pfanovas[j], 0.01);
  404. else
  405. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].anovaPValue.Value, pfanovas[j], 0.1);
  406. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, dfbarts[j], 0.0001);
  407. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].chiSquare.Value, chibarts[j], 0.0001);
  408. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].bartlettPValue.Value, chipbarts[j], 0.0001);
  409. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].kruskalWallisH.Value, chikwts[j], 0.0001);
  410. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].dfBetween.Value, dfkwts[j], 0.0001);
  411. Assert.AreEqual(stratifiedFrequencyTables[(System.Data.DataTable)key][0].kruskalPValue.Value, pchikwts[j], 0.0001);
  412. }
  413. }
  414. }
  415. [TestMethod]
  416. public void TwoByTwoTest()
  417. {
  418. int iterations = 100;
  419. StatisticsRepository.cTable cTable = new StatisticsRepository.cTable();
  420. var reader = new StreamReader(File.OpenRead(@"..\..\Data\TwoBy2Stats.csv"));
  421. int linesinfile = iterations;
  422. double[] chisqs = new double[linesinfile];
  423. double[] chisqps = new double[linesinfile];
  424. double[] mhchisqs = new double[linesinfile];
  425. double[] mhchisqps = new double[linesinfile];
  426. double[] yateschisqs = new double[linesinfile];
  427. double[] yateschisqps = new double[linesinfile];
  428. double[] ors = new double[linesinfile];
  429. double[] orlowers = new double[linesinfile];
  430. double[] oruppers = new double[linesinfile];
  431. double[] rrs = new double[linesinfile];
  432. double[] rrlowers = new double[linesinfile];
  433. double[] rruppers = new double[linesinfile];
  434. double[] fisherlowers = new double[linesinfile];
  435. double[] fisheruppers = new double[linesinfile];
  436. double[] fisher1s = new double[linesinfile];
  437. double[] fisher2s = new double[linesinfile];
  438. int i = 0;
  439. while (!reader.EndOfStream)
  440. {
  441. var line = reader.ReadLine();
  442. var values = line.Split(',');
  443. bool rv = Double.TryParse(values[1], out chisqs[i]);
  444. rv = Double.TryParse(values[2], out chisqps[i]);
  445. rv = Double.TryParse(values[3], out mhchisqs[i]);
  446. rv = Double.TryParse(values[4], out mhchisqps[i]);
  447. rv = Double.TryParse(values[5], out yateschisqs[i]);
  448. rv = Double.TryParse(values[6], out yateschisqps[i]);
  449. rv = Double.TryParse(values[7], out ors[i]);
  450. rv = Double.TryParse(values[8], out orlowers[i]);
  451. rv = Double.TryParse(values[9], out oruppers[i]);
  452. rv = Double.TryParse(values[10], out rrs[i]);
  453. rv = Double.TryParse(values[11], out rrlowers[i]);
  454. rv = Double.TryParse(values[12], out rruppers[i]);
  455. rv = Double.TryParse(values[13], out fisherlowers[i]);
  456. rv = Double.TryParse(values[14], out fisheruppers[i]);
  457. rv = Double.TryParse(values[15], out fisher1s[i]);
  458. rv = Double.TryParse(values[16], out fisher2s[i]);
  459. i++;
  460. if (i == linesinfile)
  461. break;
  462. }
  463. for (int j = 0; j < iterations; j++)
  464. {
  465. getData("LogisticTestData", "iteration = " + j);
  466. int yy = mainTable.Select("depvar = 1 and indepvar1 = 1").Length;
  467. int yn = mainTable.Select("depvar = 1 and indepvar1 = 0").Length;
  468. int ny = mainTable.Select("depvar = 0 and indepvar1 = 1").Length;
  469. int nn= mainTable.Select("depvar = 0 and indepvar1 = 0").Length;
  470. StatisticsRepository.cTable.SingleTableResults singleTableResults = cTable.SigTable((double)yy, (double)yn, (double)ny, (double)nn, 0.95);
  471. Assert.AreEqual(singleTableResults.ChiSquareUncorrectedVal, chisqs[j], 0.0001);
  472. Assert.AreEqual(singleTableResults.ChiSquareUncorrected2P, chisqps[j], 0.0001);
  473. Assert.AreEqual(singleTableResults.ChiSquareMantelVal, mhchisqs[j], 0.0001);
  474. Assert.AreEqual(singleTableResults.ChiSquareMantel2P, mhchisqps[j], 0.0001);
  475. Assert.AreEqual(singleTableResults.ChiSquareYatesVal, yateschisqs[j], 0.0001);
  476. Assert.AreEqual(singleTableResults.ChiSquareYates2P, yateschisqps[j], 0.0001);
  477. Assert.AreEqual(singleTableResults.OddsRatioEstimate.Value, ors[j], 0.0001);
  478. Assert.AreEqual(singleTableResults.OddsRatioLower.Value, orlowers[j], 0.0001);
  479. Assert.AreEqual(singleTableResults.OddsRatioUpper.Value, oruppers[j], 0.001);
  480. Assert.AreEqual(singleTableResults.RiskRatioEstimate.Value, rrs[j], 0.0001);
  481. Assert.AreEqual(singleTableResults.RiskRatioLower.Value, rrlowers[j], 0.0001);
  482. Assert.AreEqual(singleTableResults.RiskRatioUpper.Value, rruppers[j], 0.0001);
  483. Assert.AreEqual(singleTableResults.OddsRatioMLEFisherLower, fisherlowers[j], 0.0001);
  484. Assert.AreEqual(singleTableResults.OddsRatioMLEFisherUpper, fisheruppers[j], 0.0001);
  485. Assert.AreEqual(singleTableResults.FisherExactP, fisher1s[j], 0.0001);
  486. Assert.AreEqual(singleTableResults.FisherExact2P, fisher2s[j], 0.0001);
  487. }
  488. }
  489. }
  490. }