相关性模型——相关系数

个人学习笔记,课程为数学建模清风付费课程

目录

一、模型介绍

1.1总体和样本

1.2皮尔逊Pearson相关系数 

1.2.1矩阵散点图

 1.2.2皮尔逊相关系数的计算

1.2.3总体皮尔逊Pearson相关系数

1.2.4样本皮尔逊Pearson相关系数

1.2.5相关性可视化

1.2.6关于皮尔逊相关系数的一些理解误区

1.2.7容易忽视和犯错的点 

1.2.8对相关系数大小的解释 

1.2.9例题

1.2.10如何美化相关系数表

1.2.11对皮尔逊相关系数进行假设检验 

1.2.12皮尔逊相关系数假设检验的条件

1.3描述性统计 

1.4数据分析工具

1.4.1EXCEL

1.4.2SPSS

1.5正态分布JB检验(大样本 n>30) 

​1.5.1偏度和峰度

1.5.2MATLAB结果

1.6Shapiro-wilk检验(小样本3≤n≤50)

1.7另一种常见的方法:Q-Q图 

1.8斯皮尔曼spearman相关系数

1.8.1定义

1.8.2另一种斯皮尔曼spearman相关系数的定义

1.8.3MATLAB中计算斯皮尔曼相关系数

1.8.4斯皮尔曼相关系数的假设检验

1.8.4.1小样本情况

1.8.4.2大样本情况下​编辑

1.8.4.3直接给出相关系数和p值

1.9两种相关系数的对比

二、补充——正态分布均值的假设检验

2.1例题

2.1.1题目

2.1.2求解 

2.2单侧检验的例子

​2.3从Z检验到t检验

2.3.1Z检验

2.3.2t检验(用的较多)

2.3.2.1定义

2.3.2.2例题 

2.4两个正态总体均值差的检验

2.4.1例题

2.4.2逐对比较法 

2.4.3区别两个正态总体均值差的检验

2.5分布拟合检验

2.6卡方分布的概率密度函数 

2.7教材例子 

2.8表格总结



一、模型介绍

1.1总体和样本

总体 —— 所要考察对象的全部个体叫做总体。
我们总是希望得到总体数据的一些特征(例如均值方差等)
样本 —— 从总体中所抽取的一部分个体叫做总体的一个样本。
       计算这些抽取的样本的统计量来估计总体的统计量:
       例如使用 样本均值 样本标准差 来估计 总体的均值(平均 水平)和总体的标准差(偏离程度)
例子:
       我国 10 年进行一次的人口普查得到的数据就是总体数据。
       大家自己在 QQ 群发问卷叫同学帮忙填写得到的数据就是样本数据。

1.2皮尔逊Pearson相关系数 

1.2.1矩阵散点图

在计算皮尔逊相关系数之前 , 一定要做出散点图来看两组变量之间是否有线性关系
这里使用 Spss 比较方便 图形 旧对话框 散点图 / 点图 矩阵散点图

%% 计算各列之间的相关系数
% 在计算皮尔逊相关系数之前,一定要做出散点图来看两组变量之间是否有线性关系
% 这里使用Spss比较方便: 图形 - 旧对话框 - 散点图/点图 - 矩阵散点图

R = corrcoef(Test)   % correlation coefficient

 1.2.2皮尔逊相关系数的计算

1.2.3总体皮尔逊Pearson相关系数

直观理解协方差: 如果 X Y 变化方向相同,即当 X 大于(小于)其均值时, Y 也大于(小于)其均值,在这两种情况下,乘积为正。如果X Y 的变化方向一直保持相同,则协方差为正;同理,如果X Y 变化方向一直相反,则协方差为负;如果X Y 变化方向之间相互无规律,即分子中有的项为正,有的项为负,那么累加后正负抵消。

注意:协方差的大小和两个变量的量纲有关,因此不适合做比较。 

 皮尔逊相关系数也可以看成是剔除了两个变量量纲影响,即将X Y标准化后的协方差。

1.2.4样本皮尔逊Pearson相关系数

1.2.5相关性可视化

通过绘制散点图可以很容易地判定两个数据对象 x y 之间的相关性。

1.2.6关于皮尔逊相关系数的一些理解误区

这里的相关系数只是用来衡量两个变量线性相关程度的指标; 也就是说,你必须先确认这两个变量是线性相关的,然后这个相关系数才能 告诉你他俩相关程度如何。

1.2.7容易忽视和犯错的点 

1 )非线性相关也会导致线性相关系数很大,例如图 2
2 )离群点对相关系数的影响很大,例如图 3 ,去掉离群点后,相关系数为 0.98
3 )如果两个变量的相关系数很大也不能说明两者相关,例如图 4 ,可能是受到
了异常值的影响。
4 )相关系数计算结果为 0 ,只能说不是线性相关,但说不定会有更复杂的相关
关系(非线性相关),例如图 5

