Peaches’Notepad
綜合各路大神,講了三遍可是把自己講會(huì)了
代碼們 開(kāi)整
?
#7.1 描述性統(tǒng)計(jì)分析
#示例
myvars<-c("mpg","hp","wt")#生成向量
head(mtcars[myvars])#查看
dt<-mtcars[myvars]#賦值給dt#7.1.1方法云集
#基礎(chǔ)安裝
summary(dt)
#圖基五數(shù)總括
# 即最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)和最大值)針對(duì)其中一個(gè)變量
fivenum(dt$hp)#apply(x,margin,FUN,...)將一個(gè)任意函數(shù)“應(yīng)用”到矩陣、數(shù)組、數(shù)據(jù)框的任何維度上
apply(dt,2,mean)#sapply(x,FUN)#自定義一個(gè)函數(shù):
mystats<-function(x,na.omit=FALSE){if(na.omit)#如果忽略nax<-x[!is.na(x)]#判斷 如果x是非缺失值,去掉了na
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))} #計(jì)算完返回sapply(dt, mystats)#7.1.2 更多方法install.packages("Hmisc")
#Hmisc::describe(dt)
library(Hmisc)
describe(dt)install.packages("pastecs")
# stat.desc(x, basic = TRUE, desc = TRUE, norm = FALSE, p = 0.95)
library(pastecs)
stat.desc(dt,norm = TRUE)install.packages("psych")
library(psych)
describe(dt)#7.1.3 分組計(jì)算描述性統(tǒng)計(jì)量
#如果使用的是list(mtcars$am),則am列將被標(biāo)注為 Group.1而不是am.
aggregate(dt,by=list(mtcars$am),sd)
aggregate(dt,by=list(am=mtcars$am),sd)
#如果有多個(gè)分組變量,可以使用by=list(name1=groupvar1, name2=...
aggregate(dt,by=list(am=mtcars$am,cyl=mtcars$cyl),mean)#aggregate只能使用單返回值函數(shù)
#使用by()分組計(jì)算描述性統(tǒng)計(jì)量 自定義函數(shù)dstats<-function(x)sapply(x,mystats)
by(dt,mtcars$am,dstats)#7.1.4分組計(jì)算的擴(kuò)展
#1)doBy
install.packages("doBy")
library(doBy)
summaryBy(mpg+hp+wt~mtcars$am,data=mtcars,FUN = mystats)#2)psych
install.packages("psych")
library(psych)
describeBy(dt,list(am=mtcars$am))#與describe相同的統(tǒng)計(jì)量,不允許指定函數(shù)#3)reshape
install.packages("reshape")
library(reshape)
dstats<-function(x)(c(n=length(x),mean=mean(x),sd=sd(x)))
#融合:dfm <- melt(dataframe, measure.vars = y, id.vars = g)
#y:數(shù)值型變量(默認(rèn)使用所有變量),g:一個(gè)或多個(gè)分組變量組成的向量#重鑄:cast(dfm, groupvar1, groupvar2 + ... + variable - ., FUN)
#variable只取其字面含義(即僅表示重鑄后數(shù)據(jù)框中的變量variable)
dfm<-melt(mtcars,measure.vasrs=c("mpg","hp","wt"),id.vars=c("am","cyl"))
cast(dfm,am+cyl+variable~.,dstats)#7.2頻數(shù)表和列聯(lián)表
library(vcd)
head(Arthritis)#7.2.1 生成頻數(shù)表
#1)一維列聯(lián)表
#table()函數(shù)
mytable1<-with(Arthritis,table(Improved))
mytable1
#prop()函數(shù)---轉(zhuǎn)化為比例值
prop.table(mytable1)
prop.table(mytable1)*100#2)二維列聯(lián)表
#table(A,B)函數(shù)
mytable2<-table(Treatment=Arthritis$Treatment,Improved=Arthritis$Improved)
mytable2#xtabs(~A+B,data=mydata)函數(shù)
mytable2<-xtabs(~Treatment+Improved,data=Arthritis)
mytable2#margin.table()
margin.table(mytable2,1)#對(duì)行進(jìn)行操作
margin.table(mytable2,2)#prop.table()
prop.table(mytable2,1)
prop.table(mytable2,2)##各單元格所占比例
prop.table(mytable2)#概述邊margins,為表格添加邊際和
addmargins(mytable2)#(默認(rèn)是為表中所有變量創(chuàng)建邊際和)
addmargins(prop.table(mytable2))addmargins(prop.table(mytable2,1),2)
addmargins(prop.table(mytable2,2),1)#3)gmodels-CrossTable
#install.packages("gmodels")
library(gmodels)
CrossTable(Arthritis$Treatment,Arthritis$Improved)
#3)多維列聯(lián)表
mytable3<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable3#ftable()函數(shù)可以以一種緊湊而吸引人的方式輸出多維列聯(lián)表
ftable(mytable3)
#邊際頻數(shù)
margin.table(mytable3,1)
margin.table(mytable3,2)
margin.table(mytable3,3)margin.table(mytable3,c(1,3))##治療情況x改善情況的分組邊際頻數(shù)#治療情況x性別的各類(lèi)改善情況的比例,比例將被添加在不在prop.table調(diào)用的下標(biāo)上
ftable(prop.table(mytable3,c(1,2)))
#治療情況x性別的各類(lèi)改善情況的邊際和
##將被添加在不在prop.table調(diào)用的下標(biāo)上
ftable(addmargins(prop.table(mytable3,c(1,2)),3))
ftable(addmargins(prop.table(mytable3,c(1,2)),3))*100#7.2.2獨(dú)立性檢驗(yàn):
#1、卡方獨(dú)立性檢驗(yàn)
#對(duì)數(shù)據(jù)框中的兩列進(jìn)行檢驗(yàn),是否獨(dú)立
##原假設(shè) 相互獨(dú)立#治療情況與改善情況
mytable2<-xtabs(~Treatment+Improved,data=Arthritis)
chisq.test(mytable2)
#治療情況和改善情況不獨(dú)立#性別與改善情況
mytable3<-xtabs(~Improved+Sex,data=Arthritis)
mytable3
chisq.test(mytable3)
#性別和改善情況獨(dú)立
#warning出現(xiàn),因?yàn)楸碇袉卧裰挥幸粋€(gè)小于5的值,可能會(huì)導(dǎo)致卡方近似無(wú)效#Fisher精確檢驗(yàn)
##不能用于2x2列聯(lián)表
mytable2<-xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable2)#Cochran-Mantel-Haenszel檢驗(yàn)
#檢驗(yàn)治療情況和改善情況在性別的每一水平下是否獨(dú)立(原假設(shè)獨(dú)立)mytable4<-xtabs(~Treatment+Improved+Sex,data=Arthritis)
mantelhaen.test(mytable4)#7.2.3相關(guān)性的度量library(vcd)
assocstats(mytable2)#7.3 相關(guān)#7.3.1 相關(guān)的類(lèi)型# cor(x,use=,method= )
states<-state.x77[,1:6]
cor(states)#默認(rèn)的method是pearson
cor(states,method="spearman")cov(states)#有目的地針對(duì)某兩組變量之間的關(guān)系進(jìn)行研究
#非方形的相關(guān)矩陣
x <- states[,c("Population", "Income", "Illiteracy", "HS Grad")]
y <- states[,c("Life Exp", "Murder")]
cor(x,y)#偏相關(guān):在控制一個(gè)變量時(shí),另兩個(gè)變量的相關(guān)性。
install.packages("ggm")
library(ggm)
colnames(states)
pcor(c(1,5,2,3,6),cov(states))#7.3.2 相關(guān)性的顯著性檢驗(yàn)
#cor.test(x,y,alternative=less/greater/two side,method= )cor.test(states[,3],states[,5])#檢驗(yàn)相關(guān)矩陣下的所有相關(guān)系數(shù):corr.test()
library(psych)
corr.test(states,use="complete")
#若需要顯示相關(guān)系數(shù)95%CI,以print()函數(shù)打印該檢驗(yàn)結(jié)果并聲明參數(shù)short=FALSE
print(corr.test(states,method = "pearson"),short = FALSE)#偏相關(guān)系數(shù)的顯著性檢驗(yàn)
library(ggm)
#pcor.test(pcor()輸出結(jié)果,q=控制變量序號(hào),n=觀測(cè)記錄數(shù))
pcor.test(r=pcor(c(1,5,2,3,6),cov(states))
,q=c(2,3,6),n=nrow(states))#7.4 t檢驗(yàn)
#7.4.1 獨(dú)立樣本t檢驗(yàn)
#t.test(y~x,data) OR t.test(y1,y2)
library(MASS)
dt2<-UScrime
t.test(Prob~So,data=dt2)#7.4.2 非獨(dú)立樣本的t檢驗(yàn)
library(MASS)
sapply(dt2[c("U1","U2")], function(x)(c(mean=mean(x),sd=sd(x))))
#配對(duì)t檢驗(yàn)with(dt2,t.test(U1,U2,paired=TRUE))#7.5組間差異的非參數(shù)檢驗(yàn)
#7.5.1 兩組的比較
with(dt2, by(Prob, So, median))
#相互獨(dú)立
wilcox.test(Prob~So,data=dt2)
#不相互獨(dú)立
with(dt2, wilcox.test(U1, U2, paired = TRUE))#7.5.2多于兩組的比較
#各組獨(dú)立
dts<-data.frame(state.region,state.x77)
kruskal.test(Illiteracy~state.region,data = dts)
#四個(gè)地區(qū)的文盲率各不相同#各組不獨(dú)立
dt3<-matrix(1:20,nrow = 4,ncol = 5)
dt3
friedman.test(dt3)#作者拓展
source("http://www.statmethods.net/RiA/wmc.txt")
states <- data.frame(state.region, state.x77)
wmc(Illiteracy ~ state.region, data=states, method="holm")
總結(jié)
以上是生活随笔為你收集整理的R语言实战(第二版)第七章-基本统计分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。