【R描述統計分析】多元數據的數據特徵與相關分析
在R中,計算多元數據的均值與方差採用數據框的結構輸入數據,計算比較方便。
二元數據的數據特徵及相關係數
例如對礦石中的兩種成分進行統計分析:
ore<-data.frame(
x=c(67, 54, 72, 64, 39, 22, 58, 43, 46, 34),
y=c(24, 15, 23, 19, 16, 11, 20, 16.1, 17, 13)
)
ore.m<-mean(ore); ore.m
ore.s<-cov(ore); ore.s
ore.r<-cor(ore); ore.r
attach(ore)
cor.test(x,y)
cor.test(x,y, method="spearman")
cor.test(x,y, method="kendall")
mean( ) 函數 計算均值
cov( ) 函數 計算協方差
cor( ) 函數 計算相關矩陣(相關係數)
cov.wt 計算加權協方差
cor.test 計算相關性檢驗
cov(ore) = var(ore)
二元數據的相關性檢驗
對於二元數據:
可以計算出樣本的相關係數r
且總體的相關係數爲:
當樣本的個數n充分大時,樣本的相關係數r可以作爲總體相關係數的估計,即樣本個數較大時,樣本相關,總體也相關。
問題是:當樣本個數n取到多少時,樣本相關才能得到總體相關?
Ruben置信區間的近似逼近公式
Ruben(魯賓)給出了總體相關係數的區間估計的近似逼近公式
設n是樣本個數,r是樣本相關係數,u是標準正態分佈的上α/2分位點,則計算
按照上述計算公式,編寫R程序:
ruben.test<-function(n, r, alpha=0.05){
u<-qnorm(1-alpha/2)
r_star<-r/sqrt(1-r^2)
a<-2*n-3-u^2; b<-r_star*sqrt((2*n-3)*(2*n-5))
c<-(2*n-5-u^2)*r_star^2-2*u^2
y1<-(b-sqrt(b^2-a*c))/a
y2<-(b+sqrt(b^2-a*c))/a
data.frame(n=n, r=r, conf=1-alpha,
L=y1/sqrt(1+y1^2), U=y2/sqrt(1+y2^2))
}
將n,r調入已編好的ruben.test() 函數中
①n=6,r=0.8
置信區間爲(﹣0.095,0.97),其置信下界是負數,即使r=0.8,也不能說明總體是相關的
②n=25,r=0.7
置信區間爲(0.41,0.85),此時基本能說總體是相關的
關於置信區間的近似逼近方法還有David提出的圖表方法,Kendall和Stuart提出的Fisher逼近方法等。
Pearson相關性檢驗
確認總體是否相關最有效的方法是作總體(X,Y)^T 的相關性檢驗,可以證明
服從自由度爲n-2的t分佈
利用此分佈的性質,可以對數據X和Y的相關性進行檢驗,該方法稱爲Pearson相關性檢驗。
此外,還有Spearman秩檢驗和Kendall秩檢驗,R軟件中的cor.test()提供了這三種檢驗方法。
cor.test()使用方法
cor.test(x,y,
alternative = c("two.sided","less","spearman"),
method = c("pearson","kendall","spearman"),
exact = NULL, conf.level = 0.95,...)
另一種使用格式:
cor.test(formula, data, subset, na.action, ...)
多元數據的數字特徵及相關矩陣
關於相關性檢驗,R軟件沒有爲多元數據提供更多的函數,仍是cor.test()作兩兩分量的相關性檢驗
例:
從計算結果可以看出,X1,X2,X3兩兩均是不相關的
多元數據的圖表示方法
輪廓圖
outline<-function(x, txt=TRUE){
# x is a matrix or data frame of data
if (is.data.frame(x)==TRUE)
x<-as.matrix(x)
m<-nrow(x); n<-ncol(x)
plot(c(1,n), c(min(x),max(x)), type="n",
main="The outline graph of Data",
xlab="Number", ylab="Value")
for(i in 1:m){
lines(x[i,], col=i)
if (txt==TRUE){
k<-dimnames(x)[[1]][i]
text(1+(i-1)%%n, x[i,1+(i-1)%%n], k)
}
}
}
星圖
R軟件中給出了作星圖的函數stars()
stars(x)
調整stars中的參數:
stars(x, full=FALSE, draw.segments = TRUE,
key.loc = c(5,0.5), mar = c(2,0,0,0) )
調和曲線圖
調和曲線圖是Andrews提出來的三角表示法,其思想是將多維空間中的一個點對應於二維平面的一條直線,對於p維數據,假設X_r是第r觀測值,即
則對應的調和曲線是
n次觀測數據對應n條曲線,在同一張紙上就是一張調和曲線圖,當各變量數據的數值相差太大時,先標準化再畫圖。
按照上述計算式,編寫調和曲線函數:
unison<-function(x){
# x is a matrix or data frame of data
if (is.data.frame(x)==TRUE)
x<-as.matrix(x)
t<-seq(-pi, pi, pi/30)
m<-nrow(x); n<-ncol(x)
f<-array(0, c(m,length(t)))
for(i in 1:m){
f[i,]<-x[i,1]/sqrt(2)
for( j in 2:n){
if (j%%2==0)
f[i,]<-f[i,]+x[i,j]*sin(j/2*t)
else
f[i,]<-f[i,]+x[i,j]*cos(j%/%2*t)
}
}
plot(c(-pi,pi), c(min(f),max(f)), type="n",
main="The Unison graph of Data",
xlab="t", ylab="f(t)")
for(i in 1:m) lines(t, f[i,] , col=i)
}
unison(x)得到圖像如下