【统计至简】【入门测试1】给定数据矩阵X,如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵
给定数据矩阵X,如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵。
设数据矩阵
X
X
X是一个
n
×
p
n\times p
n×p的矩阵,其中
n
n
n是样本数量,
p
p
p是变量数量,
X
=
(
x
i
j
)
X = (x_{ij})
X=(xij),
i
=
1
,
2
,
⋯
,
n
i = 1,2,\cdots,n
i=1,2,⋯,n,
j
=
1
,
2
,
⋯
,
p
j = 1,2,\cdots,p
j=1,2,⋯,p。
1. 质心 X ˉ \bar{X} Xˉ
质心是数据矩阵 X X X每一列的均值所构成的向量。对于第 j j j列,其均值 x ˉ j = 1 n ∑ i = 1 n x i j \bar{x}_j=\frac{1}{n}\sum_{i = 1}^{n}x_{ij} xˉj=n1∑i=1nxij, j = 1 , 2 , ⋯ , p j = 1,2,\cdots,p j=1,2,⋯,p。所以质心向量 X ˉ = ( x ˉ 1 , x ˉ 2 , ⋯ , x ˉ p ) \bar{X}=(\bar{x}_1,\bar{x}_2,\cdots,\bar{x}_p) Xˉ=(xˉ1,xˉ2,⋯,xˉp)。
2. 中心化数据 X c X_c Xc
中心化是将数据矩阵X的每一个样本点减去其质心。中心化后的数据矩阵 X c X_c Xc的元素 x i j c = x i j − x ˉ j x_{ij}^c=x_{ij}-\bar{x}_j xijc=xij−xˉj, i = 1 , 2 , ⋯ , n i = 1,2,\cdots,n i=1,2,⋯,n, j = 1 , 2 , ⋯ , p j = 1,2,\cdots,p j=1,2,⋯,p。
3. 标准化数据 X s X_s Xs
- 首先计算每一列的标准差 s j = 1 n − 1 ∑ i = 1 n ( x i j − x ˉ j ) 2 s_j=\sqrt{\frac{1}{n - 1}\sum_{i = 1}^{n}(x_{ij}-\bar{x}_j)^2} sj=n−11∑i=1n(xij−xˉj)2, j = 1 , 2 , ⋯ , p j = 1,2,\cdots,p j=1,2,⋯,p。
- 标准化后的数据矩阵
X
s
X_s
Xs的元素
x
i
j
s
=
x
i
j
−
x
ˉ
j
s
j
x_{ij}^s=\frac{x_{ij}-\bar{x}_j}{s_j}
xijs=sjxij−xˉj,
i
=
1
,
2
,
⋯
,
n
i = 1,2,\cdots,n
i=1,2,⋯,n,
j
=
1
,
2
,
⋯
,
p
j = 1,2,\cdots,p
j=1,2,⋯,p。
(减均值、除方差)
4.格拉姆矩阵 G G G
格拉姆矩阵
G
G
G的元素
g
i
j
=
X
T
X
g_{ij}=X^T X
gij=XTX,即
g
i
j
=
∑
k
=
1
n
x
k
i
x
k
j
g_{ij}=\sum_{k = 1}^{n}x_{ki}x_{kj}
gij=∑k=1nxkixkj,
i
=
1
,
2
,
⋯
,
p
i = 1,2,\cdots,p
i=1,2,⋯,p,
j
=
1
,
2
,
⋯
,
p
j = 1,2,\cdots,p
j=1,2,⋯,p。
(每一个元素,都是
X
X
X中两个向量的内积)
5.协方差矩阵 C C C
- 协方差矩阵C可以通过中心化后的数据矩阵 X c X_c Xc来计算, C = 1 n − 1 X c T X c C=\frac{1}{n - 1}X_c^T X_c C=n−11XcTXc。
- 其元素 c i j = 1 n − 1 ∑ k = 1 n ( x k i − x ˉ i ) ( x k j − x ˉ j ) c_{ij}=\frac{1}{n - 1}\sum_{k = 1}^{n}(x_{ki}-\bar{x}_i)(x_{kj}-\bar{x}_j) cij=n−11∑k=1n(xki−xˉi)(xkj−xˉj), i = 1 , 2 , ⋯ , p i = 1,2,\cdots,p i=1,2,⋯,p, j = 1 , 2 , ⋯ , p j = 1,2,\cdots,p j=1,2,⋯,p。
6.相关系数矩阵 R R R
-
可以由标准化后的数据矩阵 X s X_s Xs来计算相关系数矩阵R, R = 1 n − 1 X s T X s R=\frac{1}{n - 1}X_s^T X_s R=n−11XsTXs。
-
也可以根据协方差矩阵C计算, r i j = c i j c i i c j j r_{ij}=\frac{c_{ij}}{\sqrt{c_{ii}c_{jj}}} rij=ciicjjcij, i = 1 , 2 , ⋯ , p i = 1,2,\cdots,p i=1,2,⋯,p, j = 1 , 2 , ⋯ , p j = 1,2,\cdots,p j=1,2,⋯,p,其中 r i j r_{ij} rij是相关系数矩阵R的元素
python实现
import numpy as np
def calculate_statistics(X):
# 质心
centroid=np.mean(X,axis=0)
# 中心化数据X_c
X_centered=X-centroid
# 标准化数据X_s
std_dev=np.std(X,axis=0,ddof=1)
# 格拉姆矩阵G
gram_matrix=np.dot(X.T,X)
# 协方差矩阵C
cov_matrix=np.cov(X,rowvar=False)
# 相关系数矩阵R
corr_matrix=np.corrcoef(X,rowvar=False)
return centroid, X_centered, std_dev, gram_matrix, cov_matrix, corr_matrix
# Test the function
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
centroid, X_centered, std_dev, gram_matrix, cov_matrix, corr_matrix = calculate_statistics(X)
print("Centroid:", centroid)
print("Centered data:", X_centered)
print("Standard deviation:", std_dev)
print("Gram matrix:", gram_matrix)
print("Covariance matrix:", cov_matrix)
print("Correlation matrix:", corr_matrix)
Centroid: [4. 5. 6.]
Centered data: [[-3. -3. -3.]
[ 0. 0. 0.]
[ 3. 3. 3.]]
Standard deviation: [3. 3. 3.]
Gram matrix: [[ 66 78 90]
[ 78 93 108]
[ 90 108 126]]
Covariance matrix: [[9. 9. 9.]
[9. 9. 9.]
[9. 9. 9.]]
Correlation matrix: [[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]