1.2.8对相关系数大小的解释 

事实上,比起相关系数的大小,我们往往更关注的是显著性。 (假设检验)

1.2.9例题

1.2.10如何美化相关系数表

1.2.11对皮尔逊相关系数进行假设检验 

更好用的方法:p值判断法

0.5*  90%显著性

0.5** 95%显著性

0.5*** 99%显著性

( *** p<0.01, ** p<0.05, * p<0.1)

计算各列之间的相关系数以及p值 

 1.2.12皮尔逊相关系数假设检验的条件

第一, 实验数据通常假设是成对的来自于正态分布的总体。 因为我们在求皮尔逊相关性系数以后,通常还会用t 检验之类的方法来进行皮尔逊相关性系数检验,而 t 检验是基于数据呈正态分布的假设的。
第二, 实验数据之间的差距不能太大。 皮尔逊相关性系数受异常值的影响比较大。
第三:每组样本之间是独立抽样的。 构造 t 统计量时需要用到。

1.3描述性统计 

matlab中基本统计量的函数(一般用标粗的):

这些函数都是默认按列计算 ,如果令第二个参数为1,则变为按行计算

这些函数根据参数的不同有多种用法,我们这里用到的只是其最简单的功能,但这对建模已经足够了,需要用到高级功能的同学可以百度这些函数的用法:
%% 统计描述
MIN = min(Test);  % 每一列的最小值
MAX = max(Test);   % 每一列的最大值
MEAN = mean(Test);  % 每一列的均值
MEDIAN = median(Test);  %每一列的中位数
SKEWNESS = skewness(Test); %每一列的偏度
KURTOSIS = kurtosis(Test);  %每一列的峰度
STD = std(Test);  % 每一列的标准差
RESULT = [MIN;MAX;MEAN;MEDIAN;SKEWNESS;KURTOSIS;STD]  %将这些统计量放到一个矩阵中表示

1.4数据分析工具

1.4.1EXCEL

1.4.2SPSS

1.5正态分布JB检验(大样本 n>30) 

雅克贝拉检验(Jarque‐Bera test) 

 1.5.1偏度和峰度

1.5.2MATLAB结果

MATLAB 中进行 JB 检验的语法: [h,p] = jbtest(x,alpha)
当输出 h 等于 1 时,表示拒绝原假设; h 等于 0 则代表不能拒绝原假设。
alpha 就是显著性水平,一般取 0.05 ,此时置信水平为 1‐0.05=0.95
x 就是我们要检验的随机变量,注意这里的 x 只能是向量。
%% 正态分布检验
% 正态分布的偏度和峰度
x = normrnd(2,3,100,1);   % 生成100*1的随机向量,每个元素是均值为2,标准差为3的正态分布
skewness(x)  %偏度
kurtosis(x)  %峰度
qqplot(x)
    
% 检验第一列数据是否为正态分布
[h,p] = jbtest(Test(:,1),0.05)
[h,p] = jbtest(Test(:,1),0.01)

% 用循环检验所有列的数据
n_c = size(Test,2);  % number of column 数据的列数
H = zeros(1,6);  % 初始化节省时间和消耗
P = zeros(1,6);
for i = 1:n_c
    [h,p] = jbtest(Test(:,i),0.05);
    H(i)=h;
    P(i)=p;
end
disp(H)
disp(P)

 1.6Shapiro-wilk检验(小样本3≤n≤50)

Shapiro‐wilk夏皮洛威尔克检验

1.7另一种常见的方法:Q-Q图 

在统计学中, Q‐Q 图( Q 代表分位数 Quantile )是一种通过比较两个概率分布的分位数对这两个概率分布进行比较的概率图方法。首先选定分位数的对应概率区间集合,在此概率区间上,点(x,y) 对应于第一个分布的一个分位数x 和第二个分布在和 x 相同概率区间上相同的分
位数。
这里,我们选择正态分布和要检验的随机变量,并对其做出 QQ 图,可想而知,如果要检验的随机变量是正态分布,那么QQ 图就是一条直线
要利用 Q‐Q 图鉴别样本数据是否近似于正态分布 , 只需看 Q‐Q 图上的点 是否近似地在一条直线附近。(要求数据量非常大)
% Q-Q图
qqplot(Test(:,1))

1.8斯皮尔曼spearman相关系数

1.8.1定义

注:如果有的数值相同,则将它们所在的位置取算术平均。 

 1.8.2另一种斯皮尔曼spearman相关系数的定义

斯皮尔曼相关系数被定义成等级之间的皮尔逊相关系数。 

 1.8.3MATLAB中计算斯皮尔曼相关系数

