网上没找到,自己对付着写了一个,作用就是判断一个2列以上(含2列)的矩阵,是否有某2列存在线性相关性
/// <summary>
/// 检查矩阵的轶是否具有高相关性
/// </summary>
/// <param name="X">待检查的矩阵</param>
/// <returns>检查结果,如果有高相关性,返回true,否则返回false</returns>
private Boolean HasHighlyCorrelated(Matrix X)
{
Boolean flag = true;
Double rate = 0;
for (Int32 m = 0; m < X.Columns - 1; m++)
{
for (Int32 n = m + 1; n < X.Columns; n++)
{
rate = X[0,m] / X[0,n]; //记录第一行的2数的比率
for (int i = 1; i < X.Rows; i++)//以第一行为参照,从第二行开始比较
{
//如果2数比率和第一行不同
if ((X[i,m] / X[i,n]) / rate != 1)
{
flag = false;//则此2列无线性相关性
break;
}
}
if (flag)//如果此次比较的2列具有线性相关性,返回true
{
return true;
}
}
}
return false;
}
/// 检查矩阵的轶是否具有高相关性
/// </summary>
/// <param name="X">待检查的矩阵</param>
/// <returns>检查结果,如果有高相关性,返回true,否则返回false</returns>
private Boolean HasHighlyCorrelated(Matrix X)
{
Boolean flag = true;
Double rate = 0;
for (Int32 m = 0; m < X.Columns - 1; m++)
{
for (Int32 n = m + 1; n < X.Columns; n++)
{
rate = X[0,m] / X[0,n]; //记录第一行的2数的比率
for (int i = 1; i < X.Rows; i++)//以第一行为参照,从第二行开始比较
{
//如果2数比率和第一行不同
if ((X[i,m] / X[i,n]) / rate != 1)
{
flag = false;//则此2列无线性相关性
break;
}
}
if (flag)//如果此次比较的2列具有线性相关性,返回true
{
return true;
}
}
}
return false;
}