python 典型變數分析

2021-08-18 23:10:30 字數 2902 閱讀 7316

1.典型相關分析的基本思想是首先在每組變數中找出變數的線性組合,使其具有最大相關性,然後再在每組變數中找出第二對線性組合,使其分別與第一對線性組合不相關,而第二對本身具有最大的相關性,如此繼續下去,直到兩組變數之間的相關性被提取完畢為止.

有了這樣線性組合的最大相關,則討論兩組變數之間的相關,就轉化為只研究這些線性組合的最大相關,從而減少研究變數的個數.

#典型變數分析得到第一典型變數

def caa(x,y):

r= corrcoef(x,y,rowvar=0)

m, n = shape(x)

p, q = shape(y)

# print(m,n)

# print(p,q)

r11=

r22=

r12=

#計算相關係數

for i in range(n):

temp=r[i]

a=temp[0:n]

for j in range(n,n+q):

temp=r[j]

a=temp[n:n+q]

for s in range(n):

temp=r[s]

a=temp[n:n+q]

r11=matrix(r11)

r22 = matrix(r22)

r12 = matrix(r12)

r21=r12.t

#計算特徵值與特徵向量

m=(r11.i)*(r12)*(r22.i)*(r21)

eigvals, eigvects = linalg.eig(mat(m)) # 計算特徵值和特徵向量

eigvalind = sorted(eigvals,reverse=true) # 對特徵值eigvals從大到小排序

sorted_indices = np.argsort(-eigvals)#根據特徵值的順序排列相應的特徵向量

topk_evecs = eigvects[:, sorted_indices[:]]

eig=sqrt(eigvalind)#計算特徵值開平方

# print("特徵值開方=",eig)

#計算第一對典型變數的相應的係數

k,l=shape(topk_evecs)

cout_t=

for i in range(l):

t=1.0/((topk_evecs[:,i].t)*r11*(topk_evecs[:,i]))

# print("cout_t=", cout_t)

tt=[sqrt(i) for i in cout_t]

# print("tt=",tt)

a1=tt[0]*topk_evecs[:,0]#第乙個特徵值開方所對應的特徵向量

p1=(1.0/eig[0])*(r22.i)*r21*a1#第乙個特徵值開方所對應的特徵向量

print("特徵值開方=", real(eig[0]))

# print("a1=",a1)

# print("p1=",p1)

# print("a1.shape=", shape(a1))

# print("p1.shape=",shape(p1))

#進行顯著性檢驗

u1 =

v1 =

a=1for i in range(len(eigvals)):

a*=(1-eigvals[i])

q1=-(m-1-1.0/2*(n+q+1))*log(a)

# print("q1=",q1)

if q1>7.81:

# print("第一主成分為顯著性關聯")

for i in range(m):

temp1 = 0

for j in range(n):

temp1+=a1[j]*x[i,j]

# print(temp1)

for i in range(p):

temp2 = 0

for j in range(q):

temp2+= p1[j] * y[i, j]

# print("u1,vi=",u1,v1)

else:

print("第一主成分不顯著關聯")

# a2=1

# for i in range(1,len(eigvals)):

# a2*=(1-eigvals[i])

# q2 = -(m - 2 - 1.0 / 2 * (n + q + 1)+1.0/(sqrt(eig[0]))) * log(a2)

# print("q2=", q2)

# if q2>37.65:

# print("第二主成分為顯著性關聯")

# else :

# print("第二主成分不顯著關聯")

# # a3=1

# for i in range(2,len(eigvals)):

# a3*=(1-eigvals[i])

# q3= -(m - 3 - 1.0 / 2 * (n + q + 1)) * log(a3)

# print("q3=", q3)

# if q3>26.3:

# print("第三主成分為顯著性關聯")

# else :

# print("第三主成分不顯著關聯")

return u1,v1,eig[0]

活躍變數分析

1 定義 對於變數x和程式點p,判斷x在點p上的值是否會在流圖中的某條從點p出發的路徑中使用。如果是,就說x在p上活躍 否則就說x在p上是死的。2 用途 重要用途之一是為基本塊進行儲存器分配。乙個值被計算儲存到乙個暫存器中後,很有可能在基本塊中被使用。如果它在基本塊中是死的,就不必在結尾處儲存這個值...

Seaborn 單變數分析(三)

matplotlib inline import numpy as np import pandas as pd from scipy import stats,integrate import matplotlib.pyplot as plt import seaborn as sns sns.s...

Seaborn實現單變數分析

import numpy as np import pandas as pd from scipy import stats,integrate import matplotlib.pyplot as plt import seaborn as sns 繪製直方圖 sns.set color cod...