%% 斯皮尔曼相关系数
X = [3 8 4 7 2]'  % 一定要是列向量哦,一撇'表示求转置
Y = [5 10 9 10 6]'
% 第一种计算方法
1-6*(1+0.25+0.25+1)/5/24

% 第二种计算方法
coeff = corr(X , Y , 'type' , 'Spearman')
% 等价于:
RX = [2 5 3 4 1]
RY = [1 4.5 3 4.5 2]
R = corrcoef(RX,RY)

% 计算矩阵各列的斯皮尔曼相关系数
R = corr(Test, 'type' , 'Spearman')

1.8.4斯皮尔曼相关系数的假设检验

分为小样本和大样本两种情况 :
1.8.4.1小样本情况

𝒏≤30时,直接查临界值表即可。 

1.8.4.2大样本情况下
% 大样本下的假设检验
% 计算检验值
disp(sqrt(590)*0.0301)
% 计算p值
disp((1-normcdf(0.7311))*2) % normcdf用来计算标准正态分布的累积概率密度函数
1.8.4.3直接给出相关系数和p值
% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')

1.9两种相关系数的对比

斯皮尔曼相关系数和皮尔逊相关系数选择 :
1. 连续数据,正态分布,线性关系,用 pearson 相关系数是最恰当,当然用spearman相关系数也可以, 就是效率没有 pearson 相关系数高。
2. 上述任一条件不满足,就用 spearman 相关系数,不能用 pearson 相关系数。
3. 两个定序数据之间也用 spearman 相关系数,不能用 pearson 相关系数。
定序数据 是指仅仅反映观测对象等级、顺序关系的数据,是由定序尺度计量形成的,表现为类别,可以进行排序,属于品质数据。
例如:优、良、差;
我们可以用 1 表示差、 2 表示良、 3 表示优,但请注意,用 2 除以 1 得出的 2 并不代表任何含义。定序数据最重要的意义代表了一组数据中的某种逻辑顺序。
注:斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只要数据满足单调关系(例如线性函数、指数函数、对数函数等)就能够使用。

二、补充——正态分布均值的假设检验

假设检验的步骤可以归纳如下:
(1) 写出原假设和备择假设; (2) 在原假设成立的条件下,构造一个统计量,该统计量服从某一分布; (3) 用已知的样本数据带入统计量的公式,得到一个检验值;(4 )给定置信水平来得到一个接受域的区间,看检验值是否落在接受域中,或者用检验值和区间的临界值进行比较,来判断是否接受原假设(或者计算该检验值对应于其分布的p 值,并将 p 值和指定的显著性水平比较从而来确定是否接受原假设)。

2.1例题

2.1.1题目

2.1.2求解 

(1)写出原假设和备择假设;

 (2)在原假设成立的条件下,构造一个统计量,该统计量服从某一分布;

 (3)用已知的样本数据带入统计量的公式,得到一个检验值;

 (4)给定置信水平来得到一个接受域的区间,看检验值是否落在接受域中,或者用检验值和区间的临界值进行比较,来判断是否接受原假设(或者计算该检验值对应于其分布的p值,并将p值和指定的显著性水平比较从而来确定是否接受原假设)。

2.2单侧检验的例子

2.3从Z检验到t检验

2.3.1Z检验

       我们前面解决的两个例题都用到了 Z 检验法, Z 检验法的核心是总体服从正态分布,且该正态分布的均值未知,需要我们检验,但方差已知。
       然而,在现实问题中,总体的方差也往往是未知的,如果总体方差未知,那么我们就不能构造出服从标准正态分布的统计量,但令人高兴的是,我们可以通过引入样本方差,来构造出一个服从t 分布的统计量。那么,接下来的步骤就和之前一样了,在t 分布的前提下找出接受域和拒绝域,看 t 检验值是否落在接受域内即可判断原假设是否成立。

2.3.2t检验(用的较多)

2.3.2.1定义

2.3.2.2例题 

2.4两个正态总体均值差的检验

2.4.1例题

2.4.2逐对比较法 

       有时为了比较两种产品、两种仪器 、两种方法等的差异,我们常在相同的条件下做对比试验,得到一批成对的观察值,然后分析观察数据作出推断。这种方法常称为 逐对比较法
       这个方法在数学建模中用的也比较多。

 2.4.3区别两个正态总体均值差的检验

2.5分布拟合检验

上面介绍的各种检验法都是在总体分布形式为正态分布的前提下进行讨论的。但在实际问题中,有时不能知道总体服从什么类型的分布,这时就需要根据样本 来检验关于分布的假设。课本上介绍的卡方拟合检验法,它可以用来检验总体是否具有某一个指定的分布或属于某一个分布族。

 

注意:这里服从的分布是卡方分布,卡方分布的概率密度函数图像和自由度有很大的关系。

2.6卡方分布的概率密度函数 

2.7教材例子 

