1. 程式人生 > >R語言統計分析篇

R語言統計分析篇

1.描述性統計分析

(1)方法雲集

通過summary,sapply()計算描述性統計量

vars<-c("mpg","hp","wt")
vars
head(mtcars[vars])
#通過summary()函式來獲取描述性統計量
summary(mtcars[vars])
#sapply()函式,格式:sapply(x,FUN,options)x:資料框或矩陣;FUN:為任意的函式;options:若被指定,則將被傳遞給FUN
#通過sapply()計算描述性統計量
mystats<-function(x,na.omit=FALSE){
  if(na.omit)
    x<-x[!is.na(x)]
  m<-mean(x)
  n<-length(x)
  s<-sd(x)
  skew<-sum((x-m)^3/s^3)/n
  kurt<-sum((x-m)^4/s^4)/n-3
  return(c(n=n,mean=m,stdev=s,skew=skew,kurtosis=kurt))
}
sapply(mtcars[vars],mystats)



通過Hmisc包中的describe()函式計算描述性統計量

library(Hmisc)
describe(mtcars[vars])


通過pastecs包中的stat.desc()函式計算描述性統計量

格式:stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)

x 是一個數據框或時間序列
basic=TRUE 計算其中所有值、空值、缺失值的數量
以及最小值 、最大值、值域還有總和
desc=TRUE 計算中位數、平均數、平均數的標準誤,
平均數置信度為95%的置信區間、方差、標準差以及變異係數
norm=TRUE 返回正態統計量,包括信度和峰度(以及它們的統計顯著程度)
及Shapiro-Wilk正態檢驗結果
p
library(pastecs)
stat.desc(mtcars[vars])

通過psych包中的describe()計算描述性統計量

可計算非缺失值的數量、平均數、標準差、中位數、截尾均值、絕對中位差、最小值、最大值、值域、偏度、峰度和平均值的標準誤

library(psych)
describe(mtcars[vars])

(2)分組計算描述性統計量

使用aggregate()分組獲取描述性統計量

注意:aggregate()僅允許在每次呼叫中使用平均數、標準差這樣的單返回值函式 

aggregate(mtcars[vars],by=list(am=mtcars$am),mean)
aggregate(mtcars[vars],by=list(am=mtcars$am),sd)

使用by()分組計算描述性統計量

by(data,INDICES,FUN)

dstats<-function(x)(c(mean=mean(x),sd=sd(x)))
by(mtcars[vars],mtcars$am,dstats)

使用doBy包中的summaryBy()分組計算概述統計量

library(doBy)
summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)

使用psych包中的describe.by()分組計算概述統計量

library(psych)
describeBy(mtcars[vars],mtcars$am)



使用reshape包分組計算概述統計量

library(reshape)
dstats<-function(x)(c(n=length(x),mean=mean(x),sd=sd(x)))
dfm<-melt(mtcars,measure.vasrs=c("mpg","hp","wt"),id.vars=c("am","cyl"))
cast(dfm,am+cyl+variable~.,dstats)

2.頻數表和列聯表

(1)生成頻數表

用於建立和處理列聯表的函式

函式 描述
table(var1,var2,…,varN) 使用N個類別變數(因子)
建立一個N維列聯表
xtabs(forula,data) 根據一個公式和一個矩陣或資料框建立一個N維列聯表
prop.table(table,margins) 依margins定義的邊際列表中條目表示為分數形式
margin.table(table,margins) 依margins定義的邊際列表計算表中條目的和
addmargins(table,margins) 將概述邊margins放入表中
ftable(table) 建立一個緊湊的”平鋪“式列聯表

(2)一維列聯表

eg

install.packages("vcd")
library(vcd)
mytable<-with(Arthritis,table(Improved))
mytable
#使用prop.table()將頻數轉化為比例值:
prop.table(mytable)
#使用prop.table()*100轉化為百分比
prop.table(mytable)*100


(3)二維列聯表

table()

格式: table(A,B)#A是行變數,B是列變數 xtabs(~A+B,data=mydata)#其中mydata是一個矩陣或資料框;要進行交叉分類的變數應出現在公式的右側(即~符號的右方),以+作為分隔符 eg:
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
mytable
#可以使用margin.table()和prop.table()函式分別生成邊際頻數和比例
margin.table(mytable,1) #下標1指代table()語句中的第一個變數
prop.table(mytable,1)
#列和列比例可以這樣計算
margin.table(mytable,2)#下標2指代table()語句中的第二個變數
prop.table(mytable,2)
#各單元所佔比例可用如下語句獲取
prop.table(mytable)
#可使用addmargins()函式為表格新增邊際和;使用addmargins()時,預設行為是為表中所有的變數建立邊際和
addmargins(mytable)
addmargins(prop.table(mytable))
#僅新增各行的和
addmargins(prop.table(mytable,1),2)
#僅新增各列的和
addmargins(prop.table(mytable,2),1)


