1. 程式人生 > >R語言典型相關分析

R語言典型相關分析

自己整理編寫的R語言常用資料分析模型的模板,原檔案為Rmd格式,直接複製貼上過來,作為個人學習筆記儲存和分享。部分參考薛毅的《統計建模與R軟體》和《R語言實戰》

1 關鍵點:典型相關分析

典型相關分析是用於分析兩組隨機變數之間的相關程度的一種統計方法,它能夠有效地揭示兩組隨機變數之間的相互(線性依賴)關係

例如 研究生入學考試成績與本科階段一些主要課程成績的相關性

將研究兩組變數的相關性問題轉化為研究兩個變數的相關性問題 此類相關為典型相關#

2 分類:

總體典型相關

樣本典型相關

3 R語言提供的計算函式:

典型相關計算 cancor(x,y,xcenter=TRUE,ycenter=TRUE)

x,y是相應的資料矩陣 xcenter,ycenter是邏輯變數 TRUE是將資料中心化 FALSE是不中心化

4 分析結果含義

cor是典型相關係數

xcoef是對應於資料x的係數 又稱關於資料x的典型載荷即樣本典型變數U係數矩陣A的轉置

xcenter是資料X的中心 即資料X的樣本均值

y是對應於資料x的係數 又稱關於資料y的典型載荷即樣本典型變數V係數矩陣B的轉置

ycenter是資料Y的中心 即資料Y的樣本均值

5 分析步驟

(1.)載入原始資料 data.frame

(2.)原始資料標準化 scale

(3.)典型相關分析 cancor

(4.)相關係數顯著性檢驗 corcoef.test.R


I.典型相關分析的計算

現對20名中年人測得三個生理指標:體重(X1) 腰圍(X2) 脈搏(X3);三個訓練指標:引體向上(Y1) 起座次數(Y2) 跳躍次數(Y3) 試分析這組資料的相關性

#用資料框的形式輸入資料矩陣
test<-data.frame(
  X1=c(191, 193, 189, 211, 176, 169, 154, 193, 176, 156, 
       189, 162, 182, 167, 154, 166, 247, 202, 157, 138), 
  X2=c(36, 38
, 35, 38, 31, 34, 34, 36, 37, 33, 37, 35, 36, 34, 33, 33, 46, 37, 32, 33), X3=c(50, 58, 46, 56, 74, 50, 64, 46, 54, 54, 52, 62, 56, 60, 56, 52, 50, 62, 52, 68), Y1=c( 5, 12, 13, 8, 15, 17, 14, 6, 4, 15, 2, 12, 4, 6, 17, 13, 1, 12, 11, 2), Y2=c(162, 101, 155, 101, 200, 120, 215, 70, 60, 225, 110, 105, 101, 125, 251, 210, 50, 210, 230, 110), Y3=c(60, 101, 58, 38, 40, 38, 105, 31, 25, 73, 60, 37, 42, 40, 250, 115, 50, 120, 80, 43) ) #為了消除數量級的影響 將資料標準化處理 呼叫scale函式 test<-scale(test) #對標準化的資料做典型相關分析 ca<-cancor(test[,1:3],test[,4:6]) #檢視分析結果 ca

結果說明:
1) cor; xcoef是對應於資料X的係數, 即為關於資料X的典型載荷; ycoefY; xcenter與$ycenter是資料X與Y的中心, 即樣本均值;

2) 對於該問題, 第一對典型變數的表示式為

U1 = -0.17788841x1 + 0.36232695x2 - 0.01356309x3

U2 = -0.43230348x1 + 0.27085764x2 - 0.05301954x3

U3 = -0.04381432x1 + 0.11608883x2 + 0.24106633x3

V1 = -0.08018009y1 - 0.24180670y2 + 0.16435956y3

V2 = -0.08615561y1 + 0.02833066y2 + 0.24367781y3

V3 = -0.29745900y1 + 0.28373986y2 - 0.09608099y3

相應的相關係數為:p(U1,V1)=0.79560815 ,p(U2,V2)=0.20055604 ,p(U3,V3)=0.07257029

可以進行典型相關係數的顯著性檢驗, 經檢驗也只有第一組典型變數.

下面計算樣本資料在典型變數下的得分:

#計算資料在典型變數下的得分 U=AX  V=BY
U<-as.matrix(test[, 1:3])%*% ca$xcoef ; U
V<-as.matrix(test[, 4:6])%*% ca$ycoef ; V
#調整圖形
opar <- par(mfrow = c(1, 1),mar = c(5,4,1,1))
#畫出以相關變數U1、V1和U3、V3為座標的資料散點圖
plot(U[,1], V[,1], xlab="U1", ylab="V1")
plot(U[,3], V[,3], xlab="U3", ylab="V3")
#調整圖形
par(opar)

由散點圖可知 第一典型相關變數分佈在一條直線附近;第三典型相關變數資料很分散。因為第一典型變數其相關係數為0.79560815,接近1,所以在一直線附近;第三典型變數的相關係數是0.07257029,接近於0,所以很分散。


II.典型相關係數的顯著性檢驗

作為相關分析的目的 就是選擇多少對典型變數?因此需要做典型相關係數的顯著性檢驗。若認為相關係數k為0 就沒有必要考慮第k對典型變量了

#相關係數檢驗R程式
corcoef.test<-function(r, n, p, q, alpha=0.1){
   #r為相關係數 n為樣本個數 且n>p+q
   m<-length(r); Q<-rep(0, m); lambda <- 1
   for (k in m:1){
     #檢驗統計量 
     lambda<-lambda*(1-r[k]^2); 
      #檢驗統計量取對數
     Q[k]<- -log(lambda)  
   }
   s<-0; i<-m 
   for (k in 1:m){
     #統計量  
     Q[k]<- (n-k+1-1/2*(p+q+3)+s)*Q[k]
      chi<-1-pchisq(Q[k], (p-k+1)*(q-k+1))
      if (chi>alpha){
         i<-k-1; break
      }
      s<-s+1/r[k]^2
   }
  #顯示輸出結果 選用第幾對典型變數
    i
}
source("corcoef.test.R")
#輸入相關係數r,樣本個數n,兩個隨機向量的維數p和q,置信水平a(預設值為0.1)
corcoef.test(r=ca$cor,n=20,p=3,q=3)
#程式輸出值為典型變數的對數

最終程式執行結果顯示選擇第一對典型相關變數。我們只利用第一典型變數分析問題,達到降維的目的。

write.csv(test,"test_test.csv")