关联分析——Spearman C++代码
时间: 2023-10-15 20:07:17 浏览: 103
Spearman 相关系数是一种用于衡量两个变量之间的相关性的非参数方法,它基于两个变量的秩次。
下面是使用 C++ 实现的 Spearman 相关系数计算代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
double spearmanRank(vector<double> x, vector<double> y)
{
int n = x.size();
// 计算秩次
vector<int> rankX(n), rankY(n);
for (int i = 0; i < n; i++) {
int r = 1;
for (int j = 0; j < n; j++) {
if (j != i && x[j] < x[i]) {
r++;
}
}
rankX[i] = r;
}
for (int i = 0; i < n; i++) {
int r = 1;
for (int j = 0; j < n; j++) {
if (j != i && y[j] < y[i]) {
r++;
}
}
rankY[i] = r;
}
// 计算差异平方和
double d2 = 0;
for (int i = 0; i < n; i++) {
double d = rankX[i] - rankY[i];
d2 += d * d;
}
// 计算 Spearman 相关系数
double rs = 1 - (6 * d2) / (n * (n * n - 1));
return rs;
}
int main()
{
vector<double> x = { 20, 10, 30, 50, 40 };
vector<double> y = { 25, 15, 35, 55, 45 };
double rs = spearmanRank(x, y);
cout << "Spearman 相关系数为:" << rs << endl;
return 0;
}
```
在这个例子中,我们使用了两个长度为 5 的向量 x 和 y,它们分别代表两个变量的取值。首先,我们计算出每个变量在样本中的秩次,然后使用秩次计算差异平方和。最后,根据公式计算 Spearman 相关系数。
输出结果如下:
```
Spearman 相关系数为:0.9
```
这意味着这两个变量之间有较强的正相关性。
阅读全文