注意:table()函式預設忽略缺失值(NA),要在頻數統計中將NA視為一個有效的類別,請設定引數useNA="ifany"

使用CrossTable生成二維列聯表

install.packages("gmodels")
library(gmodels)
CrossTable(Arthritis$Treatment,Arthritis$Improved)

(4)多維列聯表

table()

xtabs()

margin.table()

prop.table()

addmargins()

ftable()

eg:

mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable


ftable(mytable)

mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable
ftable(mytable)
margin.table(mytable,1)#邊際頻數
margin.table(mytable,2)
margin.table(mytable,3)
margin.table(mytable,c(1,3)) #治療情況(Treatment)*改善情況(Improved)的邊際頻數
ftable(prop.table(mytable,c(1.2))) #Treatment * Sex 的各類改善情況比例
ftable(addmargins(prop.table(mytable,c(1,2)),3))
ftable(addmargins(prop.table(mytable,c(1,2)),3))*100 #得到百分比而不是比例,可將結果乘以100


(5)獨立性檢驗

名稱  原理 函式
卡方獨立性檢驗 對二維表的行變數和列變數進行卡方獨立性檢驗 chisq.test()
Fisher精確檢驗 邊界固定的列聯表中行和列是相互獨立的
注意:與許多統計軟體不同的是,這裡fisher.test()函式可以在任意行列數大於等於2的二維旬聯表上使用,但不能用於2*2的列表
fisher.test()
Cochran-Mantel-Haenszel檢驗 兩個名義變數在第三個變數的每一層中都是條件獨立的 mantelhaen.test()

library(vcd)
mytable<-xtabs(~Treatment+Improved,data=Arthritis) #Treatment和Improved是否獨立
chisq.test(mytable)
mytable<-xtabs(~Improved+Sex,data=Arthritis)
chisq.test(mytable)


</pre><pre code_snippet_id="374527" snippet_file_name="blog_20140604_18_9851680" name="code" class="plain">mytable<-xtabs(~Treatment+Improved,data=Arthritis) 
fisher.test(mytable)
mytable<-xtabs(~Treatment+Improved+Sex,data=Arthritis) 
mantelhaen.test(mytable)

(6)相關性的度量

若變數間不獨立,衡量相關性強弱的相關性度量

library(vcd)
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
assocstats(mytable)

較大的值意味著較強的相關性

vcd包中也提供了一個kappa()函式,可以計算混淆矩陣的Cohen's kappa值以及加權的kappa值(混淆矩陣可表示兩位遮天蓋地者對於一系列物件進行分類 所得結果的一致程度)

(7)結果視覺化

將錶轉換為扁平格式

通過table2flat將錶轉換為扁平格式

table2flat<-function(mytable){
  df<-as.data.frame(mytable)
  rows<-dim(df)[1]
  cols<-dim(df)[2]
  x<-NULL
  for(i in 1:rows){
    for(j in 1:df$Freq[i]){
      row<-df[i,c(1:(cols-1))]
      x<-rbind(x,row)
    }
  }
  row.names(x)<-c(1:dim(x)[1])
  return(x)
}
table2flat(mytable)

mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable
mytable<-ftable(mytable)
df<-as.data.frame(mytable)
df
rows<-dim(df)[1]
rows
cols<-dim(df)[2]
cols
df$Freq[1]


3.相關

(1)相關型別

相關型別

定義

函式

Pearson積差相關係數

衡量兩個定量變數之間的線性相關程度

cor(x,use=,method=pearson)

Spearman等級相關係數

衡量分級定序變數之間的相關程度

cor(x,use=,method=spearman)

Kendall's Tau相關係數

是一種非引數的等級相關度量

cor(x,use=,kendall)

(2)協方差和相關係數

states<-state.x77[,1:6]
states
cov(states)
cor(states)
cor(states,method="spearman")

(3)偏相關

偏相關是指在控制一個或多個定量變數時,另外兩個定量變數之間的相互關係,

可使用ggm包中的pcor()函式計算偏相關係數

函式呼叫格式為:

Pcor(u,S)

其中u是一個數值向量,前兩個數值表示要計算相關係數的變數下標,其餘的數值為條件變數(即要排除影響的變數)的下標。

S為變數的協方差陣

Eg:

install.packages("ggm")
library(ggm)
pcor(c(1,5,2,3,6),cov(states))

(4)相關性的顯著性檢驗

格式:

Cor.test(x,y,alternative=,method=)

cor.test(states[,3],states[,5])  #cor.test每次只能檢驗一種相關關係,psych包中提供的corr.test()可一次做更多的事

psych包中的pcor.test()函式可以用來檢驗在控制一個或多個額外變數時兩個變數之間的條件獨立性,

格式為:pcor.test(r,q,n)

 R是由pcor()函式計算得到的偏相關係數

 Q為要控制的變數數(以數值表示位置)

 N為樣本的大小

4.t檢驗

(1)獨立樣本的t檢驗

檢驗的呼叫格式為:

t.test(y~x,data)

eg

library(MASS)
t.test(Prob~So,data=UScrime)

(2)非獨立樣本的t檢驗

在兩組的觀測之間相關時,獲得的是一個非獨立組設計(dependent groups design)

前-後測設計(pre-post design)

重複測量設計(repeated measures design)

呼叫格式:

t.test(y1,y2,paired=TRUE)

eg

library(MASS)
sapply(UScrime[c("U1","U2")],function(x)(c(mean=mean(x),sd=sd(x))))
with(UScrime,t.test(U1,U2,paired=TRUE))
 

若想在多於兩個的組之間進行比較,若假設資料是從正態總體中獨立抽樣而得的,可使用方差分析(ANOVA)

5. 組間差異的非引數檢驗

(1)兩組的比較

若兩組資料獨立,可使用Wilcoxon秩和檢驗(Mann-WhitneyU檢驗)來評估觀測是否是從相同的概分佈中抽得的 呼叫格式為: wilcox.test(y~x,data)  其中y是數值型變數,x是一個二分變數 呼叫 格式 為: wilcox.test(y1,y2)          其中y1和y2為各組的結果變數
library(MASS)
with(UScrime,by(Prob,So,median))


wilcox.test(Prob~So,data=UScrime)


(2)多於兩組的比較

若無法滿足ANOVA設計的假設,可以使用非引數方法來評估組間的差異。

若各組獨立,Kruskal-Wallis檢驗是一種實用的方法

若各組不獨立(如重複測量設計或隨機區組設計),則Friedman檢驗更合適

Kruskal-Wallis呼叫格式為:kruskal.test(y~A,data)    (y是數值型 結果變數,A是一個分組變數,而B是一個用以認定匹配觀測的區組變數(blocking variable))

states<-as.data.frame(cbind(state.region,state.x77))
kruskal.test(Illiteracy~state.region,data=states)


非引數多組比較

install.packages("npmc")
library(npmc)
class<-state.region
var<-state.x77[,c("Illiteracy")]
mydata<-as.data.frame(cbind(class,var))
rm(class,var)
summary(npmc(mydata),type="BF")
aggregate(mydata,by=list(mydata$class),median)



相關推薦

R語言統計分析

1.描述性統計分析 (1)方法雲集 通過summary,sapply()計算描述性統計量 vars<-c("mpg","hp","wt") vars head(mtcars[vars]) #通過summary()函式來獲取描述性統計量 summary(mtcars[

R語言統計分析技術研究——嶺回歸技術的原理和應用

gts 根據 誤差 med 分享 jce not -c rt4 嶺回歸技術的原理和應用

R語言統計入門課程推薦——生物科學中的資料分析Data Analysis for the Life Sciences

Data Analysis for the Life Sciences是哈佛大學PH525x系列課程——生物醫學中的資料分析(PH525x series - Biomedical Data Science ),課程全部採用R語言進行統計分析理論教學與實戰。教材採用Rmarkdo

R語言關聯分析之啤酒和尿布

mea mar 簡單 active 兩個 mark 情況 rgb efault 關聯分析概述啤酒和尿布的故事,我估計大家都聽過,這是數據挖掘裏面最經典的案例之一。它分析的方法就關聯分析。關聯分析,顧名思義,就是研究不同商品之前的關系。這裏就發現了啤酒和尿布這兩個看起來毫不相

R語言︱情感分析—詞典型代碼實踐(最基礎)(一)

text cto 關於 ora 訓練集 其他 查找 rap boa R語言︱情感分析—基於監督算法R語言實現筆記。 可以與博客 R語言︱詞典型情感分析文本操作技巧匯總(打標簽、詞典與數據匹配等)對著看。 詞典型情感分析大致有以下幾個步驟: 訓練數據集、neg/pos情感

R-基本統計分析--描述性統計分析

及其 pre dice 數據集 returns length 平均值 sun 52.0 描述性統計分析主要包括 基本信息:樣本數、總和 集中趨勢:均值、中位數、眾數 離散趨勢:方差(標準差)、變異系數、全距(最小值、最大值)、內四分位距(25%分位數、75%分位數) 分布

