DataTable Compute Variance否定结果

时间:2018-01-10 15:26:05

标签: c# datatable statistics

在我的DataTable中有一个类型为double的列。我想计算统计方差,但结果是否定的。怎么会这样?我猜,方差总是应该是积极的。谁能告诉我,这里有什么不对?

有谁知道System.Data.DataTable.Compute(Var(x), "")方法算法背后的公式?

我已使用以下代码对此进行了测试,并收到了不同的结果。这次(只是短样本)阳性结果,但与预期结果不同(手动:6025,155 ...自动对比:6165,275 ...)

DataTable dt = new DataTable();

dt.Columns.Add("x", typeof(System.Double));

// Sample Data
dt.Rows.Add(197.8);
dt.Rows.Add(90.1);
dt.Rows.Add(90.1);
dt.Rows.Add(152.3);
dt.Rows.Add(74.7);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(12);
dt.Rows.Add(12);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(12);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(25.5);
dt.Rows.Add(18.7);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(43.9);
dt.Rows.Add(59.3);
dt.Rows.Add(119.9);
dt.Rows.Add(32.3);
dt.Rows.Add(59.3);
dt.Rows.Add(168.7);
dt.Rows.Add(204);
dt.Rows.Add(214.1);
dt.Rows.Add(174.1);
dt.Rows.Add(196.3);
dt.Rows.Add(170.5);
dt.Rows.Add(171);
dt.Rows.Add(242.6);


dt.Columns.Add("x2", typeof(System.Double));

foreach (DataRow row in dt.Rows)
{
    row["x2"] = Math.Pow(double.Parse(row["x"].ToString()), 2);
}

double average = double.Parse(dt.Compute("AVG(x)", "").ToString());

double avg2 = double.Parse(dt.Compute("AVG(x2)", "").ToString());

double varianceManually = avg2 - Math.Pow(average, 2);

double varianceAutomatically = double.Parse(dt.Compute("Var(x)", "").ToString());

Console.WriteLine("Manually: " + varianceManually); // The same result as in MS Excel
Console.WriteLine("Automatically: " + varianceAutomatically);
Console.WriteLine("Difference: " + (varianceAutomatically - varianceManually));
Console.Read();

有关我的环境的一些信息:

  • MS Windows 7 64位Service Pack 1
  • AMD A10-7800 Radeon R7,12计算 核心4C + 8G 3.50 GHz
  • 16 GB RAM
  • Visual Studio 2010
  • .NET Framework 4.5.2

0 个答案:

没有答案