R语言实战笔记
部分源代碼來自網絡——如若侵犯了您的權益,請與我聯系,我將立刻刪除。《R語言實戰》(Venables&Ripley(2000)Chambers(2008))
總結:腦殘地按一定格式調用函數,盡情蹂躪數據。
1 R基礎
在R中,對象(object)是指可以賦值給變量的任何事物,包括常量、數據結構、函數,甚至圖形。
變量可歸結為名義型、有序型或連續型變量。
2 數據的準備
可以使用read.table()從帶分隔符的文本文件中導入數據。此函數可讀入一個表格格式的文件并將其保存為一個數據框。
使用R來訪問存儲在外部數據庫中的數據是一種分析大數據集的有效手段,并且能夠發揮SQL和R各自的優勢。
x <- c(1:10)
#生成向量數據
opar <- par(no.readonly =TRUE)
#保留了當前的圖形參數設置
3 圖形初階
學習了如何修改一副圖形的坐標軸、字體、繪圖符號、線條和顏色,以及如何添加標題、副標題、標簽和文本、圖例和參考線,看到了如何指定圖形和邊界的大小,以及將多幅圖形組合為實用的單幅圖形。
要創建次要刻度線,你需要使用Hmisc包中的minor.tick()函數。
通過函數text()和mtext()將文本添加到圖形上。
par(mar =c(5,4,4,8)+0.1)
#增加邊界大小
plot(x,y,type = "b",pch =21,col ="red",yaxt ="n",lty ="3",ann ="FALSE")
#繪制x對y的圖形
par(lwd =2,cex =1.5, font.lab =2)
#增加線條、文本、符號、標簽的寬度或大小
polt(dose,drugA,type ="b",pch =17, lty =1, col ="red", ylim =c(0,60),main = "Drug Dosage",ylab ="Drug Response")
#繪制主圖
lines(dose,drugB,type ="b",pch =17, lty=2, col ="blue")
#向主圖添加線條
library(Hmisc)
minor.tick(nx =3,ny =3,tick.ration =0.5)
#添加次要刻度線
legend("topleft",inset = .05,title = "Drug Type", legend = c("A","B"), lty =c(1,2),pch =c(15,17), col =c("red","blue"))
#添加圖例
par(mfrow =c(2,2))
#在par()函數中使用圖形參數mfrow=(nrows,ncols)來創建按行填充的、行數為nrows、列數為ncols的圖形矩陣。
layout(matrix(c(1,1,2,3),2,2,byrow = TRUE)
#將第一幅圖置于第1行,兩幅圖置于第2行。單第1行中圖形的高度是第2行中圖形高度的二分之一。
par(fig =c(0,0.8,0.55,1),new =TRUE)
bloxplot(mtcars$wt,horizontal = TRUE,axes =FALSE)
#參數fig=的取值范圍是一個形如c(x1,x2,y1,y2)的數值向量。
在導入和清理完數據后,下一步通常就是逐個探索每個變量。這將為你提供每個變量分布的信息,對理解樣本的特征、識別意外的或有問題的值。這一步可以解釋變量間的基本關系,并且對于建立更復雜的模型來說是有益的第一步。
4 基本數據管理
mydata <- transform(mydata,sumx = x1+x2,meanx = (x1+x2)/2)
#transform()函數簡化了按需創建新變量并將其保存到數據框中的過程。
leadership <- within(leadership,{agecat <- NA agecat[age >75] <-"Elder"? agecat[age >=55 & age <=75] <-"Middle Aged"? agent[age <55]<-"Young"? })
#函數within()與函數with()類似,不同的是它允許你修改數據框。
is.datatype as.datatype
#類型轉換函數
total <-merge(dataframeA,dataframeB,by ="ID")
total <-cbind(A,B)
#將dataframeA和dataframeB按照ID進行了合并;直接合并
total <-rbind(dataframeA,dataframeB)
#縱向聯結通常用于向數據框中添加觀測
#數據框中的元素是通過dataframe[row indices,column indices]這樣的記號來訪問的
newdata <- leadership[which(gender == 'M' & age >30),]
#選擇了所有30歲以上的男性
newdata <- subset(leadership,gender == 'M' & age >25,select =gender:q4)
#選擇了所有25歲以上的男性,并保留了變量gender到q4
5 高級數據管理
set.seed(1234)
mean <- c(230.7,146.7,3.6)
sigma <- matrix(c(15360.8,6721.2,-47,1,6721.2,4700.9,-16.5,-47,1,-16.5,0.3),nrow =3,ncol =3)
mydata <- mvrnorm(500,mean,sigma)
dim(mydata)
#生成服從多元正態分布的數據
options(digits=2)
z <- scale(roster[,2:4])
#限定輸出小數點后2位
score <- apply(z,1,mean)
#默認情況下,函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化
roster <- cbind(roster,score)
#計算綜合得分,添加到花名冊中
y <- quantile(roster$score,c(.8,.6,.4,.2))
#通過使用邏輯運算符,將學生的百分位數排名重編碼為一個新的類別型成績變量
name <- strsplit((roster$Student),"")
#以空格為界把學生姓名拆分為姓氏和名字
Firstname <-sapply(name,"[",1)
Lastname <-sapply(name,"[",2)
#sapply()提取表中成分,"["是一個可以提取某個對象的一部分的函數
roster[order(Lastname,Firstname),]
獲取數據基本信息的圖形技術和統計方法。
6 基本圖形
barplot(counts,main ="Stacked Bar Plot",xlab ="Treatment",ylab ="Frequency",cole =c("red","yellow","green"),legend = rownames(counts))
#堆砌條形圖
barplot(counts,main ="Grouped Bar Plot",xlab ="Teeatment",ylab ="Frequency",col =c("red","yellow","green"),legend = rownames(counts),beside =TRUE)
#分組條形圖
hist(mtcars$mpg)
#簡單直方圖
hist(mtcars$mpg,breaks=12,col ="red",xlab ="Miles Per Gallon",main ="Colored histogram with 12 bins")
#指定組數和顏色
hist(mtcars$mpg,freq=FALSE,breaks=12,col ="red",xlab="Miles Per Gallon",main ="Histogram,rug plot,density curve")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col ="blue",lwd =2)
#添加軸須圖
x <- mtcars$mpg
h <- hist(x,break =12,col ="red",xlab ="Miles Per Gallon",main ="Histogram with normal curve and box")
xfit <-seq(min(x),max(x),length =40)
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col ="blue",lwd =2)
box()
#添加正態密度曲線和外框
7 基本統計分析
library(reshape)
dstats <- function(x) (c(n =length(x),mean =mean(x),sd =sd(x)))
dfm <- melt(mtcars,measure.vars= c("mpg","hp","wp"),id.vars =c("am","cyl"))
cast(dfm,am +cyl+variable~.,dstats)
#描述性統計量
mytable <- xtabs(~Treatment+Sex+Improved,data =Arthritis)
ftable(mytable)
margin.table(mytable,1)
#三維列聯表,邊際頻數,margin.table()和prop.table()函數分別生成邊際頻數和比例
margin.table(mytable,c(1,3))
#治療情況*改善情況的邊際頻數
ftable(prop.table(mytable,c(1,2))
#治療情況*性別的各類改善情況比例
library(vcd)
mytable <-xtabs(~Treatment+Improved,data=Arthritis)
chisq.test(mytable)
mytable <-tabes(~Improved+Sex,data=Arthritis)
chisq.test(mytable)
#卡方獨立性檢驗,治療情況和改善情況不獨立,性別和改善情況獨立
mytable<- xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable)
#使用fisher.test()函數進行Fisher精確檢驗
mytable <-xtabs(~Treatment+Improved +Sex,data=Arthritis)
mantelhean.test(mytable)
#mantelhean.test()函數可以進行Cochran-Mantel-Haenszel卡方檢驗
table2flat <-function(mytable){
?? dr <-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)<-(1:dim(x)[1])
?? return(x)
}
#接受R中的表格(行列數任意)并返回一個扁平格式的數據庫。
library(MASS)
t.test(Prob~So,data=UScrime)
#獨立樣本的T檢驗
t.test(y1,y2,paired=TRUE)
sapply(UScrime[c("U1","U2")],function(x)(c(mean=mean(x),sd =sd(x)))
with(UScrime,t.test(U1,U2,paired=TRUE))
#非獨立組差異t檢驗
wilcox.test(y~x,data)
wilcox.test(y1,y2)
#無法滿足t檢驗或ANOVA的參數假設,可以轉而使用非參數方法。
class <-state.region
var <-state.x77[,c("Illiteracy")]
mydata<-as.data.frame(cbind(class,var))
rm(class,var)
library(npmc)
summary(npmc(mydata),type="BF")
aggregate(mydata,by=list(mydata$class),median)
#成對組間比較結果
#各類別的文盲率中間值
對數值型結果變量和一系列數值型和(或)類別型預測變量之間的關系進行建模。
8 回歸
fit2 <- lm(weight~height+ I(height^2),data= woman)
summary(fit2)
plot(women$height,women$weight)
lines(women$height,fitted(fit2))
#擬合含二次項的等式
scatterplotMatrix()函數默認在非對角線區域繪制變量間散點圖,并添加平滑和線性擬合曲線。
fit <- lm(Murder~Population +Illiteracy+Income +Frost,data=states)
#當預測變量不止一個時,回歸系數的含義為,一個預測變量增加一個單位,其他預測變量保持不變時,因變量要增加的數量。
#兩個預測變量的交互項顯著,說明響應變量與其中一個預測變量的關系依賴于另外一個預測變量的水平。
library(gvlma)
gvmodel<- gvlma(fit)
#使用gvmodel對線性模型假設進行綜合驗證
#回歸診斷發現問題,處理回歸假設問題:刪除觀測點;變量變換;添加或刪除變量;使用其他回歸方法。
fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
#relweights()函數,計算預測變量的相對權重
9 方差分析
R中基本的實驗設計建模
擬合并解釋方差分析模型
檢驗模型假設
10 功效分析
判斷所需樣本量
計算效應值
評價統計功效
11 中級繪圖
二元變量和多元變量關系的可視化
繪制散點圖和折線圖
理解相關圖
學習馬賽克圖和關聯圖
12 重抽樣與自助法
理解置換驗證的邏輯
在線性模型中應用置換檢驗
利用自助法獲得置信區間
高級方法
13 廣義線性模型
建立廣義線性模型
預測類別型變量
計數型數據建模
14 主成分和因子分析
主成分分析
探索性因子分析
其他潛變量模型
15 處理缺失數據的高級方法
識別數據模式的可視化
完整案例分析
缺失數據的多重插補法
16 高級圖形進階
Trellis圖形和lattice包
ggplot2的圖形語法
交互式圖形
生物信息*類常見圖
總結:腦殘地按一定格式調用函數,盡情蹂躪數據。
1 R基礎
在R中,對象(object)是指可以賦值給變量的任何事物,包括常量、數據結構、函數,甚至圖形。
變量可歸結為名義型、有序型或連續型變量。
2 數據的準備
可以使用read.table()從帶分隔符的文本文件中導入數據。此函數可讀入一個表格格式的文件并將其保存為一個數據框。
使用R來訪問存儲在外部數據庫中的數據是一種分析大數據集的有效手段,并且能夠發揮SQL和R各自的優勢。
x <- c(1:10)
#生成向量數據
opar <- par(no.readonly =TRUE)
#保留了當前的圖形參數設置
3 圖形初階
學習了如何修改一副圖形的坐標軸、字體、繪圖符號、線條和顏色,以及如何添加標題、副標題、標簽和文本、圖例和參考線,看到了如何指定圖形和邊界的大小,以及將多幅圖形組合為實用的單幅圖形。
要創建次要刻度線,你需要使用Hmisc包中的minor.tick()函數。
通過函數text()和mtext()將文本添加到圖形上。
par(mar =c(5,4,4,8)+0.1)
#增加邊界大小
plot(x,y,type = "b",pch =21,col ="red",yaxt ="n",lty ="3",ann ="FALSE")
#繪制x對y的圖形
par(lwd =2,cex =1.5, font.lab =2)
#增加線條、文本、符號、標簽的寬度或大小
polt(dose,drugA,type ="b",pch =17, lty =1, col ="red", ylim =c(0,60),main = "Drug Dosage",ylab ="Drug Response")
#繪制主圖
lines(dose,drugB,type ="b",pch =17, lty=2, col ="blue")
#向主圖添加線條
library(Hmisc)
minor.tick(nx =3,ny =3,tick.ration =0.5)
#添加次要刻度線
legend("topleft",inset = .05,title = "Drug Type", legend = c("A","B"), lty =c(1,2),pch =c(15,17), col =c("red","blue"))
#添加圖例
par(mfrow =c(2,2))
#在par()函數中使用圖形參數mfrow=(nrows,ncols)來創建按行填充的、行數為nrows、列數為ncols的圖形矩陣。
layout(matrix(c(1,1,2,3),2,2,byrow = TRUE)
#將第一幅圖置于第1行,兩幅圖置于第2行。單第1行中圖形的高度是第2行中圖形高度的二分之一。
par(fig =c(0,0.8,0.55,1),new =TRUE)
bloxplot(mtcars$wt,horizontal = TRUE,axes =FALSE)
#參數fig=的取值范圍是一個形如c(x1,x2,y1,y2)的數值向量。
在導入和清理完數據后,下一步通常就是逐個探索每個變量。這將為你提供每個變量分布的信息,對理解樣本的特征、識別意外的或有問題的值。這一步可以解釋變量間的基本關系,并且對于建立更復雜的模型來說是有益的第一步。
4 基本數據管理
mydata <- transform(mydata,sumx = x1+x2,meanx = (x1+x2)/2)
#transform()函數簡化了按需創建新變量并將其保存到數據框中的過程。
leadership <- within(leadership,{agecat <- NA agecat[age >75] <-"Elder"? agecat[age >=55 & age <=75] <-"Middle Aged"? agent[age <55]<-"Young"? })
#函數within()與函數with()類似,不同的是它允許你修改數據框。
is.datatype as.datatype
#類型轉換函數
total <-merge(dataframeA,dataframeB,by ="ID")
total <-cbind(A,B)
#將dataframeA和dataframeB按照ID進行了合并;直接合并
total <-rbind(dataframeA,dataframeB)
#縱向聯結通常用于向數據框中添加觀測
#數據框中的元素是通過dataframe[row indices,column indices]這樣的記號來訪問的
newdata <- leadership[which(gender == 'M' & age >30),]
#選擇了所有30歲以上的男性
newdata <- subset(leadership,gender == 'M' & age >25,select =gender:q4)
#選擇了所有25歲以上的男性,并保留了變量gender到q4
5 高級數據管理
set.seed(1234)
mean <- c(230.7,146.7,3.6)
sigma <- matrix(c(15360.8,6721.2,-47,1,6721.2,4700.9,-16.5,-47,1,-16.5,0.3),nrow =3,ncol =3)
mydata <- mvrnorm(500,mean,sigma)
dim(mydata)
#生成服從多元正態分布的數據
options(digits=2)
z <- scale(roster[,2:4])
#限定輸出小數點后2位
score <- apply(z,1,mean)
#默認情況下,函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化
roster <- cbind(roster,score)
#計算綜合得分,添加到花名冊中
y <- quantile(roster$score,c(.8,.6,.4,.2))
#通過使用邏輯運算符,將學生的百分位數排名重編碼為一個新的類別型成績變量
name <- strsplit((roster$Student),"")
#以空格為界把學生姓名拆分為姓氏和名字
Firstname <-sapply(name,"[",1)
Lastname <-sapply(name,"[",2)
#sapply()提取表中成分,"["是一個可以提取某個對象的一部分的函數
roster[order(Lastname,Firstname),]
獲取數據基本信息的圖形技術和統計方法。
6 基本圖形
barplot(counts,main ="Stacked Bar Plot",xlab ="Treatment",ylab ="Frequency",cole =c("red","yellow","green"),legend = rownames(counts))
#堆砌條形圖
barplot(counts,main ="Grouped Bar Plot",xlab ="Teeatment",ylab ="Frequency",col =c("red","yellow","green"),legend = rownames(counts),beside =TRUE)
#分組條形圖
hist(mtcars$mpg)
#簡單直方圖
hist(mtcars$mpg,breaks=12,col ="red",xlab ="Miles Per Gallon",main ="Colored histogram with 12 bins")
#指定組數和顏色
hist(mtcars$mpg,freq=FALSE,breaks=12,col ="red",xlab="Miles Per Gallon",main ="Histogram,rug plot,density curve")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col ="blue",lwd =2)
#添加軸須圖
x <- mtcars$mpg
h <- hist(x,break =12,col ="red",xlab ="Miles Per Gallon",main ="Histogram with normal curve and box")
xfit <-seq(min(x),max(x),length =40)
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col ="blue",lwd =2)
box()
#添加正態密度曲線和外框
7 基本統計分析
library(reshape)
dstats <- function(x) (c(n =length(x),mean =mean(x),sd =sd(x)))
dfm <- melt(mtcars,measure.vars= c("mpg","hp","wp"),id.vars =c("am","cyl"))
cast(dfm,am +cyl+variable~.,dstats)
#描述性統計量
mytable <- xtabs(~Treatment+Sex+Improved,data =Arthritis)
ftable(mytable)
margin.table(mytable,1)
#三維列聯表,邊際頻數,margin.table()和prop.table()函數分別生成邊際頻數和比例
margin.table(mytable,c(1,3))
#治療情況*改善情況的邊際頻數
ftable(prop.table(mytable,c(1,2))
#治療情況*性別的各類改善情況比例
library(vcd)
mytable <-xtabs(~Treatment+Improved,data=Arthritis)
chisq.test(mytable)
mytable <-tabes(~Improved+Sex,data=Arthritis)
chisq.test(mytable)
#卡方獨立性檢驗,治療情況和改善情況不獨立,性別和改善情況獨立
mytable<- xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable)
#使用fisher.test()函數進行Fisher精確檢驗
mytable <-xtabs(~Treatment+Improved +Sex,data=Arthritis)
mantelhean.test(mytable)
#mantelhean.test()函數可以進行Cochran-Mantel-Haenszel卡方檢驗
table2flat <-function(mytable){
?? dr <-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)<-(1:dim(x)[1])
?? return(x)
}
#接受R中的表格(行列數任意)并返回一個扁平格式的數據庫。
library(MASS)
t.test(Prob~So,data=UScrime)
#獨立樣本的T檢驗
t.test(y1,y2,paired=TRUE)
sapply(UScrime[c("U1","U2")],function(x)(c(mean=mean(x),sd =sd(x)))
with(UScrime,t.test(U1,U2,paired=TRUE))
#非獨立組差異t檢驗
wilcox.test(y~x,data)
wilcox.test(y1,y2)
#無法滿足t檢驗或ANOVA的參數假設,可以轉而使用非參數方法。
class <-state.region
var <-state.x77[,c("Illiteracy")]
mydata<-as.data.frame(cbind(class,var))
rm(class,var)
library(npmc)
summary(npmc(mydata),type="BF")
aggregate(mydata,by=list(mydata$class),median)
#成對組間比較結果
#各類別的文盲率中間值
對數值型結果變量和一系列數值型和(或)類別型預測變量之間的關系進行建模。
8 回歸
fit2 <- lm(weight~height+ I(height^2),data= woman)
summary(fit2)
plot(women$height,women$weight)
lines(women$height,fitted(fit2))
#擬合含二次項的等式
scatterplotMatrix()函數默認在非對角線區域繪制變量間散點圖,并添加平滑和線性擬合曲線。
fit <- lm(Murder~Population +Illiteracy+Income +Frost,data=states)
#當預測變量不止一個時,回歸系數的含義為,一個預測變量增加一個單位,其他預測變量保持不變時,因變量要增加的數量。
#兩個預測變量的交互項顯著,說明響應變量與其中一個預測變量的關系依賴于另外一個預測變量的水平。
library(gvlma)
gvmodel<- gvlma(fit)
#使用gvmodel對線性模型假設進行綜合驗證
#回歸診斷發現問題,處理回歸假設問題:刪除觀測點;變量變換;添加或刪除變量;使用其他回歸方法。
fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
#relweights()函數,計算預測變量的相對權重
9 方差分析
R中基本的實驗設計建模
擬合并解釋方差分析模型
檢驗模型假設
10 功效分析
判斷所需樣本量
計算效應值
評價統計功效
11 中級繪圖
二元變量和多元變量關系的可視化
繪制散點圖和折線圖
理解相關圖
學習馬賽克圖和關聯圖
12 重抽樣與自助法
理解置換驗證的邏輯
在線性模型中應用置換檢驗
利用自助法獲得置信區間
高級方法
13 廣義線性模型
建立廣義線性模型
預測類別型變量
計數型數據建模
14 主成分和因子分析
主成分分析
探索性因子分析
其他潛變量模型
15 處理缺失數據的高級方法
識別數據模式的可視化
完整案例分析
缺失數據的多重插補法
16 高級圖形進階
Trellis圖形和lattice包
ggplot2的圖形語法
交互式圖形
生物信息*類常見圖
總結
- 上一篇: 健康献
- 下一篇: 社交效率管理,你get了么?——做一款基