第7章 基本統(tǒng)計分析

《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)計。

summary()函數的應用

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()函數的應用

如果想忽略缺失值,則應當用sapply(mtcars[myvars],mystats,na.omit=TRUE)

3.通過Hmisc包中的describe()函數計算

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)。

pastecs包中的stat.desc()函數的應用

5.通過psych包中的describe()函數

psych包也擁有一個名為describe()的函數,它可以計算非缺失值的數量、平均值、標準差、中位數、截尾均值、絕對中位差、最小值、最大值、值域、偏度、峰度和平均值的標準誤。

psych包中的describe()函數的應用

psych包和Hmisc包均提供了名為describe()的函數。R如何知道該使用哪個呢?最后載入的程序包優(yōu)先。如果想改為前一個包,如這里的Hmisc包,可以鍵入Hmisc:describe(mt)。

分組計算描述性統(tǒng)計量

1.使用aggregate()分組獲取 描述性統(tǒng)計量

aggregate()的應用

list(am=mtcars$am)與list(mtcars$am)的區(qū)別

list(mtcars$am)

使用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是任意函數。

by()函數的應用

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函數。

doBy包中的summaryBy()的應用

第二部分 頻數表和列聯(lián)表

頻數表和列聯(lián)表適用于類別型變量。本章的數據集為一項風濕性關節(jié)炎新療法的雙盲臨床試驗結果。

數據集均為類別型因子

生成頻數表

用于創(chuàng)建和處理列聯(lián)表的函數

往往第一步是使用table()或xtabs()函數創(chuàng)建一個表,然后用其他函數處理它。

1.一維列聯(lián)表

可以使用table()函數生成簡單的頻數統(tǒng)計表。

table()函數

可以用prop.table()將這些頻數轉化為比例值

prop.table()函數

可以用prop.table()*100轉化為百分比

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是一個矩陣或數據框。要進行交叉分類的變量出現在公式的右側(~的右側),以+作為分隔符。若某個變量寫在公式的左側,則其為一個頻數向量(在數據已經被表格化時很有用)

xtabs()函數的應用

也可以用margin.table()和prop.table()函數分別生成邊際頻數和比例。行和與行比例:

以行變量的margin.table()和prop.table()函數的應用

下標1指代table()語句中的第一個變量。如上代碼所示,接受安慰劑治療的明顯改善的有16%,接受治療的明顯改善的有51%。下標2指代table()語句中的第二個變量。

以列變量的margin.table()和prop.table()函數的應用

PS:行變量為1,列變量為2。若設置為行變量的話,則行的數相加為1。

各單元格所占的比例可以用以下語句獲取。

各單元格所占的比例語句

也可以使用addmargins()函數為這些表格添加邊際和。在使用addmargins()函數默認給表中所有的變量創(chuàng)建邊際和。

addmargins()函數為所有變量創(chuàng)建邊際和
addmargins()函數為行變量和列變量分別創(chuàng)建邊際和

注意:table()函數默認忽略缺失值(NA)。要在頻數統(tǒng)計中將NA視為一個有效的類別,需設定參數useNA="ifany"

使用CrossTable生成二維列聯(lián)表

CrossTable()函數的應用

CrossTable()函數有許多選項,可以計算(行、列、單元格)的百分比;指定小數位數;進行卡方、Fisher和McNemar獨立性檢驗;計算期望和(皮爾遜、標準化、調整的標準化)殘差;將缺失值作為一種有效值;進行行和列標題的標注;生成SAS和SPSS風格的輸出;具體參閱help(CrossTable)

多維列聯(lián)表

table()和xtabs()都可以基于三個或更多的類別型變量生成多維列聯(lián)表。margin.table()、prop.table()和addmargins()函數可以自然推廣到高于二維的情況。

三維列聯(lián)表ftable()函數的應用

列聯(lián)表可以告訴組成表格的各種變量組合的頻數和比例。

獨立性檢驗

1.卡方獨立性檢驗

可以使用chisq.test()函數對二維表的行變量和列變量進行卡方獨立性檢驗。

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()函數的應用

fisher.test()函數與其他統(tǒng)計軟件不同,R中可以在任意行列數大于等于2的二維列聯(lián)表上使用,但不能用于2*2的列聯(lián)表。

3.Cochran-Mantel-Haenszel檢驗

mantelhaen.test()函數可以用于Cochran-Mantel-Haenszel卡方檢驗,其原假設為兩個名義變量在第三個變量的每一層中都是條件獨立的。下列代碼可以檢驗治療情況和改善情況在性別的每一水平下是否獨立。此檢驗假設不存在三階交互作用。(治療情況*改善情況*性別)

mantelhaen.test()函數的應用

結構顯示患者接受的治療與得到的改善在性別的每一水平下均不獨立,分性別來看,用藥治療的患者比較接受安慰劑的患者有了更多的改善。

第三部分 相關性的度量

上節(jié)的顯著性檢驗評估了是否存在充分地證據以拒絕變量間相互獨立的原假設。如果拒絕原假設,就需要研究衡量相關性強弱的相關性度量。vcd包中的assocstats()函數可以用來計算二維列聯(lián)表的phi系數、列聯(lián)系數和Cramer's系數。

二維列聯(lián)表的相關性度量

相關

相關系數可以用來描述定量變量之間的關系。相關系數的符號(+-)表明關系的方向(正相關或負相關),其值的大小表示關系的強弱程度(完全不相關為0,相關為1)。R可以計算多種相關系數。

1.Pearson、Spearman和Kendall相關

Pearson積差相關系數衡量了兩個定量變量之間的線性相關程度。Spearman等級相關系數則衡量分級定序變量之間的相關程度。Kendall's Tau相關系數也是一種非參數的等級相關度量。

cor()函數可以計算這三種相關系數,而cov()函數可用來計算協(xié)方差和方差。一般形式為cor(x,use=,method=)

cor和cov參數

默認參數為use="everything"和methods="pearson"。


協(xié)方差和相關系數

當需要找某一組變量與另一組變量之間的關系時,就可用cor()函數。但使用cor()函數未指明相關系數是否顯著不為0(即,根據樣本數據是否有足夠的證據得出總體相關系數不為0的結論)。所以需要對相對系數進行顯著性檢驗。

cor()函數的應用

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()計算相關矩陣并進行顯著性檢驗

也可通過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”進行有方向的檢驗。

t.test()函數的應用

上例為一個假設方差不等的雙側檢驗,比較了南方(group1)和非南方(group2)各州的監(jiān)禁概率。因為p<0.001可以拒絕南方各州和非南方各州擁有相同監(jiān)禁概率的假設。

非獨立樣本的t檢驗

非獨立樣本的t檢驗假定組間的差異呈正態(tài)分布。調用的格式為t.test(y1,y2,paired=TRUE)其中y1和y2為兩個非獨立組的數值向量。

非獨立樣本的t檢驗的例子

上例代表差異的均值(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均為可選參數,指定了包含這些變量的矩陣或數據框。

source()和wmc()函數的應用



史上花費時間最長的一章筆記。。。

感覺難度不大,主要是涉及的統(tǒng)計方法比較多。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372