2.8表格总结

 

  • 31
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
典型相关分析(Canonical Correlation Analysis,CCA)是一种通过寻找两个变量集合之间的最大相关性来探索它们之间关系的统计方法。在实际应用中,典型相关分析被广泛用于多元数据分析、数据挖掘、生物统计学和社会科学等领域。 在C++中,我们可以使用cross_decomposition库来实现典型相关分析。下面是一个带类的实现及案例代码: ```cpp #include <iostream> #include <Eigen/Dense> #include <Eigen/Eigenvalues> #include <Eigen/SVD> #include <Eigen/LU> #include <Eigen/QR> #include <unsupported/Eigen/MatrixFunctions> using namespace Eigen; class CCA { public: CCA(const MatrixXd& X, const MatrixXd& Y, int num_components) { int n = X.rows(), p = X.cols(), q = Y.cols(); // Centering the data MatrixXd X_centered = X.rowwise() - X.colwise().mean(); MatrixXd Y_centered = Y.rowwise() - Y.colwise().mean(); // Computing the covariance matrices MatrixXd cov = X_centered.transpose() * Y_centered / (n - 1); MatrixXd cov_xx = X_centered.transpose() * X_centered / (n - 1); MatrixXd cov_yy = Y_centered.transpose() * Y_centered / (n - 1); // Computing the SVD of the covariance matrix JacobiSVD<MatrixXd> svd(cov, ComputeThinU | ComputeThinV); // Extracting the canonical correlation coefficients and vectors MatrixXd U = svd.matrixU(); MatrixXd V = svd.matrixV(); VectorXd d = svd.singularValues(); // Computing the canonical variates MatrixXd A = X_centered * U; MatrixXd B = Y_centered * V; // Sorting the canonical correlation coefficients and vectors MatrixXd D = d.asDiagonal(); MatrixXd D_inv = D.inverse(); MatrixXd A_tilde = A * D_inv; MatrixXd B_tilde = B * D_inv; Eigen::GeneralizedSelfAdjointEigenSolver<MatrixXd> es(A_tilde.transpose() * cov_xx.inverse() * A_tilde, B_tilde.transpose() * cov_yy.inverse() * B_tilde); VectorXd lambda = es.eigenvalues(); MatrixXd alpha = es.eigenvectors().leftCols(num_components); // Storing the results m_canonical_correlation_coefficients = d.head(num_components); m_canonical_correlation_vectors_x = U.leftCols(num_components); m_canonical_correlation_vectors_y = V.leftCols(num_components); m_canonical_variates_x = A * alpha; m_canonical_variates_y = B * alpha; } VectorXd get_canonical_correlation_coefficients() { return m_canonical_correlation_coefficients; } MatrixXd get_canonical_correlation_vectors_x() { return m_canonical_correlation_vectors_x; } MatrixXd get_canonical_correlation_vectors_y() { return m_canonical_correlation_vectors_y; } MatrixXd get_canonical_variates_x() { return m_canonical_variates_x; } MatrixXd get_canonical_variates_y() { return m_canonical_variates_y; } private: VectorXd m_canonical_correlation_coefficients; MatrixXd m_canonical_correlation_vectors_x; MatrixXd m_canonical_correlation_vectors_y; MatrixXd m_canonical_variates_x; MatrixXd m_canonical_variates_y; }; int main() { // Creating sample data MatrixXd X(100, 3); MatrixXd Y(100, 2); for (int i = 0; i < 100; i++) { X(i, 0) = i; X(i, 1) = i * 2; X(i, 2) = i * 3; Y(i, 0) = i; Y(i, 1) = i * 4; } // Running canonical correlation analysis CCA cca(X, Y, 2); // Printing the results std::cout << "Canonical correlation coefficients: " << std::endl << cca.get_canonical_correlation_coefficients() << std::endl; std::cout << "Canonical correlation vectors for X: " << std::endl << cca.get_canonical_correlation_vectors_x() << std::endl; std::cout << "Canonical correlation vectors for Y: " << std::endl << cca.get_canonical_correlation_vectors_y() << std::endl; std::cout << "Canonical variates for X: " << std::endl << cca.get_canonical_variates_x() << std::endl; std::cout << "Canonical variates for Y: " << std::endl << cca.get_canonical_variates_y() << std::endl; return 0; } ``` 在这个示例代码中,我们首先定义了一个名为CCA的类,它包含了计算典型相关分析的所有方法。在构造函数中,我们首先对数据进行中心化,然后计算协方差矩阵和奇异值分解。接下来,我们提取了典型相关系数和向量,并通过它们计算了典型变量。最后,我们对典型相关系数和向量进行排序,并存储结果。 在main函数中,我们创建了一个包含两个数据集的示例数据,并运行了我们刚刚定义的CCA类来计算典型相关分析。最后,我们打印了结果。 这是一个简单的示例,你可以根据自己的需求对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值