R-基本統計分析--獨立、相關性及其檢驗

獨立性檢驗-(卡方、Fisher) 獨立性檢驗_百度百科 https://baike.baidu.com/item/%E7%8B%AC%E7%AB%8B%E6%80%A7%E6%A3%80%E9%AA%8C/4031921?fr=aladdin R之獨立性檢驗 -

R語言 生存分析

文章目錄 R語言進行生存分析 1.下載示例資料 2.R語言程式碼例項詳解 3.難點解讀 4.補充:如何用R語言 手動計算生存率 R語言進行生存分析 1.下載示例資料 示例資料連線 2.R語言程

R語言 迴歸分析函式說明

迴歸分析相關的函式 1、一元線性迴歸 lm() #計算beta0,beta1引數 summary() # 提取lm()引數資訊 anovn() #方差分析 predict() # 根據給出自變數預測因變數的值 例: a=lm(y~1+x,data=…) #對x,y

R語言bootstrap分析(boot)

//## bootstrap分析資料,package = "boot" > library(boot) > city u x 1 138 143 2 93 104 3 61 69 4 179 260 5 48 75 6 37 63 7

R語言-錯誤分析-Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : invalid graphics state

plot時,出現的錯誤01 > ggplot(religions_long, + aes(State, value, fill = variable)) + + geom_bar(stat = "identity") + + coord_flip()

分享《R語言資料分析與挖掘實戰(張良均等)》中文PDF+原始碼

下載:https://pan.baidu.com/s/1I7hm-LP5H3-57vsUjOxeNw 更多資料分享:https://pan.baidu.com/s/1g4hv05UZ_w92uh9NNNkCaA 《R語言資料分析與挖掘實戰(張良均等)》PDF+原始碼 PDF,339頁。 配套資料與原始

R語言探索性分析及plyr資料轉換包

R包dplyr可用於處理R內部或者外部的結構化資料,相較於plyr包,dplyr專注接受dataframe物件, 大幅提高了速度,並且提供了更穩健的資料庫介面。 下面針對一些具體的例子介紹探索性分析和plyr資料轉換包 統計diamonds(R語言自帶的資料

R語言--統計--PCA

test<-data.frame( x1=c(150,142,164,160,189,132,220,167,176,120,169,122,154,247,180,220,176,157,160,138 ), x2=c(30,28,30,32,35,36,38,34,31,33,40,50,

R語言--統計--決策樹

library(tree) Heart = read.csv("yumath.csv",header=TRUE,na.strings="NA") fit = tree(y1 ~ x1 + x2+ x3+x4+x5, Heart) summary(fit) plot(fit) text(fit)

R語言--統計(六)

1. 平均值、中位數和模式 Mean平均值 I. 語法 用於計算R中的平均值的基本語法是 - mean(x, trim = 0, na.rm = FALSE, ...) 以下是所使用的引數的描述 - -- x是輸入向量。 -- trim用於從排序向量的兩端丟棄一些觀察結果。

R語言判別分析

自己整理編寫的R語言常用資料分析模型的模板,原檔案為Rmd格式,直接複製貼上過來,作為個人學習筆記儲存和分享。部分參考薛毅的《統計建模與R軟體》和《R語言實戰》 本文中分三個方法介紹判別分析,Bayes判別,距離判別,Fisher判別。前兩種判別方法都要考慮兩個、或多個總體協方差(這裡是

R語言生存分析

自己整理編寫的R語言常用資料分析模型的模板,原檔案為Rmd格式,直接複製貼上過來,作為個人學習筆記儲存和分享。部分參考薛毅的《統計建模與R軟體》和《R語言實戰》 生存分析是研究生存時間的分佈規律,以及生存時間和相關因素之間關係的一種統計分析方法。生存分析在醫學科學研究中具有廣泛而重要的應

R語言因子分析

自己整理編寫的R語言常用資料分析模型的模板,原檔案為Rmd格式,直接複製貼上過來,作為個人學習筆記儲存和分享。部分參考薛毅的《統計建模與R軟體》和《R語言實戰》 因子模型: X=μ + A*F* + ε 其中F=[(f1,f2,…,fm)]^T為公共因子向量,[ε=(ε1,ε2,…,ε

[R語言統計]秩轉換的非引數檢驗

在R中,wilcox.test()函式可以用來做Wilcoxon秩和檢驗,也可以用於做Mann-Whitney U檢驗。當引數為單個樣本,或者是兩個樣本相減,或者是兩個引數,paired=F時,是Wilcoxon秩和檢驗。當paired = FALSE(獨立樣本)時,就是Mann-Whitney U檢