R语言特征
对大小写敏感
通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母)。不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字。
基本命令要么是表达式(expressions)要么就是 赋值(assignments)。
命令可以被 (;)隔开,或者另起一行。
基本命令可以通过大括弧({和}) 放在一起构成一个复合表达式(compound expression)。
一行中,从井号(#)开始到句子收尾之间的语句就是是注释。
R是动态类型、强类型的语言。
R的基本数据类型有数值型(numeric)、字符型(character)、复数型(complex)和逻辑型(logical),对象类型有向量、因子、数组、矩阵、数据框、列表、时间序列。
基础指令
程序辅助性操作:
运行
q()——退出R程序
tab——自动补全
ctrl+L——清空console
ESC——中断当前计算
调试查错
browser() 和 debug()——设置断点进行,运行到此可以进行浏览查看(具体调试看browser()帮助文档(c,n,Q))
stop(‘your message here.’)——输入参数不正确时,停止程序执行
cat()——查看变量?
帮助
help(solve) 和 ?solve 等同
??solve——检索所有与solve相关的信息
help(“[[“) 对于特殊含义字符,加上双引号或者单引号变成字符串,也适用于有语法涵义的关键字 if,for 和 function
help(package=”rpart”)——查看某个包
help.start()——得到html格式帮助
help.search()——允许以任何方式(话题)搜索帮助文档
example(topic)——查看某个帮助主题示例
apropos(”keyword”)——查找关键词keyword相关的函数
RSiteSearch(“onlinekey”, restrict=fuction)——用来搜索邮件列表文档、R手册和R帮助页面中的关键词或短语(互联网)RSiteSearch(‘neural networks’)
准备
文件目录设置
setwd(<dir>)——设置工作文件目录
getwd()——获取当前工作文件目录
list.files()——查看当前文件目录中的文件
加载资源
search()——通过search()函数,可以查看到R启动时默认加载7个核心包。
基础函数:数学计算函数,统计计算函数,日期函数,包加载函数,数据处理函数,函数操作函数,图形设备函数
setRepositpries()——选择软件库(CRAN,Bioconductor,R-Forge),寻找安装包的方法另看《【R笔记】寻找R的安装包》
(.packages())——列出当前包
(.packages(all.available=TRUE))——列出有效包
install.packages(“<package>”)——安装包
library()和require()——加载R包(package)至工作空间
data()——列出可以被获取到的存在的数据集(base包的数据集)
data(<datasets>,package=“nls”)——将nls包的datasets加载到数据库中
批处理文件和结果重定向
source(“commands.R”)——执行commands.R (存放批处理命令的)脚本文件。
cat(<Rcommond>,file=””)——可以把R命令输出至外部文件,然后调用source函数进行批处理
do.call(<funcname>,<pars>)——调用函数,第一个参数<funcnames>指示调用函数字符串名称,第二个参数包含调用所需参数的一个列表<pars>
sink(“record.lis”)——把后续的输出结果从控制台重定向到外部文件 record.lis 中
sink()——把后续代码输出重新恢复到终端上展示
attach(<datafame>)——将数据框<datafame>中的变量链接到内存中,便于数据调用
detach()——对应attach(<datafame>),取消变量的链接,detach()里没有参数!
注:attach()和detach()均是在默认变量搜索路径表中由前向后找到第一个符合变量名称,因此之前若存在重名变量,有可能会出现问题!!!
数据处理
输入输出(读入输出数据、文件)
assign(“x”,c(1,2,3)) 和 x <- c(1,2,3) 和 c(1,2,3)->x ——向量赋值
read.table(”infantry.txt”, sep=” “, header=TRUE)——seq属性用其它字符分割,比如文本文件用空格(tab)分隔,header设置为文件中已经存在表头名称
read.csv(“targets.csv”)——读入csv(Comma Seperated Values)文件,属性被逗号分割
read.csv(url(“<link>”))——read.csv() 和 url()的合体,读存在网上的数据
x <- scan(file=””)——手动输入数据,同时scan可以指定输入变量的数据类型,适合大数据文件
scan(“data.dat”, what = list(“”, 0, 0))——what指定变量类型列表
readLines(‘http://en.wikipedia.org/wiki/Main_Page’,n=10)——读取文本文件,将文档转为以行为单位存放的list格式,比如读取读取wikipedia的主页html文件的前十行
write.table(Data, file=”file.txt”, row.names = FALSE, quote=FALSE)——输出,quote为FALSE去掉字符串类型的双引号,write.table(stasum, “stasum.csv”,row.names = FALSE,col.name=FALSE,sep=”,”,append=TRUE)
write.csv(data,file=”foo.csv”,row.names=FALSE)——写成csv格式,row.names=FALSE去掉行号
print()——打印
save.image(”./data.RData”)——把原本在计算机内存中(工作空间)活动的数据转存到硬盘中。
load(“./RData”)——加载目录中的*.RData,把文档-词项矩阵从磁盘加载到内存中
数据查看
通用对象
R是一种基于对象(Object)的语言,对象具有很多属性(Attribute),其中一种重要的属性就是类(Class),最基本的类包括了数值(numeric)、逻辑(logical)、字符(character)、列表(list),符合类包括矩阵(matrix)、数组(array)、因子(factor)、数据框(dataframe)。
class(<object>) 和 data.class(object)——查看对象object的类或类型
unclass()——消除对象object的类
基本数据类型
mode()——查看基本数据类型
length()——查看长度
as.<数据类型>——改变对象的数据类型
特殊属性
attributes(<object>)——查看对象object各种属性组成的列表
attr(<object>,“name”)——存取对象object的名为name的属性
混合类型
逻辑类型+数值类型=数值类型
逻辑类型+字符类型=字符类型
数值类型+字符类型=字符类型
ls() 和 objects()——查看当前工作空间中存在的对象(变量)
rm(list=ls())——删除工作空间的所有对象
methods(x)——查看x函数的源码,有些自带函数输入名称x可以直接看到,有一些需要调用methods方法才能查看函数x的源码,出现多重名,输入对应名称即可
str()——查看数据(框)中的数据总体信息(比如样本个数、变量个数、属性变量名称、类型)
nrow(dataframe)——查看数据集行数
NROW(vector)——查看向量的行数,等于length(x)
head(dataframe)——查看数据集前6行数据
tail(dataframe)——查看数据集尾6行数据
向量特征
逻辑向量运算:
TRUE,FALSE——全部大写
isTRUE(x)——判断x为TRUE
*|,&,!——或且非,注意是单个,不是&&!
ANY,ALL——任意,全部
数组和矩阵
train$var
train$new[train$var == NA] <- 1
Data[is.na(Data)] <- 0——数据框多维变量中给NA值赋值为0
apply(A,Margin,FUN,…)——A为矩阵,Margin设定待处理的维数,为1是横排(行),为2是竖排(列)做运算,Fun是运算函数
sweep(x,2,apply(x,MARGIN=1,mean),FUN)——对数组或者矩阵进行运算。 MARGIN=1表示行,2表示列;STATS统计量,如apply(x,MARGIN=1,mean),FUN函数运算默认为减法,“/”除法
y.vector<-with(data,get(yval))——表示在data数据框中读取列名称为yval的向量。
with(<data>,<colname|func>)——提取数据框中的某些参数做运算,对于数据框运算很方便
绘图
plot()——绘制图像
plot(<vecter_horizontal>, <vector_vertical>, pch=as.integer(<factors>),col,xlab,ylab)——用factors区分图像点的类型pch(圆的,三角,叉),col是颜色类别,xlab或者ylab对应横纵轴标题
legend(<location=”topright”>,legend=<vector_labelname>,pch=1:3,cex=1,col)——图例,<location>是位置(比如右上),<vector_labelname>图例类别标签名,pch是图例对应标签的类别id(向量),<cex>调整字体比例大小,颜色设置,legend(“topright”, levels(<factors>), pch=1:length(levels(factors)))
text(X,Y,labels=c(1,2,3),adj=1.2)——添加标注,X,Y是对应坐标的向量,labels是标记值,adj调整标注位置
abline(h = <int>,lty=2)——低级绘图添加一条水平线h或者是回归模型直线,垂线v;lty为2表示绘制虚线
abline(a,b)——画一条y=a+bx的直线
points(x,y)————低级绘图,画个点,坐标为向量x,y
lines(x,y)——低级绘图,画一条线,坐标为向量x,y
axis(side=1,at=seq(from=0.7,by=1.2,length.out=7),labels=c(…))——绘制坐标轴,低级绘图,side为2是纵坐标
barchart()——lattice包预先要对数据汇总
barplot(<vector>)——绘制柱状图,vector可增加名称。也可以绘制直方图,和hist()均分数据不太一样,需要用table()统计各个子分段下样本数量后在画图。
mosaicplot(x~y,main,color=T,xlab,ylab)——柱形对应关系图
contour(<matrix>)——创建等高线
persp(<matrix>,expand=0.2)——创建3D图,expand扩展值设置为0.2,否则为全屏扩展
image(volcano)——加载栅格(矩阵)图像
par(mfrow=c(1,2),oma,mar)——mfrow设置图形输出窗口为1行2列,添加car包?oma是所有图像距离边框的距离(底部,左边,顶部,右边),mar是每幅图像对边框的距离,默认是c(5, 4, 4, 2) + 0.1。
lines(data)——(低级)原图中画线,data是由散点(x,y)组成
rug(jitter(<data>),side =2)——检验离群点数据,rug()原图中执行绘图绘制在横坐标上,side为2是纵坐标,jitter(<data>)对绘制值略微调整,增加随机排序以避免标记值作图重合。
pairs(data)——数据框各个变量的散布图
coplot(y~x|a+b)——多个变量时的散点图,在a,b(向量或是因子)的划分下的y与x的散点图
scatterplotMatr()——散点图矩阵,car包
identify(<data>)——交互式点选,单击图形中的点,将会输出对应数据的行号,右击结束交互
stem(x,scale=1,width=80,atom=1e-08)——茎叶图,scale控制茎叶图的长度,为2即是以0~4为一组,5~9为一组将个位分成两部分,width是绘图宽度,atom是容差
boxplot()——箱图,研究变量的中心趋势,以及变量发散情况和离群值。上体顶部和底部为上下四分位数,中间粗线为中位数,上下伸出的垂直部分为数据的散步范围,最远点为1.5倍四分为点,超出后为异常点,用圆圈表示。boxplot(y~f,notch=TRUE,col=1:3,add=TRUE)#y是数据,f是由因子构成,notch是带有切口的箱型图,add=T图叠加到上一幅图。
plot(f,y)——箱线图,f是因子,y是与f因子对应的数值
bwplot(<factor> ~ <y>,data,ylab)——lattice包的箱图,绘制不同factor下的y的箱图(条件绘图,在某个因子取值集合下的y值变化)
bwplot(size~a1,data,panel=panel.bpplot,prob=seq(.01,.49,by=.01),datadensity=TRUE,ylab=”)——Hmisc包的分位箱图
earth.count(na.omit(x),number=4,overlap=1/5)——连续变量x的离散化,把x转化为因子类型;number设置区间个数,overlap设置两个区间靠近边界的重合?每个区间的观测值相等
stripplot(x1~y|x2)——lattice包的复杂箱图,存在两个因子x1,x2控制下的y, x2按照从左到右,从下到上的顺序排列,左下方的x2值较小
palette()——col取值对应的颜色, “black” “red” “green3” “blue” “cyan” “magenta” “yellow” “gray”
colors()——列出对应的颜色数组
qcc()——qcc包,监控转化率型指标的质量监控图(P控制图),监控异常点,前提是二项分布足够大后趋于正态分布
mosaic(<tab>,shade=T,legend=T)——绘制三级列联表,<tab>是三级列联表或者公式,vcd包
curve(sapply(x,<func>),<from>,<to>)——画曲线图,from和to设置横坐标取值范围
编辑
optim(c(0,0),<func>)——优化问题函数,c(0,0)是优化函数参数的初始值,返回值par是参数最优点值,value是参数的最优点时平方误差值,counts是返回执行输入函数func的次数以及梯度gradient的次数,convergence值为0表示有把握找到最优点,非0值时对应错误,message是一些其它信息。
curve(sapply(x,<func>),<from>,<to>)——画曲线图,from和to设置横坐标取值范围
sample(length(x),<size>,replace=F)——采样,生成向量x的随机顺序的大小为<size>的新向量;replace为False为不重复抽样,为True则重复抽样
Round ——取整。精确
ceiling()——取整,偏向数值小的
floor() ——取整,偏向数值大的
%/% ——整除
colnames(Data)[4]=”value”——更换某一列名
edit()——编辑数据表格
fix()——
rm(x,y)——移除对象(变量)x和y
na.exclude(<data>)——移除缺失数据整行
na.omit(<data>)——删除缺失数据
attr(na.omit(<data>),”na.action”)——返回向量a中元素为NA的下标
na.fail()——如果向量中至少包括1个NA值,则返回错误;如果不包括任何NA,则返回原有向量
merge(x = targets, y = infanty)——合并数据框,x和y是待合并数据框,相同属性字段也会合并在一起
merge(x, y, by = intersect(names(x), names(y)),by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,sort = TRUE, suffixes = c(“.x”,”.y”),incomparables = NULL, …)
merge函数参数的说明:
x,y:用于合并的两个数据框
by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.
all,all.x,all.y:指定x和y的行是否应该全在输出文件.
sort:by指定的列是否要排序.
suffixes:指定除by外相同列名的后缀.
incomparables:指定by中哪些单元不进行合并.
scale(x, center = TRUE, scale = TRUE)——中心化与标准化,center是中心化,scale是标准化。(全选:减去均值,再除以标准差)
cut(x,breaks=c(0,10,30),labels,ordered_result=F)——连续数据的离散化,将向量依据breaks区间分割为因子向量。labels设置返回因子向量的水平标签值,ordered_result为False生成的因子向量无大小意义,否则有大小意义
apply族函数
apply(A,MARGIN,FUN,…)——处理对象A是矩阵或数组,MARGIN设定待计算的维数,FUN是某些函数,如mean,sum
注:apply与其它函数不同,它并不能明显改善计算效率,因为它本身内置为循环运算。
按列?
lappy(dataframe,FUN,list(median,sd))——处理对象是向量、列表或其它对象,输出格式为列表list
sapply(dataframe$Filed,FUN)——与lapply()相似,输出格式为矩阵(或数据框)
按行?
tapply(X, INDEX, FUN, simplify = TRUE) ——处理分组数据, INDEX和X是有同样长度的因子,simplify是逻辑变(量默认为T)
aggregate(x~y+z, data,FUN)和by()——和tapply功能类似
其余参看:apply函数族
plyr库
ddply(Data,.(user_id,item_id),summarize,liulan=sum(liulan))——split-apply-combine的一体化函数;.(user_id,item_id)作为每行的一对标识ID(因子),前面的“.”号省略数据框名称;summrize是一个函数fun;liulan是一个变量,最后生成的数据框只有user_id,item_id,liulan三列。详情参见例子 R语言利器之ddply
transform(x,y)——将x和y的列转换成·一个数据框。
reshape库(reshape2)
melt(data,id.vars)——转换数据溶解。修改数据组织结构,创建一个数据矩阵,以id.var作为每行的编号,剩余列数据取值仅作为1列数值,并用原列名作为新数值的分类标记。
cast(data, userid~itemid,value=”rattings”,fill=0)——统计转换数据,生成矩阵,公式~左边的作为行表名,右边的作为列表名。之后可以用cor()计算每列数据之间的相关系数,并计算距离。
acast 和 dcast(data, userid~itemid,value.var=”rattings”)——同上,reshape2包,acast最后生成数组,dcase生成数据框。参见 R语言进阶之4:数据整形(reshape)
字符串处理
nchar()——获取字符串长度,它能够获取字符串的长度,它也支持字符串向量操作。注意它和length()的结果是有区别的?什么区别
paste(“a”, “b”, sep=””)——字符串粘合,负责将若干个字符串相连结,返回成单独的字符串。其优点在于,就算有的处理对象不是字符型也能自动转为字符型。
strsplit(A,split='[,.]’) ——字符串分割,负责将字符串按照某种分割形式将其进行划分,它正是paste()的逆操作。
substr(data,start,stop)——字符串截取,能对给定的字符串对象取出子集,其参数是子集所处的起始和终止位置。子集为从start到stop的下标区间
grep()——字符串匹配,负责搜索给定字符串对象中特定表达式 ,并返回其位置索引。grepl()函数与之类似,但其后面的”l”则意味着返回的将是逻辑值
regexpr(pattern,text)——从字符串text中提取特定的字符串的下标位置
gregexpr()——只查询匹配的第一个特定字符串的下标位置
gsub(“a”,1,<vector>)——字符串替代,负责搜索字符串的特定表达式,并用新的内容加以替代。
sub()函数——和gsub是类似的,但只替代第一个发现结果。
chartr( )——字符串替换函数
toupper( )、tolower( )及casefold( )——大小写转换函数
其余参见:R语言中的字符串处理函数
控制流
if—else——分支语句
switch(index,case1,case2,casen)——index指示跳到第i个casei中
for(i in <vecter>)——循环语句,通过控制变量i
while——循环语句,通过设定循环范围
repeat—break——循环语句,无限循环,由break跳出
特殊数据对象
向量特性
向量数组初始小标序号从1开始
向量增加元素可以直接通过“vector[n+1]<-0”方式增加
a<-c()——向量初始化
vector <- numeric(<int>)——创建初始向量<int>个数,并赋初值为0
length(vector)<- leg——修改对象长度为leg
names(vector) <- c(“A”,”B”,”C”)——给向量起名称
vector[“A”]——通过名称访问对应元素
a == c(1, 99, 3)——比较每一个元素对应是否相等
c(0,1)——创建向量,向量内元素类型应一致!
seq(5,9)和 5:9 ——连续向量,等差数列
seq(5,9,0.5)——以0.5为间隔创建
seq(from,to,length,by)
数据索引
which(is.na(var) == T)——返回对应数组序号
which.max() 和 which.min()——返回数值类型中最大和最小元素下标
subset(<data>,<condition>,<colname>)——索引,<data>是数据,<condition>是索引条件,colnames指定索引列名
match(x,table,nomatch,incomparables)——匹配函数,返回x对应值在table中是否存在,并从1开始编号。x是查询对象,table是待匹配的向量,nomatch是不匹配项的设置值(默认为NA值),incomparables设置table表中不参加匹配的数值,默认为NULL
<x> %n% <y>——判断x中是否包含y,返回x对应的逻辑值
排序
sort(x, decreasing = FALSE, na.last = NA, …)——排序,单变量排序,输出排序结果(不是序号)。na.last为TRUE,缺失值放在数据最后,为False 缺失值放在数据最前面,为NA,缺失数据将被移除
sort.list()——排序输出序号值
order()——排序,多个变量数据框排序,返回数据框序号数。order例子【结】
结合ddply和transform函数,降序输出并,输出编号:ddply(dfx,.(group,sex),.fun=function(x){transform(x[order(x$age,decreasing=TRUE),c(1:3)],ind=1:length(group))})
rank()——秩排序,有重复数字的时候就用这个,根据数值之间的远近输出序号
rev()——依据下标从后往前倒排数据
unique(<dataframe>)——返回无重复样本的数据集
duplicated(x)——查找重复数据,重复序号返回为TRUE
比较大小
pmin(x1,x2,…)——比较向量中的各元素,并把较小的元素组成新向量
pmax(x1,x2,…)——
向量间的交、并、补集
union(x, y)——(并集)合并两组数据,x和y是没有重复的同一类数据,比如向量集
intersect(x, y)——(交集)对两组数据求交集,x和y是没有重复的同一类数据,比如向量集
setdiff(x, y)——(补集)x中与y不同的数据,x和y是没有重复的同一类数据,比如向量集,重复不同不记
setequal(x, y)——判断x与y相同,返回逻辑变量,True为相同,False不同。x和y是没有重复的同一类数据,比如向量集
is.element(x, y) 和 %n%——对x中每个元素,判断是否在y中存在,TRUE为x,y重共有的元素,Fasle为y中没有。x和y是没有重复的同一类数据,比如向量集
Vectorize()——将不能进行向量化预算的函数进行转化
矩阵
array(data=NA,dim=length(data),dimnames=null)——数组、矩阵初始化,dim是数组各维的长度dimnames是数组维的名字,默认为空,array(1:20, dim=c(4,5))。数组是多维的,dim属性设置维数
matrix(0, 3, 4)——0为赋初值,3行,4列,存储方式是先列后行!矩阵是二维的,用ncol和nrow设置矩阵的行数和列数。byrow设置存储方式(默认列优先),若为TRUE则以行优先
dim(<vector>)<- c(2,3)——设置矩阵为2行3列
dimnames()=list(c(<row>),c(<col>))——设置参数行和列的名称,以列表的形式进行输入
matrix[ ,4]——矩阵第4列
as.vector(matrix)——将矩阵转换成向量
a[“name1″,”name2”]——矩阵以行和列的名称来代替行列的下标,name1是行名,name2是列名
rbind()——矩阵合并,按行合并,自变量宽度应该相等
cbind()——矩阵合并,安列合并,自变量高度应该相等
t()——矩阵转置
det()——行列式
solve(A,b)——求线性方程组Ax=b
solve(A)——求逆矩阵
eigen(A) ——求距阵的特征值与特征向量,Ax=(Lambda)x,A$values是矩阵的特征值构成的向量,A$vectors是A的特征向量构成的矩阵
*——矩阵中每个元素对应相乘
%*%——矩阵相乘
因子
因子和向量的区别:
向量里面存的元素类型可以是字符型,而因子里面存的是整型数值对应因子的类别(levels)
as.integer(<factors>)——因子可以转化为整型
levels(<factors>)——查看因子类别
gl(n,k,length)——因子,n为水平数,k为重复的次数,length为结果的长度
factor(x,levels,labels)——因子
as.factror()——将向量转化为无序因子,不能比较大小
as.order()——将向量转化为有序因子
is.factor()——判断是否为无序因子
is.order()——判断是否为有序因子
列表和数据框
list()——列表
unlist()——列表转化为向量
data.frame()——数据框
names(<dataframe>)——显示数据框的列名称
dataframe[[2]] 和 dataframe[[“TheSec.Name”]] 和 dataframe$TheSec.Name——获取数据框第二列的元素值
as.matrix(<dataframe>)[,1]——把数据框转化为矩阵后,再去提取列向量
na和NULL的区别
is.na()——判断na值存在,na是指该数值缺失但是存在。
is.null()——判断数据是否为NULL。NULL是指不存在,可以通过 train$var<-NULL 的方法去掉属性变量var。
处理缺失数据na
1、将缺失部分剔除
2、用最高频率值来填补缺失值
3、通过变量的相关关系来填补缺失值
4、通过探索案例之间的相似性来填补缺失值
公式
a:b——a和b的交互效应
a+b——a和b的相加效应
a*b——相加和交互效应(等价于a+b+a:b)
-b——去掉b的影响
1——y~1拟合一个没有因子影响的模型(仅仅是截距)
-1——y~x-1表示通过原点的线性回归(等价于y~x+0或者0+y~x)
^n——包含所有知道n阶的交互作用(a+b+c)^2==a+b+c+a:b+a:c+b:c
poly(a,n)——a的n阶多项式
I(x1+x2)——表示模型y=b(x1+x2)+a
数理统计
基础知识
统计量
mean(x,trim=0,na,rm=FALSE)——均值,trim去掉x两端观测值的便利,默认为0,即包括全部数据,na.rm=TRUE允许数据中有缺失
weighted.mean(x,<weigth>)——加权平均值,weigth表示对应权值
median——中值
quantile(x,probs=seq(<start>,<end>,<diff>))——计算百分位数,是五数总和的扩展,probs设置分位数分位点,用seq(0,1,0.2)设置,表示以样本值*20%为间隔划分数据。
var()——样本方差(n-1)
sd——样本标准差(n-1)
cov——协方差
cor——相关矩阵
fivenum(x,na.rm=TRUE)——五数总括:中位数,下上四分位数,最小值,最大值
数学函数
sum(x,y,z,na.rm=FALSE)——x+y+z,na.rm为TURE可以忽略掉na值数据
sum(x>4)——统计向量x中数值大于4的个数
rep(“LOVE!”,<times>)——重复times次,rep(1:3,c(1,2,3))表示1个1,2个2,3个3组成的序列
sqrt()——开平方函数
2^2 和 **——“^”幂运算
abs()——绝对值函数
‘%%’——表示求余
‘%/%’——求商(整数)
exp : 2.71828…
expm1 : 当x的绝对值比1小很多的时候,它将能更加正确的计算exp(x)-1
log : 对数函数(自然对数)
log10 : 对数(底为10)函数(常用对数)
log2 : 对数(底为2)函数
因为10>e>1,常用对数比自然对数更接近横坐标轴x
log1p()——log(1+p),用来解决对数变换时自变量p=0的情况。指数和对数的变换得出任何值的0次幂都是1
特性:对数螺旋图。当图像呈指数型增长时,常对等式的两边同时取对数已转换成线性关系。
sin : 正弦函数
cos : 余弦函数
tan : 正切函数
asin : 反正弦函数
acos : 反余弦函数
atan : 反正切函数
sinh : 超越正弦函数
cosh : 超越余弦函数
tanh : 超越正切函数
asinh : 反超越正弦函数
acosh : 反超越余弦函数
atanh : 反超越正切函数
logb : 和log函数一样
log1px : 当x的绝对值比1小很多的时候,它将能更加正确的计算log(1+x)
gamma : Γ函数(伽玛函数)
lgamma : 等同于log(gamma(x))
ceiling : 返回大于或等于所给数字表达式的最小整数
floor : 返回小于或等于所 给数字表达式的最大整数
trunc : 截取整数部分
round : 四舍五入
signif(x,a) : 数据截取函数 x:有效位 a:到a位为止
圆周率用 ‘pi’表示
crossprod(A,B)——A %*% t(B) ,内积
tcrosspeod(A,B)——t(A) %*% B,外积
%*%——内积,a1b1+a2b2+…+anbn=a*b*cos<a,b>,crossprod(x)表示x与x的内积。||x||2,矩阵相乘
%o%——外积,a*b*sin<a,b>(矩阵乘法,叉积),tcrossprod(x,y)表示x与y的外积。*表示矩阵中对应元素的乘积!
正态分布
dnorm(x,mean=0,sd=1,log=FALSE)——正态分布的概率密度函数
pnorm(x,mean=0,sd=1)——返回正态分布的分布函数·
rnorm(n,mean=0.sd=1)——生成n个正态分布随机数构成的向量
qnorm()——下分为点函数
qqnorm(data)——画出qq散点图
qqline(data)——低水平作图,用qq图的散点画线
qq.plot(<x>,main=”)——qq图检验变量是否为正态分布
简单分析
summary()——描述统计摘要,和 Hmisc()包的describe()类似,会显示NA值,四分位距是第1个(25%取值小于该值)和第3个四分位数(75%取值小于该值)的差值(50%取值的数值),可以衡量变量与其中心值的偏离程度,值越大则偏离越大。
table(<datafame>$<var>)——统计datafame数据中属性变量var的数值取值频数(NA会自动去掉!),列联表
table(<data_var_1>, <data_var_2>)——比较两个data_var,<data_var_1>为列,<data_var_2>为行,先列后行!
xtabs(formular,data)——列联表
ftable( table())——三维列联表
prop.table()——统计所占百分比例
prop.table(table(<data_var_1>, <data_var_2>),<int>)——比较两个data_var所占百分比,<int>填1位按行百分计算,2为列计算
margin.table( table(),<int> )——计算列联表的边际频数(边际求和),<int>=1为按列变量
addmargin.table(table(),<int> )——计算列联表的边际频数(边际求和)并求和,<int>=1为按列变量
as.formula(<string>)——转换为一个R公式,<string>是一个字符串
循环时的判断语句:
ifelse(<test>, <yes>, <no>)——if,else的变种,test是判断语句,其中的判断变量可以是一个向量!yes是True时的赋值,no是False时的赋值
hist(<data>,prob=T,xlab=’横坐标标题’,main=’标题’,ylim=0:1,freq,breaks=seq(0,550,2))——prob=T表示是频率直方图,在直角坐标系中,用横轴每个小区间对应一个组的组距,纵轴表示频率与组距的比值,直方图面积之和为1;prob位FALSE表示频数直方图;ylim设置纵坐标的取值范围;freq为TRUE绘出频率直方图,counts绘出频数直方图,FALSE绘出密度直方图。breaks设置直方图横轴取点间隔,如seq(0,550,2)表示间隔为2,从0到550之间的数值。
density(<data>,na.rm=T)——概率密度函数(核密度估计,非参数估计方法),用已知样本估计其密度,作图为lines(density(data),col=”blue”)
ecdf(data)——经验分布函数,作图plot(ecdf(data),verticasl=FALSE,do.p=FALSE),verticals为TRUE表示画竖线,默认不画。do.p=FALSE表示不画点处的记号
假设检验
分布函数
shapiro.test(data)——正态W检验方法,当p值大于a为正态分布
ks.test(x,y)——经验分布的K-S检验方法,比较x与y的分布是否相同,y是与x比较的数据向量或者是某种分布的名称,ks.test(x, rnorm(length(x), mean(x), sd(x))),或ks.test(x,”pnorm”,mean(x),sd(x))
chisq.test(x,y,p)——Pearson拟合优度X2(卡方)检验,x是各个区间的频数,p是原假设落在小区间的理论概率,默认值表示均匀分布,要检验其它分布,比如正态分布时先构造小区间,并计算各个区间的概率值,方法如下:
brk<-cut(x,br=c(-6,-4,-2,0,2,4,6,8))#切分区间
A<-table(brk)#统计频数
p<-pnorm(c(-4,-2,0,2,4,6,8),mean(x),sd(x))#构造正态分布函数
p<-c(p[1],p[2]-p[1],p[3]-p[2],p[4]-p[3],p[5]-p[4],p[6]-p[5],p[7]-p[6])#计算各个区间概率值
chisq.test(A,p=p)
正态总体的均值方差
t.test(x,y,alternative=c(“two.sided”,”less”,”greater”),var.equal=FALSE)——单个正态总体均值μ或者两个正态总体均值差μ1-μ2的区间估计;alternative表示备择假设:two.side(默认)是双边检验,less表示H1:μ<μ0,greater表示H1:μ>μ0的单边检验(μ0表示原假设);当var.equal=TRUE时,则是双样本方差相同的情况,默认为不同
var.test(x,y)——双样本方差比的区间估计
独立性检验(原假设H0:X与Y独立)
chisq.test(x,correct=FALSE)——卡方检验,x为矩阵,dim(x)=c(2,2),对于大样本(频数大于5)
fisher.test()——单元频数小于5,列联表为2*2
相关性检验(原假设H0:X与Y相互独立)
cor.test(x,y,method=c(“pearson”,”kendall”,”spearman”))——相关性检验,观察p-value小于0.05则相关。method选择相关性检验方法
秩
rank()——秩统计量
cor.test()——秩相关检验:Spearman,Kendall
wilcox.test(x,y=NULL,mu,alternative,paired=FALSE,exact=FALSE,correct=FALSE,conf.int=FALSE)——秩显著性检验(一个样本来源于总体的检验,显著性差异的检验),Wilcoxon秩和检验(非成对样本的秩次和检验),mu是待检测参数,比如中值,paired逻辑变量,说明变量x,y是否为成对数据,exact说民是否精确计算P值,correct是逻辑变量,说明是否对p值采用连续性修正,conf.int是逻辑变量,给出相应的置信区间。
uniroot(f,interval=c(1,2))——求一元方程根的函数,f是方程,interval是求解根的区间内,返回值root为解
optimize()或 optimise()——求一维变量函数的极小点
nlm(f,p)——求解无约束问题,求解最小值,f是极小的目标函数,p是所有参数的初值,采用Newton型算法求极小,函数返回值是一个列表,包含极小值、极小点的估计值、极小点处的梯度、Hesse矩阵以及求解所需的迭代次数等。
显著性差异检验(方差分析,原假设:相同,相关性)
mcnemar.test(x,y,correct=FALSE)——相同个体上的两次检验,检验两元数据的两个相关分布的频数比变化的显著性,即原假设是相关分布是相同的。y是又因子构成的对象,当x是矩阵时此值无效。
binom.test(x,n,p,alternative=c(“two.sided”,”less”,”greater”),conf.level=0.95)——二项分布,符号检验(一个样本来源于总体的检验,显著性差异的检验)
aov(x~f)——计算方差分析表,x是与(因子)f对应因素水平的取值,用summary()函数查看信息
aov(x~A+B+A:B)——双因素方差,其中X~A+B中A和B是不同因素的水平因子(不考虑交互作用),A:B代表交互作用生成的因子
p.adjust()——P值调整函数
pairwise.t.test(x,g,p.adjust.method=”holm”)——多重t检验,p.adjust.method是P值的调整方法,其方法由p.adjust()给出,默认值按Holm方法(”holm“)调整,若为”none“,表示P值不做任何调整。双因素交互作用时g=A:B
shapiro.test(x)——数据的正态W检验
bartlett.test(x~f,data)——Bartlett检验,方差齐性检验
kruskal.test(x~f,data)——Kruskal-Wallis秩和检验,非参数检验法,不满足正态分布
friedman.test(x,f1,f2,data)——Friedman秩和检验,不满足正态分布和方差齐性,f1是不同水平的因子,f2是试验次数的因子
常用模型
1、回归模型
lm(y~.,<data>)——线性回归模型,“.”代表数据中所有除y列以外的变量,变量可以是名义变量(虚拟变量,k个水平因子,生成k-1个辅助变量(值为0或1))
summary()——给出建模的诊断信息:
1、数据拟合的残差(Residual standard error,RSE),残差应该符合N(0,1)正态的,值越小越好
2、检验多元回归方程系数(变量)的重要性,t检验法,Pr>|t|, Pr值越小该系数越重要(拒绝原假设)
3、多元R方或者调整R2方,标识模型与数据的拟合程度,即模型所能解释的数据变差比例,R方越接近1模型拟合越好,越小,越差。调整R方考虑回归模型中参数的数量,更加严格
4、检验解释变量x与目标变量y之间存在的依赖关系,统计量F,用p-value值,p值越小越好
5、绘图检验plot(<lm>)——绘制线性模型,和qq.plot误差的正态QQ图
6、精简线性模型,向后消元法
线性回归模型基础
lm(formula=x~y,data,subset)——回归分析,x是因变量(响应变量),y是自变量(指示变量),formular=y~x是公式,其中若是有x^2项时,应把公式改写为y~I(x^2),subset为可选择向量,表示观察值的子集。例:lm(Y ~ X1 + X2 + I(X2^2) + X1:X2, data = data)
predict(lm(y~x),new,interval=“prediction”,level=0.95)——预测,new为待预测的输入数据,其类型必须为数据框data.frame,如new<-data.frame(x=7),interval=“prediction”表示同时要给出相应的预测区间
predict(lm(y~x))——直接用用原模型的自变量做预测,生成估计值
筛选模型自变量
lm.new<-update(lm.sol,sqrt(.)~.)——修正原有的回归模型,将响应变量做开方变换
update(<lm>, .~. – x1)——移除变量x1后的模型
coef(lm.new)——提取回归系数
回归诊断
1、正态性(QQ图)
plot(x,which)——回归模型残差图,which=1~4分别代表画普通残差与拟合值的残差图,画正态QQ的残差图,画标准化残差的开方与拟合值的残差图,画Cook统
norm.test()——正态性检验,p-value>0.05为正态
计量的残差图
residuals()和resid()——残差
rstandard()——标准化残差
rstudent()——学生化残差
influence.measures(model)——model是由lm或者glm构成的对象,对回归诊断作总括,返回列表中包括,广义线性模型也可以使用
anova(<lm>)——简单线性模型拟合的方差分析(确定各个变量的作用)
anova(<lm1>,<lm2>)——比较两个模型(检验原假设为不同)
2、误差的独立性——car包提供Duerbin_Watson检验函数
3、线性——car包crPlots()绘制成分残差图(偏残差图)可以看因变量与自变量之间是否呈线性
4、同方差性——car包ncvTest()原假设为误差方差不变,若拒绝原假设,则说明存在异方差性
5、多重共线性——car包中的vif()函数计算VIF方差膨胀因子,一般vif>2存在多重共线性问题
异常点分析(影响分析)
hatvalues()和hat()——帽子矩阵
dffits()——DFFITS准则
cooks.distance()——Cook统计量,值越大越有可能是异常值点
covratio()——COVRATIO准则
kappa(z,exact=FALSE)——多重共线性,计算矩阵的条件数k,若k<100则认为多重共线性的程度很小;100<=k<=1000则认为存在中等程度或较强的多重共线性;若k>1000则认为存在严重的多重共线性。z是自变量矩阵(标准化,中心化的?相关矩阵),exact是逻辑变量,当其为TRUE时计算精准条件数,否则计算近似条件数。用eigen(z)计算特征值和特征向量,最小的特征值对应的特征向量为共线的系数。
step()——逐步回归,观察AIC和残差平方和最小,广义线性模型也可以使用
add1()——前进法
drop()——后退法
stepAIC(sol,direction=”backward”)——MASS包,可以实现逐步回归(向前、向后、向前向后)
预测
predict(<sol>,<newdataframe>,level=0.95,interval=”prediction”)——回归预测,sol是模型,newdataframe是待预测数据框,level设置置信度,interval=”prediction”表示结果要计算置信区间
glm(formula,family=binomial(link=logit),data=data.frame)——广义线性模型,logit默认为二项分布族的链接函数,formula有两种输入方法,一种方法是输入成功和失败的次数,另一种像线性模型的公式输入方式
predict(glm(),data.frame(x=3.5),type=”response”)——预测广义线性回归模型,type=“response”表示结果为概率值,否则为预测值y
inv.logit()——预测值y的反logit,boot包的函数
glmnet()——正则化glm函数,glmnet包,执行结果的行数越前正则化越强。其输出结果的意义是:
1)DF是指明非0权重个数,但不包括截距项。可以认为大部分输入特征的权重为0时,这个模型就是稀疏的(sparse)。
2)%Dev就是模型的R2
3)超参数(lambda)是正则化参数。lambda越大,说明越在意模型的复杂度,其惩罚越大,使得模型所有权重趋向于0。
plot(lm(y~x),which=1:4,caption=c(“Residuals vs Fitted”,“Normal Q-Q plot”,“Scale-Location plot”,“Cook’s distance plot”))——画回归模型残差图,which为1表示画普通残差与拟合值的残差图,2表示画正态QQ的残差图,3表示画标准化残差的开方与拟合值的残差图,4表示画Cook统计量的残差图;caption是图题的内容。
avova(sol1,sol2,test=”Chisq”)——比较模型两个模型,广义线性模型可用卡方检验(分类变量),不拒绝原假设说明两个没有显著差异,即用较少自变量模型就可以。
非线性模型
poly(想,degree=1)——计算正交多现实,x是数值向量,degree是正交多项式的阶数,并且degree<length(x)样本个数,例如建立二次正交式回归模型:lm(y~1+poly(x,2))
nls(formula,data,start)——求解非线性最小二乘问题,formula是包括变量和非线性拟合的公式,start是初始点,用列表形式给出
nlm(f,p)——非线性最小二乘,构造最小目标函数,方程移项2为0,f是极小的目标函数,p是所有参数的初值,采用Newton型算法求极小,函数返回值是一个列表,minimum的值便是极小值,estimate是参数的估计值。例如:
fn<-function(p,x,y){
f<-y-p[1]*exp(p[2]*x)
res<-sum(f^2)
}
nlm.sol<-nlm(fn,p=c(3,-0.1),x,y)
2、回归树
rpart( y ~., <data>)——rpart包,回归树,叶结点目标变量的平均值就是树的预测值。生成一棵树,再做修剪(防止过度拟合),内部10折交叉验证
printcp(<rt>)——查看回归树结果,rt是指rpart()函数的运行结果模型,plotcp(<rt>)以图形方式显示回归树的参数信息
参数如下:
cp——当偏差的减少小于某一个给定界限值,默认0.01
minsplit——当结点中的样本数量小于某个给定界限时,默认20
maxdepth——当树的深度大于一个给定的界限值,默认30
prune(<rt>,cp)——自行设置cp值的建树
snip.rpart(<rt>, c(4,7))——修剪,需要修剪的那个地方的是结点号c(4,7),指出输出树对象来需要修剪的树的结点号
snip.rpart(<rt>)——交互修剪,点击结点,右击结束
3、随机森林
randomForest(y ~., <data>)——组合模型,由大量树模型构成,回归任务采用预测结果的平均值。
4、支持向量机
svm(<formula>,<data>,gamma=1/ncol(<data>),<cost>)——e1071包,回归任务,<gamma>=0.01,<cost>=100违反边际所引入的损失?
5、时间序列分析
ts(<data>, frequency=12, start=(2006,1))——把一个向量转化为时间序列对象,<data>向量,frequency表示频率,start表示时间起始点
decompose(<data>,type)——把时间序列分解成长期趋势和周期性变化,<data>是设置了频率(周期长度)的时间序列数据,type=”additive”为累加形式:长期趋势+周期性变化+随机变化;”multiplicative”分解为累乘形式:长期趋势*周期性变化*随机变化。默认使用”additive”累加形式。函数返回值sol<-decompose()中,sol$trend是时间序列趋势,seasonal是季节性周期变化,random是随机误差。
stl(<data>,”per”)——分解时间序列,返回值sol<-stl()中,sol$time.series[, “seasonal”]读取周期性序列seasonal,sol$time.series[, “trend”]读取长期趋势trend。误差可以使用sol$time.series[, “remainder”]读取。
增长率:
diff(data,lag=1)——差分,上下做差,lag控制变量上下间隔为1
ring.growth[t]=(data[t]-data[t-1])/data[t-1]——同比增长率,描述指标变化趋势
sam.per.grown[t]=(data[t]-data[t-T])/data[t-T]——环比增长率,分析周期性变化,避免周期性变化给数据分析带来的影响,T一般以周为单位
移动平均:
filter(x, filter, method=c(“convolution”, “recursive”), side=2,…)——线性过滤函数,x待转化的向量数据,method=convolution(卷积方法):使用x内部样本组成线性模型(系数ai由filter参数设置的,side参数设置卷积方法是单边或者双边),recursive(递归方法):使用y内部样本以及当前阶段的x样本组成线性模型(系数ai由filter设置)y递归[t]=x[t]+sum(ai*y[t-i])。side为1(单边卷积)y卷积[t]=a1*x[t]+…+a(k+1)*x[t-k],side为2(双边卷积)y卷积[t]=a1*x[t+m]+…+a(m+1)*x[t]
指数平滑:
sol<-HoltWinters(<data>)——实现二次平滑和三次平滑指数。
sol.forst<-forecast.HoltWinters(sol, h=12)——预测HoltWinters函数产生的模型的新时间序列,h表示频率?预测未来12个月
plot.forecast(sol.forst, include=10)——绘制预测图,include=10表明绘制预测前10个月的数据和未来12个月的预测数据
ARIMA模型
ymd()——lubridate包,将”年-月-日”格式的字符串转换成日期对象,(可以比较前后时间)
自相关性
cov(data.frame(x,y))——协方差矩阵S
cor(data.frame(x,y))——相关系数矩阵R
rnorm(n,<mean>,<sd>)
arima.sim(n=100,list(ar=,ma=))——模拟100个样本的模拟序列
lag.plot(data,lag=k,do.line=FALSE)——绘制原始数据和k阶滞后的散点图
acf(data,lag.max=16,ci.type=”ma”)——计算并绘制自相关图,0阶自相关系数是rxx,所以恒等于1。ci.type=”ma”主要是慨率acf的标准误的问题,以使acf图等准确。
pacf(data,lag.max=16)——偏自相关图,消除Xt-1,…,Xt-k+1的影响后,研究Xt和Xt-k的相关性。
Box.test(data,type=”Ljung-Box”,lag=16,fitdf=p+q)——自相关性检验,p-value<0.05,标识数据data具有自相关,fitdf为自由度参数p+q
arima(data,order=c(p,d,q))——计算模型参数并建模,TSA包中,order设置AR过程的阶数p,差分过程的d(用于稳定化)和MA过程的阶数q。当p=d=0时,表示只使用MA过程对序列建模。结果sol<-arima()调用predict(sol,n.ahead=5)$pred进行预测,n.ahead参数用于设置预测新阶段的数据量(未来5个月),predict(…)$se标准误差SE,用于计算预测范围(预测范围=预测值+-置信度(alpha)*标准误差SE。
eacf(data)——根据凸显中三角区域顶点的行坐标和列坐标分别确定ARMA的p和q
norm.test()——正态性检验,p-value>0.05为正态
tsdiag(sol)——绘制模型残差的散点图、自相关图和不同阶数下的Box.test体检验p-value值
模型评估
RMSE(lm,< which>)——qpcR包中计算均方根误差,计算子集subset
聚类分析
dist(x,method=”euclidean“)——计算距离
”euclidean“Euclid距离;
”maximum“——Chebyshev距离;
”manhattan“绝对值(马氏)距离;
“canberra”Lance距离;
“minkowski”Minkowski闵式距离;
“binary”定性变量的距离
scale(x, center = TRUE, scale = TRUE)——中心化与标准化,center是中心化,scale是标准化。(全选:减去均值,再除以标准差)
hclust(d,method=“complete”)——系统聚类,d是又dist构成的距离结构,method是系统聚类的方法(默认为最长距离法)
“single”最短距离法“;
”complete“最长距离法;
”median“中间距离法;
”mcquitty“Mcquitty相似法;
”average“类平均法
”centroid“重心法
”ward“离差平法和法
plot(hclist(),hang=0.1)——谱系图,hang表示谱系图中各类所在的位置,hang取负值时,表示谱系图从底部画起。
as.dendrogram(hclust(),hang=-1)——将hclust得到的对象强制转换为谱系图
plot(x,type=c(”rectangle“,”triangle“),horiz=FALSE)——谱系图,x为as.dendrogram返回的对象,type是指是矩形或是三角形,horiz是逻辑变量,当horiz为TRUE时,表示谱系图水平放置。
as.dist()——将普通矩阵转化为聚类分析用的距离结构
plclust(x,hang=0.1)——谱系图,旧版停用,已被plot替换
rect.hclust(x,k,h,border)——在谱系图(plclust())中标注聚类情况,确定聚类个数的函数,x是由hclust生成的对象,k是类个数;h是谱系图中的阈值,要求分成的各类的距离大于h;border是数或向量,标明矩形框的颜色;例如:rec.hclust(hclust(),k=3)
kmeans(x,centers,iter.max,nstart=1,algorithm)——K均值方法,centers是聚类的个数或者是初始类的中心,iter.max为最大迭代次数(默认为10),nstart是随机集合的个数(当centers为聚类的个数时),algorithm为动态聚类算法,例如:km<-kmeans(scale(data),4,nstart=20),返回值中,size表示各类的个数,means表示各类均值,Clustering表示聚类后分类情况?,可以用sort(kmeans()$cluser)对分类情况排序
主成分分析
princomp() 和 prcomp()——主成分分析,结果的标准差显示每一个主成分的贡献率(成分方差占总方差的比例),返回值loadings每一列代表每一个成分的载荷因子
summary(x,loadings=FALSE)——提取主成分的信息,x是princomp()得到的对象,loadings是逻辑变量,为TRUE表示显示主成分分析原始变量的系数,False则不显示。返回表中,Standard deviation是标准差,即方差或lambda的开方,Proportion of Variance表示方差的贡献率,Cumulative Proportion表示累积贡献率。
loadings(x)——显示主成分或因子分析中loadings载荷的内容,主成分是对应割裂,即正交矩阵Q;因子分析中是载荷因子矩阵。x是princomp()或者factanal()得到的对象。
predict(x,newdata)——预测主成分的值,x是由princomp()得到的对象,newdata是由预测值构成的数据框,当newdata为默认值时预测已有数据的主成分值。例如predict(<pca>)[,1]——用主成分的第一列作为原有数据的预测结果
screeplot(x,type=c(”barplot”,”lines“))——主成分的碎石图,确定主成分维数的选择,x是由princomp()得到的对象,type是描述画出的碎石图的类型,”barplot“是直方图,”lines“是直线图。
biplot(x,choices=1:2,scale=1)——画关于主成分的散点图和原坐标在主成分下的方向,x是由princomp()得到的对象,choices选择主成分,默认为第1、2主成分
factanal(x,factor,covmat=NULL,scores=c(“none”,”regression”,”Bartlett”),rotation=”varimax“)——因子分析,factors是公因子的个数,covmat是样本协方差和相关矩阵,scores因子得分方法,rotation表示旋转,默认为方差最大旋转
cancor(x,y,xcenter=TRUE,ycenter=TRUE)——典型相关分析,xcenter,ycenter是逻辑变量,为TRUE时做数据中心化
R包
rpart——决策树算法
my_tree <- rpart(<formula>,<data>,<method>)——rpart(Survived ~ Sex + Age,
data=train, method=”class”)
rattle
rpart.plot
RColorBrewer
fancyRpartPlot(my_tree)——绘制更好看的决策树
ggplot2—— 绘图包
qplot(<vecter_horizontal>, <vector_vertical>, color = <factor> )——绘图类似plot
dplyr——输出处理包
tbl_df()——将数据转换为一种特殊的数据框类型tbl,类似(as.data.frame()),仅是改变了显示,数据结构没有变化
glimpse(<tbl>)——类似str()
hflights——飞行数据
数据集
data()——查看R自带数据列表
iris——鸢尾花数据集总共150行3种类别
iris3[1:50, 1:4, 1:3]——每50行一组,分3个类别分别
volcano——87×61 matrix with elevation value
模型函数
神经网络
nnet()——在nnet包中BP神经网络,存在一层的隐藏层。
参数:
size=0,设置隐藏层中神经元数,设置为0时,表示建立一层神经网络?没有隐藏层
Wts:初始系数,不设定则使用随机数设定
linout:为TRUE时,模型输出(目标变量)为连续型实数,一般用于回归分析;如果为FALSE(默认取值)则输出为逻辑数据,一般用于(目标变量为分类型)分类分析,也可以把linout设为TRUE再添加一个阶跃函数转为逻辑型输出。
maxit:最大迭代次数iterations,默认为100次,一般尽量将maxit设置大于观测结果final value上显示的迭代次数。
skip:是否跳过隐藏层,如果为FALSE(默认),则不跳过
decay:加权系数的衰减
隐藏层中神经单元数目的确定
支持向量机
svm()——e1071包中回归非线性
ksvm()——kernlab包中分类,分类时用的默认参数树径向基核函数
多元自适应回归样条
mars()——mda包
earth()——earth包,具有更多优势
决策树
RWeka包:C4.5(分类,输入变量是分类型或连续型,输出变量是分类型)
J48()
rpart包:分类回归树(CART)算法(输入、输出分类或连续变量)
rpart()——拟合树模型,参数xval设置k折交叉验证
prune()——剪枝
party包:条件推理决策树(CHAID)算法(输入、输出分类或连续变量)
ctree()
随机森林
randomForest包:分类与回归树的随机森林
randomForest()——随机森林,预测,分类,估计变量的重要性(通过计算每个变量被移除后随机森林误差的增加(选择变量需要用到模型的信息,但用其它模型来做预测)
party包:条件推理决策树的随机森林
cforest()
时间序列
ts——在stats包中创建一个时间序列
xts包——时间序列
xts(<data>,<label>)——时间数列,可以是单元的也可以是多元的。<data>时间序列数据,<label>时间标签。as.xts(read.zoo(“abc.csv”, header = T))
seq.POSIXct() 和 Date——标识时间信息的规格的类
index() 和 time()——获取对象的时间标签
coredata()——获取时间序列的数值
贝叶斯分类
e1071包:
nativeBayes()——朴素贝叶斯分类器,可以处理分类型和连续型自变量
knn
knn()——class包
TTR包——技术指标集合
quantmod包——分析金融数据
tserise包
特殊字符
formula=y~.——”.”是除y以外数据中的所有变量
function(fromula, train, test,…)——特殊参数“…”,允许特定函数具有可变参数,这个参数结构是一个列表,用来获取传递给前三个命名参数之后的所有参数。这个结构用于给实际模型传递所需要的额外参数。
<model.object>@pars——(模型)对象的属性用操作符“@”访问,比如对象object的属性是pars
R提供工具来计算累计分布函数p(cummulative distribution function CDF),概率密度函数d和分位数函数q,另外在各种概率分布前加r表示产生随机序列
(R这种直接在分布前面加前缀的语法太难读了,pt() 误以为还是一个函数,实际上的含义是p(t()),为什么不写成这个格式呢? 不过t()返回什么好…)
常见概率分布
离散型
1.二项分布Binomial distribution:binom
二项分布指的是N重伯努利实验,记为X ~ b(n,p),E(x)=np,Var(x)=np(1-p)
pbinom(q,size,prob), q是特定取值,比如pbinom(8,20,0.2)指第8次伯努利实验的累计概率。size指总的实验次数,prob指每次实验成功发生的概率
dbinom(x,size,prob), x同上面的q同含义。dfunction()对于离散分布来说结果是特定值的概率,对连续变量来说是密度(Density)
rbinom(n, size, prob),产生n个b(size,prob)的二项分布随机数
qbinom(p, size, prob),quantile function 分位数函数。
分位数:
若概率0<p<1,随机变量X或它的概率分布的分位数Za。是指满足条件p(X>Za)=α的实数。如t分布的分位数表,自由度f=20和α=0.05时的分位数为1.7247。 –这个定义指的是上侧α分位数
α分位数:
实数α满足0 <α<1 时,α分位数是使P{X< xα}=F(xα)=α的数xα
双侧α分位数是使P{X<λ1}=F(λ1)=0.5α的数λ1、使 P{X>λ2}=1-F(λ2)=0.5α的数λ2。
qbinom是上侧分位数,如qbinom(0.95,100,0.2)=27,指27之后P(x>=27)>=0.95。即对于b(100,0.2)为了达到0.95的概率至少需要27次重复实验。
2.负二项分布negative binomial distribution (帕斯卡分布)nbinom
掷骰子,掷到一即视为成功。则每次掷骰的成功率是1/6。要掷出三次一,所需的掷骰次数属于集合 { 3, 4, 5, 6, … } 。掷到三次一的掷骰次数是负二项分布的随机变量。
dnbinom(4,3,1/6)=0.0334898,四次连续三次1的概率为这个数。
概率函数为f(k;r,p)=choose(k+r-1,r-1)*p^r*(1-p)^k, 当r=1时这个特例分布是几何分布
rnbinom(n,size,prob,mu) 其中n是需要产生的随机数个数,size是概率函数中的r,即连续成功的次数,prob是单词成功的概率,mu未知..(mu是希腊字母υ的读音)
3.几何分布Geometric Distribution,geom
n次伯努利试验,前n-1次皆失败,第n次才成功的机率
dgeom(x,prob),注意这里的x取值是0:n,即dgeom(0,0.2)=0.2,以上的二项分布和负二项分布也是如此。
ngeom(n,prob)
4.超几何分布Hypergeometric Distribution,hyper
它描述了由有限个(m+n)物件中抽出k个物件,成功抽出指定种类的物件的次数(不归还)。
概率:p(x) = choose(m, x) choose(n, k-x) / choose(m+n, k) for x = 0, …, k.
当n=1时,这是一个0-1分布即伯努利分布,当n接近无穷大∞时,超几何分布可视为二项分布
rhyper(nn,m,n,k),nn是需要产生的随机数个数,m是白球数(计算目标是取到x个白球的概率),n是黑球数,k是抽取出的球个数
dhyper(x, m, n, k)
5.泊松分布 Poisson Distribution,pois
p(x) = lambda^x exp(-lambda)/x!
for x = 0, 1, 2, …. The mean and variance are E(X) = Var(X) = λ. x ~ π(λ)
泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生率.泊松分布适合于描述单位时间内随机事件发生的次数。如某一服务设施在一定时间内到达的人数,电话交换机接到呼叫的次数,汽车站台的候客人数,机器出现的故障数,自然灾害发生的次数等等.
rpois(n, lambda)
dpois(x,lambda)
连续型
6.均匀分布 Uniform Distribution,unif
f(x) = 1/(max-min) for min <= x <= max.
runif(n,min,max).
生成16位数的随机数:as.character(runif(1,1000000000000000,9999999999999999))
dunif(x,min,max)=1,恒定等于1/(max-min).
对于连续变量,dfunction的值是x去特定值代入概率密度函数得到的函数值。
7.正态分布Normal Distribution,norm
f(x) = 1/(sqrt(2 pi) sigma) e^-((x – mu)^2/(2 sigma^2))
其中mu是均值,sigma是standard deviation标准差
理论上可以证明如果把许多小作用加起来看做一个变量,那么这个变量服从正态分布
rnorm(n,mean=0,sd=1)后两个参数如果不填则默认为0,1。
dnorm(x,mean,sd),sd是标准差。
画出正态分布概率密度函数的大致图形:
x<-seq(-3,3,0.1)
plot(x,dnorm(x)) plot中的x,y要有相关关系才会形成函数图。
qnorm(p,mean,sd),这个还是上侧分位数,如qnorm(0.05)=-1.644854,即x<=这个数的累计概率小于0.05
3sigma法则:对于正态分布的x,x取值在(mean-3sd,mean+3sd)几乎是在肯定的。
因为pnorm(3)-pnorm(-3)=0.9973002
用正太分布产生一个16位长的随机数字:
as.character(10^16*rnorm(1))
8.伽玛分布Gamma Distribution,gamma
http://zh.wikipedia.org/w/index.php?title=伽玛分布&variant=zh-cn
假设随机变量X为 等到第α件事发生所需之等候时间。
f(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s) for x >= 0, a > 0 and s > 0.
Gamma分布中的参数α,称为形状参数(shape parameter),即上式中的s,β称为尺度参数(scale parameter)上式中的a
E(x)=s*a, Var(x)=s*a^2. 当shape=1/2,scale=2时,这样的gamma分布是自由度为1的开方分布
http://zh.wikipedia.org/wiki/File:Gamma_distribution_pdf.png
dgamma(x,shape,rate=1,scale=1/rate), 请注意R在这里提供的rate是scale尺度参数的倒数,如果dgamma(0,1,2)则表示dgamma(0,shape=1,rate=2),而非dgamma(0,shape=1,scale=2)
pgamma(q, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,
log.p = FALSE)
qgamma(p, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,
log.p = FALSE)
rgamma(n, shape, rate = 1, scale = 1/rate)
9.指数分布Exponential Distribution,exp
指数分布可以用来表示独立随机事件发生的时间间隔,比如旅客进机场的时间间隔、中文维基百科新条目出现的时间间隔等等。
记作X ~ Exponential(λ)。
f(x) = lambda e^(- lambda x) for x >= 0.
其中lambda λ > 0是分布的一个参数,常被称为率参数(rate parameter). E(x)=1/λ,Var(x)=1/λ^2
dexp(x, rate = 1, log = FALSE)
pexp(q, rate = 1, lower.tail = TRUE, log.p = FALSE)
qexp(p, rate = 1, lower.tail = TRUE, log.p = FALSE)
rexp(n, rate = 1)
假设在公交站台等公交车平均10分钟有一趟车,那么每小时候有6趟车,即每小时出现车的次数~ Exponential(1/6)
我们可以产生10个这些随机数看看rexp(10,1/6)
60/(rexp10,1/6)即为我们在站台等车的随机时间,如下:
[1] 6.443148 24.337131 6.477096 2.824638 15.184945 14.594903
[7] 7.133842 8.222400 42.609784 15.182827
可以看见竟然有一个42.6分钟的随机数出现,据说这种情况下你可以投诉上海的公交公司。
不过x符合指数分布,1/x还符合指数分布吗?
pexp(6,1/6)=0.6321206, 也就是说这种情况下只有37%的可能公交车会10分钟以内来。
按照以上分析一个小时出现的公交车次数应该不符合指数分布。
10.卡方分布(non-central)Chi-Squared Distribution,chisq
它广泛的运用于检测数学模型是否适合所得的数据,以及数据间的相关性。数据并不需要呈正态分布
k个标准正态变量的平方和即为自由度为k的卡方分布。
E(x)=k,Var(x)=2k.
dchisq(x, df, ncp=0, log = FALSE)
pchisq(q, df, ncp=0, lower.tail = TRUE, log.p = FALSE)
qchisq(p, df, ncp=0, lower.tail = TRUE, log.p = FALSE)
rchisq(n, df, ncp=0)
其中df为degrees of freedom。ncp是non-centrality parameter (non-negative).ncp=0时是central卡方分布,ncp不为0时,表示这个卡方分布是由非标准正态分布组合而成,ncp=这些正态分布的均值的平方和。
11.β分布Beta Distribution,beta
变量x仅能出现于0到1之间。
空气中含有的气体状态的水分。表示这种水分的一种办法就是相对湿度。即现在的含水量与空气的最大含水量(饱和含水量)的比值。我们听到的天气预告用语中就经常使用相对湿度这个名词。
相对湿度的值显然仅能出现于0到1之间(经常用百分比表示)。冬季塔里木盆地的日最大相对湿度和夏季日最小相对湿度。证实它们都符合贝塔分布
dbeta(x, shape1, shape2, ncp = 0, log = FALSE)
pbeta(q, shape1, shape2, ncp = 0, lower.tail = TRUE, log.p = FALSE)
qbeta(p, shape1, shape2, ncp = 0, lower.tail = TRUE, log.p = FALSE)
rbeta(n, shape1, shape2, ncp = 0)
shape1,shape2是beta分布的两个参数。E(x)=s1/(s1+s2),var(x)=s1*s2/(s1+s2)^2 * (s1+s2+1)
12.t分布Student t Distribution,t
应用在当对呈正态分布的母群体的均值进行估计。当母群体的标准差是未知的但却又需要估计时,我们可以运用学生t 分布。
学生t 分布可简称为t 分布。其推导由威廉·戈塞于1908年首先发表,当时他还在都柏林的健力士酿酒厂工作。因为不能以他本人的名义发表,所以论文使用了学生(Student)这一笔名。之后t 检验以及相关理论经由罗纳德·费雪的工作发扬光大,而正是他将此分布称为学生分布。
dt(x, df, ncp, log = FALSE)
pt(q, df, ncp, lower.tail = TRUE, log.p = FALSE)
qt(p, df, ncp, lower.tail = TRUE, log.p = FALSE)
rt(n, df, ncp)
其中df是自由度,ncp是non-centrality parameter delta,If omitted, use the central t distribution。ncp出现时表示分布由非标准的卡方分布构成。
13.F分布
一个F-分布的随机变量是两个卡方分布变量的比率。F-分布被广泛应用于似然比率检验,特别是方差分析中
df(x, df1, df2, ncp, log = FALSE)
pf(q, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)
qf(p, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)
rf(n, df1, df2, ncp)
df1,df2是两个自由度,ncp同t分布中的ncp。
最新评论