1.1 變量概況
(1)可以通過attributes()函數給出數據集的屬性列表,其中包括變量名稱($names),數據集格式($class)一級列名($row.names)三個部分,由此可以對數據集結構有一個整體的把握。
library("MASS")
attributes(Insurance)
(2)函數str()可以進一步查看數據集的內部結構,可以看到觀測樣本數,變量數,各變量的類型及取值情況。
str(Insurance)
(3)函數summary()可以更進一步查看變量情況,對於定性變量,會給出其頻數,對於定性變量會給出最小值(Min),一分位點(1st Qu),中位數(Median),均值(Mean),三分位點(3st Qu),最大值(Max)這6個指標。若均值比中位數高很多,則表明該變量可能存在極大的異常值。
1.2 變量詳情
(1)若想獲得更細節的變量情況,則可以考慮使用Hmisc包中的describe()函數來獲得,給出樣本總個數(n),缺失樣本數(missing),水平個數(unique),並列出每一個水平的取值,頻數,頻率。
library(Hmisc)
describe(Insurance[,1:3])
結果分析:District變量共有64條取值,無缺失值,且含有4個水平,分別為1,2,3,4,各水平的頻數都是16,頻率為25%。
(2)服務於金融的軟件包,其中包含一些基礎的統計、參數估計、假設檢驗等相關函數,basicStata()是一個用於計算時間序列數據基礎統計指標的函數,也可以用於一般數據集。
以Holders變量為例,輸出的指標包括觀測樣本數(nobs)、缺失值(NAs)、最大值、最值、1分位數、3分位數、均值、中位數、和、標准誤差均值(SE Mean)、95%的置信水平下均值的置信下限(LCL Mean)/置信上限(UCL Mean)、方差(Variance)、標准誤差(Stdev)、兩個分布指標----偏度(Skewnes)、峰度(Kurtosis)。
library(fBasics)
basicStats(Insurance$Holders)
結果分析:數據集共23359位,約2.3玩=萬投保人信息,且在具體的區域District、發動機排量Group、年齡段Age情況下,平均有365位投保人,對於該變量均值的真實值位於區間[209,521](置信下/上限)中,有95%的可信度。
1.2.1 分布指標
分布指標的偏度和峰值也可以使用timeDate軟件包中的skewness()、kurtosis()兩個函數分別計算得到,也是一個服務於金融工程領域的軟件包。
偏度是用於衡量數據的偏倚程度,也就是數據的對稱程度,若以一個正太分布為基准的指標,即正太分布為完全對稱分布,其偏度為0;當該指標取值在[-1,1]區間,則說明數據分布的對稱性較強,即不存在明顯的左偏或者右偏情況;當該指標絕對值大於1,即超出該區間,則認為數據存在顯著偏倚。且為正值時表示該數據的總體取值大於均值,即有右偏的趨勢。反之,負值表示左偏趨勢。峰度經常與偏度共同使用,用於衡量數據分布形態的陡緩程度,也可以說時集中與分散程度,若以一個正太分布為基准的指標,當其值為0,說明其集散程度與正太分布相同,又稱為標准峰度,當峰度大於0則表示該數據分布與正太分布相比較為陡峭,為尖頂峰度,當峰度小於0表示其與正太分布相比較為平坦,為平頂峰度。峰度的絕對值數值越大表示其分布形態的陡緩程度與正太分布的差異程度越大。
library(timeDate)
skewness(Insurance[,4:5])
kurtosis(Insurance[,4:5])
1.2.2稀疏性
數據的稀疏性時對高維數據而言,我們使用Matrix軟件包進行研究,現在嘗試使用Matrix這種的sparseMatirx()函數生成稀疏數據集
library(Matrix) #加載包
i=sample(1:10,10,replace = F) #從1到10中無放回的抽取10個數
j=sample(1:10,10,replace = F) #從1到10中無放回的抽取10個數
(A=sparseMatrix(i,j,x=1)) #對第i行j列的元素取值為1,其他元素為空
local<-which(A==1,arr.ind = T) #取local變量記錄非空元素位置
plot(local,pch=22) #對如上local變量值繪制散點圖,模擬稀疏矩陣散點圖
1.2.3 缺失值
數據中的缺失值很常見,我們可以使用mice軟件包中的md.pattern()函數來獲取其中的缺失值分布情況,軟件包mice專注與多重查補技術(Multiple Imputation),即對缺失值等數據不足情況的處理技術。
在上述describe()的輸出結果中,我們知道數據集Insurance中各變量不含有缺失值,因此在64*5個取值中,隨機選出10個,將其轉變為缺失值NA,再使用md.pattern()函數來獲取這10個缺失值的分布情況。
library("mice")
for(i in 1:10){
row=sample(1:64,1) #在1到64中隨機選出一個數,作為第i個缺失值所在行的序號
col=sample(1:5,1) #在1到5中隨機選出一個數,作為第i個缺失值所在列的序號
Insurance[row,col]=NA #將Insurance數據集的第row行,第col列設置為缺失值NA
}
md.pattern(Insurance) #顯示數據集中缺失值的分布情況
結果分許:由圖可知,第54行有0個缺失值,第5行有1個變量的缺失值,且缺失值變量為District,其他依次類推,表中輸出結果的最后一行統計出了各變量有缺失值的樣本個數,其和為缺失值個數10。
1.2.4 相關性
使用函數cor()來衡量變量之間的相關性,其取值在-1到1之間,其絕對值大小表示兩變量相關性的大小,越接近1相關性越大,其符號的正負表示兩個變量之間時正向還是負向關系。
一般來說,當相關系數的絕對值高於0.75,我們就認為相關度比較高,具體需要根據其他變量間的先慣性高低來判斷所考察變量間的相關程度。
使用rattle軟件包匯包中的weather數據集來說明:
library(rattle)
data("weather")
head(weather[,12:21]) #以第12到21列這10各連續變量
var<-c(12:21) #設置12到21列標量的列號向量var
cor_matrix<-cor(weather[var],use="pairwise") #對10個變量兩兩計算相關系數
cor_matrix
使用Ellipse軟件包中的plotcorr()函數來繪制相關圖:
install.packages("ellipse")
library(ellipse)
library("ellipse")
plotcorr(cor_matrix,col=rep(c("white","black"),5)) #對相關系數矩陣繪制相關圖
結果分析:圓形的寬窄表示相關性的高低,兩個變量對應的圓形越窄,表明其相關性越高,做對角線10個圓形已經窄成10條線段,因為它們自己的相關度為1,為完全相關,圓形傾斜的方向表示相關性的正負,向右傾斜表示正相關,向左傾斜表示負相關。
上圖相關系數矩陣是對稱的,可以添加type參數選擇僅輸出上半部分或者下半部分:
plotcorr(cor_matrix,diag=T,type="lower",col=rep(c("white","black"),5))