《R語言實戰(zhàn)》筆記系列
本章學習大綱
1.描述性統(tǒng)計分析
2.頻數表和列聯(lián)表
3.相關系數和協(xié)方差
4.t檢驗
5.非參數統(tǒng)計
第一部分 描述性統(tǒng)計分析
描述性分析主要分析連續(xù)型變量的中心趨勢、變化性和分布形狀的方法。有以下幾種方法進行描述性統(tǒng)計分析:
1.通過summary()計算
summary()函數提供了最小值、最大值、四分位數和數值型變量的均值,以及因子向量和邏輯型向量的頻數統(tǒng)計。
2.通過sapply()計算
apply()或sapply()函數也能計算所選擇的任意描述性統(tǒng)計量。sapply()函數一般格式是:sapply(x,FUN,options)其中x是你的數據框(或矩陣),FUN為一個任意的函數。如果指定了cptions,它們將被傳遞給FUN。可以插入的函數如mean()、sd()、var()、min()、max()、median()、length()、range()和quantile()。函數fivenum()可以返回圖基五數包括(Tukey's five-number summary),即最小值、下四分位數、中位數、上四分位數和最大值。
如果想忽略缺失值,則應當用sapply(mtcars[myvars],mystats,na.omit=TRUE)
3.通過Hmisc包中的describe()函數計算
Hmisc包中的describe()函數可以返回變量和觀測的變量、缺失值和唯一值得數目、平均值、分位數,以及五個最大的值和五個最小的值。
4.通過pastecs包中的stat.desc()函數
pastecs包中有一個名為stat.desc()的函數,它可以計算種類繁多的描述性統(tǒng)計量。格式為:stat.desc(x,basic=TRUE,norm=FALSE,p=0.95)其中x是一個數據框或時間序列。若basic=TRUE(默認值),則計算其中所有值、空值、缺失值的數量,以及最小值、最大值、值域,還有總和。若desc=TRUE(同樣也是默認值)、則計算中位數、平均數、平均數的標準誤、平均數置信度為95%的置信區(qū)間、方差、標準差以及變異系數。若norm=TRUE(不是默認值),則返回正態(tài)分布統(tǒng)計量,包括偏度和峰度(以及它們的統(tǒng)計顯著程度)和Shapiro-Wilk正態(tài)檢驗結果。這里使用了p值來計算平均數的置信區(qū)間(默認置信度為0.95)。
5.通過psych包中的describe()函數
psych包也擁有一個名為describe()的函數,它可以計算非缺失值的數量、平均值、標準差、中位數、截尾均值、絕對中位差、最小值、最大值、值域、偏度、峰度和平均值的標準誤。
psych包和Hmisc包均提供了名為describe()的函數。R如何知道該使用哪個呢?最后載入的程序包優(yōu)先。如果想改為前一個包,如這里的Hmisc包,可以鍵入Hmisc:describe(mt)。
分組計算描述性統(tǒng)計量
1.使用aggregate()分組獲取 描述性統(tǒng)計量
list(am=mtcars$am)與list(mtcars$am)的區(qū)別
使用list(mtcars$am),則am列將被標注為Group.1而不是am。如果有多個分組變量,可以使用by=list(name1=groupvar1,name2=groupvar2,name3=groupvar3,...)
2.使用by()分組計算描述性統(tǒng)計量
aggregate()不足之處在于僅允許在每次調用中使用平均數、標準差這樣的單返回值函數,無法一次返回若干個統(tǒng)計量。要完成這樣的任務,可以使用by()函數,格式為by(data,INDICES,FUN)其中data是一個數據框或矩陣,INDICES是一個因子或因子組成的列表,定義了分組,FUN是任意函數。
3.使用doBy包中的summaryBy()分組計算概述統(tǒng)計量
doBy包和sych包也提供了分組計算描述性統(tǒng)計量的函數。doBy包中summaryBy()函數的使用格式為:summaryBy(formula,data=dataframe,FUN=function)其中的formula接受以下的格式:
var1+var2+var3+...+varN~groupvar1+groupvar2+...+groupvarN在~左側的變量是需要分析的數值型變量,而右側的變量是類別型的分組變量。function可為任何內建或用戶自編的R函數。
第二部分 頻數表和列聯(lián)表
頻數表和列聯(lián)表適用于類別型變量。本章的數據集為一項風濕性關節(jié)炎新療法的雙盲臨床試驗結果。
生成頻數表
往往第一步是使用table()或xtabs()函數創(chuàng)建一個表,然后用其他函數處理它。
1.一維列聯(lián)表
可以使用table()函數生成簡單的頻數統(tǒng)計表。
可以用prop.table()將這些頻數轉化為比例值
可以用prop.table()*100轉化為百分比
解讀:有50%的參與者獲得了一定程度或顯著的改善
2.二維列聯(lián)表
對于二維列聯(lián)表table()函數的使用格式為:
mytable<-table(A,B)
其中A是形變量,B是列變量。除此之外,xtabs()函數還可使用公式風格的輸入創(chuàng)建列聯(lián)表,格式為:
mytable<-xtabs(~A+B,data=mydata)
其中mydata是一個矩陣或數據框。要進行交叉分類的變量出現在公式的右側(~的右側),以+作為分隔符。若某個變量寫在公式的左側,則其為一個頻數向量(在數據已經被表格化時很有用)
也可以用margin.table()和prop.table()函數分別生成邊際頻數和比例。行和與行比例:
下標1指代table()語句中的第一個變量。如上代碼所示,接受安慰劑治療的明顯改善的有16%,接受治療的明顯改善的有51%。下標2指代table()語句中的第二個變量。
PS:行變量為1,列變量為2。若設置為行變量的話,則行的數相加為1。
各單元格所占的比例可以用以下語句獲取。
也可以使用addmargins()函數為這些表格添加邊際和。在使用addmargins()函數默認給表中所有的變量創(chuàng)建邊際和。
注意:table()函數默認忽略缺失值(NA)。要在頻數統(tǒng)計中將NA視為一個有效的類別,需設定參數useNA="ifany"
使用CrossTable生成二維列聯(lián)表
CrossTable()函數有許多選項,可以計算(行、列、單元格)的百分比;指定小數位數;進行卡方、Fisher和McNemar獨立性檢驗;計算期望和(皮爾遜、標準化、調整的標準化)殘差;將缺失值作為一種有效值;進行行和列標題的標注;生成SAS和SPSS風格的輸出;具體參閱help(CrossTable)
多維列聯(lián)表
table()和xtabs()都可以基于三個或更多的類別型變量生成多維列聯(lián)表。margin.table()、prop.table()和addmargins()函數可以自然推廣到高于二維的情況。
列聯(lián)表可以告訴組成表格的各種變量組合的頻數和比例。
獨立性檢驗
1.卡方獨立性檢驗
可以使用chisq.test()函數對二維表的行變量和列變量進行卡方獨立性檢驗。
結果顯示患者接受的治療和改善的水平看上去存在某種關系(p<0.01)。而患者性別和改善情況之間卻不存在關系。(p>0.05)。產生警告的原因是表中的6個單元格之一有一個小于5的值,這可能使卡方檢驗無效。
2.Fisher精確檢驗
可以使用fisher.test()函數進行Fisher精確檢驗。Fisher精確檢驗的原假設是:邊界固定的列聯(lián)表中行和列是相互獨立的。其調用格式:fisher.test(mytable),其中的mytable是一個二維列聯(lián)表。
fisher.test()函數與其他統(tǒng)計軟件不同,R中可以在任意行列數大于等于2的二維列聯(lián)表上使用,但不能用于2*2的列聯(lián)表。
3.Cochran-Mantel-Haenszel檢驗
mantelhaen.test()函數可以用于Cochran-Mantel-Haenszel卡方檢驗,其原假設為兩個名義變量在第三個變量的每一層中都是條件獨立的。下列代碼可以檢驗治療情況和改善情況在性別的每一水平下是否獨立。此檢驗假設不存在三階交互作用。(治療情況*改善情況*性別)
結構顯示患者接受的治療與得到的改善在性別的每一水平下均不獨立,分性別來看,用藥治療的患者比較接受安慰劑的患者有了更多的改善。
第三部分 相關性的度量
上節(jié)的顯著性檢驗評估了是否存在充分地證據以拒絕變量間相互獨立的原假設。如果拒絕原假設,就需要研究衡量相關性強弱的相關性度量。vcd包中的assocstats()函數可以用來計算二維列聯(lián)表的phi系數、列聯(lián)系數和Cramer's系數。
相關
相關系數可以用來描述定量變量之間的關系。相關系數的符號(+-)表明關系的方向(正相關或負相關),其值的大小表示關系的強弱程度(完全不相關為0,相關為1)。R可以計算多種相關系數。
1.Pearson、Spearman和Kendall相關
Pearson積差相關系數衡量了兩個定量變量之間的線性相關程度。Spearman等級相關系數則衡量分級定序變量之間的相關程度。Kendall's Tau相關系數也是一種非參數的等級相關度量。
cor()函數可以計算這三種相關系數,而cov()函數可用來計算協(xié)方差和方差。一般形式為cor(x,use=,method=)
默認參數為use="everything"和methods="pearson"。
協(xié)方差和相關系數
當需要找某一組變量與另一組變量之間的關系時,就可用cor()函數。但使用cor()函數未指明相關系數是否顯著不為0(即,根據樣本數據是否有足夠的證據得出總體相關系數不為0的結論)。所以需要對相對系數進行顯著性檢驗。
2.偏相關
偏相關是指在控制一個或多個定量變量時,另外兩個定量變量之間的相關關系。可以使用ggm包中的pcor()函數計算偏相關系數。pcor()函數的格式為pcor(u,s)
其中u是一個數值向量,前兩個數值表示要計算相關系數的變量下標,其余的數值為條件變量(即要排除影響的變量)的下標。s為變量的協(xié)方差陣。下例表示在控制了收入、 文盲率和高中畢業(yè)率的影響時,人口和謀殺率之間的相關系數為0.346。
pcor()函數的應用
相關性的顯著性檢驗
計算好相關系數之后,需進行統(tǒng)計顯著性檢驗。常用的原假設為變量間不相關(即總體的相關系數為0)。可以使用cor.test()函數對單個的Pearson、Spearman和Kendall相關系數進行檢驗。簡化后的格式為:cor.test(x,y,alternative=,method=)。
其中x和y為要檢驗相關性的變量,alternative則用來指定進行雙側檢驗或單側檢驗(取值為“two.side"、”less"或“greater"),而method用以指定要計算的相關類型(”pearson"、“kendall”、“spearman”)。當研究的假設為總體的相關系數小于0時,用alternative="less"。在研究的假設為總體的相關系數大于0時,用alternative="greater"。在默認情況下,假設為alternative="two.side"(總體相關系數不等于0)。
上例代碼檢驗了預期壽命和謀殺率的Pearson相關系數為0的原假設。假設總體的相關度為0,則預計在一千萬次中只會有少于一次的機會見到0.703這樣大的樣本相關度。由于這種情況幾乎不可能發(fā)生,所以可以拒絕原假設,從而支持要研究的猜想,即預期壽命和謀殺率之間的總體相關率不為0。但cor.test()每次只能檢驗一種相關關系。
也可通過corr.test()函數進行顯著性檢驗。參數use=的取值可為“pairwise"或“complete”(分別表示對缺失值執(zhí)行成對刪除或行刪除)。參數method=取值可為“pearson”(默認值)、“spearman”或“kendall”。
第四部分 t檢驗
一個針對兩組的獨立樣本t檢驗可以用于檢驗兩個總體的均值相等的假設。這里假設兩組數獨立,并且是從正態(tài)總體中抽得。檢驗的調用格式:t.test(y~x,data)其中y是一個數值型變量,x是一個二分變量。調用格式或為t.test(y1,y2)。其中y1,y2為數值型向量(即各組的結果變量)。可選參數data的取值為一個包含了這些變量的矩陣或數據框。與其他統(tǒng)計軟件不同,這里的t檢驗默認假定方差不相等,并使用Welsh的修正自由度。可以添加一個參數var.equal=TRUE以假定方差相等,并使用合并方差估計。默認的備擇假設是雙側的(即均值不相等,但大小的方向不確定)。可以添加一個參數alternative="less"或“greater”進行有方向的檢驗。
上例為一個假設方差不等的雙側檢驗,比較了南方(group1)和非南方(group2)各州的監(jiān)禁概率。因為p<0.001可以拒絕南方各州和非南方各州擁有相同監(jiān)禁概率的假設。
非獨立樣本的t檢驗
非獨立樣本的t檢驗假定組間的差異呈正態(tài)分布。調用的格式為t.test(y1,y2,paired=TRUE)其中y1和y2為兩個非獨立組的數值向量。
上例代表差異的均值(61.5)足夠大,可以保證拒絕年長和年輕男性的平均失業(yè)率相同的假設。年輕男性的失業(yè)率更高。
第五部分 組間差異的非參數檢驗
如果數據無法滿足t檢驗或ANOVA的參數假設,可以使用非參數檢驗。如果結果變量在本質上出現嚴重偏倚或呈現有序關系,則需要使用非參數檢驗。
兩組的比較
若兩組數據獨立,可使用Wilcoxon秩和檢驗(又稱Mann-WhitneyU檢驗)來評估觀測是否是從相同的概率分布中抽得的(即,在一個總體中獲得更高得分的概率是否比另一個總體更大)。調用格式:wilcox.test(y~x,data)其中y是數值型變量,x是二分變量。調用格式或為:wilcox.test(y1,y2)其中y1和y2為各組的結果變量。可選參數data的取值為一個包含了這些變量的矩陣或數據框。默認進行一個雙側檢驗。可以添加參數exact來進行精確檢驗,指定alternative="less"或="greater"進行有方向的檢驗。
Wilcoxon符號秩和檢驗是非獨立樣本t檢驗的一種非參數替代方法。適用于兩組成對數據和無法保證正態(tài)性假設的情境。調用格式與Mann-WhitneyU檢驗完全相同,但還可以添加參數paired=TRUE。
當t檢驗的假設合理時,參數檢驗的功效更強(更容易發(fā)現存在的差異)。而非參數檢驗在假設非常不合理時(如對于等級有序數據)更適用。
多于兩組的比較
如果各組獨立——Kruskal-Wallis檢驗;各組不獨立(如重復測量設計或隨機區(qū)組設計)——Friedman檢驗。Kruskal-Wallis檢驗的格式:kruskal.test(y~A,data)其中y是一個數值型結果變量,A是一個擁有兩個或更多水平的分組變量。而Friedman檢驗的格式為:friedman.test(y~A|B,data)其中y是一個數值型結果變量,A是分組變量。B是一個用以認定匹配觀測的區(qū)組變量。data均為可選參數,指定了包含這些變量的矩陣或數據框。
史上花費時間最長的一章筆記。。。
感覺難度不大,主要是涉及的統(tǒng)計方法比較多。