在我的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();
有关我的环境的一些信息: