本文對應《R語言實戰》第6章:基本圖形;第7章:基本統計分析
==================================================================================================================================================
本章討論的圖形,主要用於分析數據前,對數據的初步掌握。想要對數據有一個初步的印象,最好的方式就是觀察它,也就是將數據可視化。在這個過程中,我們不必要過於糾結圖形是否漂亮美觀,而重點關注各個簡單圖形的含義:觀察數據的哪個方面時需要用到哪些圖形。
條形圖:主要展示類別型變量的分布(頻數)
barplot(height)
簡單條形圖
堆砌條形圖和分組條形圖
均值條形圖(用aggregate()函數處理后,得到各組均值、中位值等,即經過折疊的數據)
棘狀圖(對堆砌條形圖進行重縮放,將不同分組高度歸一化,用於比較不同組內相同分類占比的不同。package: vcd:: spine())
餅圖:不推薦使用,因為相對於面積,人對長度的判斷更精確。
pie(x, labels)
直方圖:展示了連續型變量的分布情況
hist(x)
可以在直方圖上添加核密度圖或者正態分布曲線輔助觀察數據分布
核密度圖:也可以用來觀察連續型變量分布,可以在直方圖上疊加
#直接繪圖: plot(density(x)) #在直方圖上疊加: hist(mtcars$mpg) #如果數據中有許多結(tie, 數據中出現相同的值)用以下語句打散 rug(jitter(mtcars$mpg)) #添加核密度曲線 lines(density(mtcars$mpg))
箱線圖:通過繪制繪制連續型變量的五數總括,即最小值、下四分位數、中位數、上四分位數、最大值,描述連續型變量分布
boxplot(x)
並列箱線圖:跨組比較(單因子或交叉因子。交叉因子:formula形如mpg ~ am.f * cyl.f)
boxplot(formula, data = dataframe)
小提琴圖:是箱線圖的變種,由箱線圖與核密度圖結合而來,package: vioplot
並不流行
點圖:提供了一種在簡單水平刻度上繪制大量有標簽值的方法
dotchart(x, labels = )
對於少量數據有較為顯著的洞察力,對於大量數據的實用性較差
==================================================================================================================================================
基本統計分析:
描述性統計分析
#極值、均值、分位數 summary() #變量與觀測的數量、缺失值和唯一值的數量、平均值、分位數、五個最大最小值 library(Hmisc) describe() #對數據框或時間序列進行分析 library(pastecs) stat.desc(x, basic = TRUE, desc = TRUE, norm = FALSE, p = 0.95) #basic = TRUE(默認),計算所有值、空值、缺失值數量,最值、值域、總和 #desc = TRUE(默認),中位數、平均數及其標准誤、平均數置信度為95%的置信區間、方差、標准差以及變異系數 #norm = TRUE(不是默認),返回正態分布統計量,包括偏度和峰度 #擴展 #非缺失值的數量、平均數、標准差、中位數、截尾均值、絕對中位差、最值、值域、偏度、峰度、平均值的標准誤 library(psych) describe()
分組計算描述性統計量
#by()函數 vars <- c(“mpg”, “hp”, “wt”) dstats <- function(x) (c(mean = mean(x), sd = sd(x))) by(mtcars[vars], mtcars$am, dstats) #自定義統計量 library(doBy) summaryBy(formula, data = dataframe, FUN = function) #概述統計量 library(psych) describe.by(data, variables) #package reshape #melt() cast()簡潔但是需要熟練使用
頻數表和列聯表
| table(var1, var2, …, varN) |
使用N個類別型變量創建一個N維列聯表 |
| xtabs(formula, data) |
根據一個公式和一個矩陣或一個數據框創建一個N維列聯表 |
| prop.table(table, margins) |
依margins定義的邊際列表將表中條目表示為分數形式 |
| margin.table(table, margins) |
依margins定義的邊際列表計算表中條目的和 |
| addmargins(table, margins) |
將概述邊margins(默認是求和結果)放入表中 |
| ftable(table) |
創建一個緊湊的“平鋪”式列聯表 |
注意:table()函數默認忽略缺失值(NA)要將NA視為一個有效的類別,需要設置參數useNA = “ifany”
生成二維列聯表的一個更好的方式,使用library: gmodels:: CrossTable()函數
多維列聯表:以上函數均可以推廣到高維情況,推薦使用ftable()函數
獨立性檢驗:
對二維列聯表的行變量與列變量進行獨立性檢驗(檢驗對象為列聯表)
#卡方獨立性檢驗 #假設相互獨立,若p<0.05,拒絕假設(也就是相關) chisq.test() #Fisher精確檢驗 #假設:邊界固定的列聯表中行和列是相互獨立的 #注意不能用於2*2列聯表 fisher.test() #Cochran-Mantel-Haenszel檢驗 #假設:兩個名義變量在第三個變量的每一層中都是條件獨立的(即不存在三階交互作用) mantelhaen.test()
相關性度量:
如果獨立性檢驗通過(拒絕假設),繼續度量相關性的強弱
相關
Pearson積差相關系數衡量了兩個定量變量之間的線性相關程度
Spearman等級相關系數衡量分級定序變量之間的相關程度
Kendall’s Tau相關系數是一種非參數的等級相關度量
#計算相關系數 cor() #計算協方差 cov()
偏相關:在控制一個或多個定量變量時,另外兩個定量變量之間的相互關系
library(ggm) pcor(u, S)
其他類型的相關
#計算混合相關矩陣,包括數值型變量之間的Pearson相關系數、數值型變量和有序變量之間的多系列相關系數 library(polycor) hector()
相關性的顯著性檢驗:
#檢驗一種相關關系 cor.test(x, y, alternative = , method = ) #一次作出相關矩陣及顯著性檢驗 library(psych) corr.test()
其他顯著性檢驗:
在多元正態性的假設下,ggm包中pcor.test()函數可以用來檢驗在控制一個或多個額外變量時,兩個變量之間的條件獨立性。
t檢驗
#獨立樣本t檢驗 t.test(y ~ x, data) #y為數值型變量,x為二分變量 t.test(y1, y2) #y1和y2為數值型變量,即各組的結果變量 #非獨立樣本t檢驗(假定組間的差異呈正態分布) t.test(y1, y2, paired = TRUE)
多於兩組的情況:如果能夠假設數據是從正態總體中獨立抽樣而得的,就可以使用方差分析(ANOVA)
組間差異的非參數檢驗
兩組的比較:若獨立,則可以使用Wilcoxon秩和檢驗
wilcox.test(y ~ x, data) wilcox.test(y1, y2)
多於兩組的比較:無法滿足ANOVA的假設時,采用非參數方法。
如果各組獨立,可以使用Kruskal-Wallis檢驗;如果各組不獨立,使用Friedman檢驗。
