C#写一个相关系数的算法

在C#中编写一个计算相关系数的算法可以使用Pearson相关系数公式。相关系数是用于衡量两个变量之间线性关系的统计量,取值范围为[-1, 1]。值为1表示完全正相关,-1表示完全负相关,0表示没有线性关系。

相关系数的公式

Pearson相关系数 rr 的计算公式如下:

r=n(xy)(x)(y)[nx2(x)2][ny2(y)2]r = \frac{n(\sum{xy}) - (\sum{x})(\sum{y})}{\sqrt{[n\sum{x^2} - (\sum{x})^2][n\sum{y^2} - (\sum{y})^2]}}

其中:

  • nn 是数据点的数量
  • xxyy 分别是两个变量的数据集

C#实现

以下是一个完整的C#代码示例,计算两个数据集之间的Pearson相关系数:

csharp
using System; class Program { static void Main(string[] args) { double[] x = { 1, 2, 3, 4, 5 }; double[] y = { 2, 3, 4, 5, 6 }; double correlation = CalculatePearsonCorrelation(x, y); Console.WriteLine("Pearson Correlation Coefficient: " + correlation); } static double CalculatePearsonCorrelation(double[] x, double[] y) { if (x.Length != y.Length) throw new ArgumentException("The arrays must be of the same length."); int n = x.Length; double sumX = 0, sumY = 0, sumXY = 0, sumXSquare = 0, sumYSquare = 0; for (int i = 0; i < n; i++) { sumX += x[i]; sumY += y[i]; sumXY += x[i] * y[i]; sumXSquare += x[i] * x[i]; sumYSquare += y[i] * y[i]; } double numerator = n * sumXY - sumX * sumY; double denominator = Math.Sqrt((n * sumXSquare - sumX * sumX) * (n * sumYSquare - sumY * sumY)); if (denominator == 0) return 0; return numerator / denominator; } }

代码说明

  1. 输入数据:两个数组 xy,表示两个变量的数据集。
  2. 检查数据长度:确保两个数组的长度相同。
  3. 计算所需的和:计算所有需要的和,包括 x\sum{x}y\sum{y}xy\sum{xy}x2\sum{x^2},和 y2\sum{y^2}。 4