创建数据集基础数据集--行:观测 ;列:变量数据类型:数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)、原生型(字节)
2. 数据结构:标量
向量: 函数c( )创建向量;[ ]给定元素所处位置的数值
矩: matrix( vector, nrow=, ncol=, byrow= TRUE按行填充)
数组: array( ) dim维数; aperm() 函数 广义转置
数据框: data.frame()
#选取数据框中的元素: $ ; attach( )、detach( ); with( )
例:with(mtcars, { #enter+shift 换行
nokeepstats
keepstats <
plot(mpg, wt)
})
#实例标识符
#因子 factor( )--有序 参数ordered= TRUE,levels = c( )
例:sex
变量:类别/名义型变量(无顺序)、有序型变量、连续型变量列表 list( ) #通过[[ ]]访问列表中的元素
3. 导入数据
read.table() / read.csv( ,header=TRUE,stringsAsFactors=FALSE)
read.xlsx() #需要library(xlsx)
4. 访问前n行 head()
5. 计算行列数 nrow/ncol() 、 计算维数 dim()
6. 去重 unique()
duplicated()
7. 数据类型转换: as.numeric / as.character /as.vector /as.matrix /as.data.frame /as.factor /as.logical
8. str() #查看数据类型,对象的结构
class() #查看数据结构类型,例如"data.frame"等
unclass() #直接检查对象的内容
attributes() #罗列对象属性
attr() #设置对象属性,dim属性等
ls() #列出变量?
environment()
9. setkey() #设置key , data.table()包 ?
10. 数字取整相关的操作函数:ceiling() #返回对应数字的'天花板'值,就是不小于该数字的最小整数;
floor() #返回'地板'值,即不大于该数字的最大值;
trunc() #向零截取;
round() #'四舍五入'函数;
signif() #保留有效数字,用于科学计数。
11. set.seed() #设定生成随机数的种子,种子是为了让结果具有重复性。
图形各基本图形:plot() #散点图,type="b" 点+线(折线图)/ c 不绘制点 / l 只有线/ o 实心点和线(线覆盖在点上),xaxt="n"控制x轴刻度的显示,n表示不显示
#残差图:plot(x, which=) which=1~4分别代表画普通残差与拟合值的残差图,画正态QQ的残差图,画标准化残差的开方与拟合值的残差图,画Cook统
qqnorm() / qqline() #QQ图
boxplot() #箱线图
hist() #直方图,参数freq=
barplot() #条形图,horiz=TRUE生成水平条形图,beside=FALSE--堆砌,TRUE--并列
spine() #棘状图,vcd包中
pie() #饼图
dotchart() # 点图
density() #核密度估计
ecdf() #经验分布函数
stem() #茎叶图
2. dev.new() / dev.next()/ dev.prev()/ dev.set()/ dev.off()
3. title() #为图形添加标题和坐标轴标签
4. axis(1,at=,labels=,tick=) #创建自定义的坐标轴,1=below,2=left,3=above,4=right
5. lines() #为现有图形添加新的图形元素
6. abline() #为图形添加参考线
7. lowess() /loess() #添加拟合的平滑曲线
8. par()#设定图形参数,参数no.readonly=TRUE可以生成一个可以修改的当前图形参数列表;参数mfrow=c(nrows, ncols)来按行填充矩阵;mfcol按列填充矩阵(与layout作用相似) —不熟悉
9. 常用图形参数:pch 绘制点使用的符号;
lty 线条类型;
col 颜色;
main 标题;
xlab/ylab 坐标轴标签;
cex 符号的大小,缩放倍数;
fg 前景色
bg 背景色/填充色
lwd 线条宽度
10. legend() #添加图例,参数bty="n"图例框是否画出
title() #添加标题和坐标轴标签
axis() #创建自定义的坐标轴
11. text()/mtext() #将文本添加到图形上
12. layout() #分割图形区域,组合图形
13. coplot(a ~ b | c*d) #协同图
14. scatterplot(a~b | c, data=, span= , legend.plot=, id.method=, labels=, boxplots= ) #car包,散点图,span参数控制loess曲线中的平滑量,参数值越大,拟合的越好;id.method表明可通过鼠标单击来交互式的识别数据点;
15. 散点图矩阵pairs(formula, data=) #多变量, formula例如~a+b+c;可创建基础的散点图矩阵
scatterMatrix(formula, data=, spread=, smoother.args=) #散点图矩阵, formula例如~a+b+c
glus包的cpars()函数; TeachingDemos包的pairs2()函数; HH包的xysplom()函数; ResourceSelection包的kepairs()函数; SMPracticals包的pairs.mod()函数
16. 高密度散点图smoothScatter() #可利用核密度估计生成用颜色密度来表示点分布的散点图
hexbin() #hexbin 包,将二元变量的封箱放到六边形单元格中,用六边形封箱图展示的各点上覆盖观测点数目的散点图。
IDPmisc包的ipairs()函数
17. 三维散点图scatterplot3d(x, y, z) #scatterplot3d包,参数type="h"添加点与水平面的垂直线;还可与lm()函数一起添加回归面,$plane3d()
18. 旋转三维散点图plot3d(x, y, z) #rgl包,可通过鼠标旋转坐标轴
scatter3d(x, y, z) #car包,默认添加线性平面
19. 气泡图symbols(x, y, circle= ,fg=, bg=, ) #参数circle=圆圈半径(例circle=sqrt(z/pi));可在指定的(x,y)坐标上绘制圆圈图、方形图、星形图、温度计图和箱线图
20. 相关图 --检验定量变量中众多二元关系的一种有效方式corrgram(x, order=, panel= , text.panel=, diag.panel) #corrgram 包,order=TRUE时相关矩阵将使用主成分分析法对变量重排序,panel设定非对角线面板使用的元素类型,通过lower.panel=,upper.panel来分别设置主对角线下方和上方的元素类型;
colorRampPallette() #指定颜色
21. 马赛克图 --两个以上类别性变量mosaic(table) or mosaic(formula, data=) #vcd包,添加选项shade=TRUE将根据拟合模型的皮尔逊残差值对图形上色,选项legend=TRUE将展示残差的图例
基本数据管理增加数据框的变量transform() #创建新变量
within(dateframe,{ })
dplyr数据处理包的mutate() #可以直接调用前面的新增变量
2. names() #重命名变量
rownames()
colnames()
3. 缺失值判别是否缺失值:is.na() / complete.cases()
对于不符合常理的值定义为缺失值:df$column[df$column==value]
展示出数据中缺失的行:df[!complete.cases(df),]
替换缺失值:df[is.na(df)]
排除缺失值 : 多数函数中自带参数na.rm=TRUE ;
函数na.omit()可以删除所有含有缺失数据的行。
NA和NULL的区别: NA缺失值仍占位;NULL空值
4.日期值默认输入格式为yyyy-mm-dd
%d日期 %m月份 %Y四位数的年份
Sys.Date() 返回当天的日期;date()返回当前的日期和时间
format(x,format=)
difftime(,,units="weeks") #计算时间间隔
as.POSIXct( ,origin="1970-01-01") #时间戳转换
5. 类型转换as.Date() #转化成日期变量 --
as.character() #转化为字符
as.numeric() #数值
as.vector() #向量
as.data.frame() #数据框
as.logical() #布尔值
6. 排序order() #默认升序,-降序例:agg[order(-agg$quantity),]
dplyr包的arrange()
sort() #注意和order的区别,order返回的是sort(x)列表的数字在x列表中的位置
7. 合并merge(a,b,by="" ) #列合并,默认inner join; all=TRUE--outer join;all.x=TRUE --left outer join; all.y=TRUE --right outer join
by.x="",by.y="" --a,b表列名不同时
cbind()
rbind() #行合并
8. 选取子集 : [ row,col]剔除变量: -
%in%:用法 a %in% table,a值是否包含于table中,为真输出TURE,否者输出FALSE;
运算符非[! ]将逻辑值反转
which:用法which(test),返回test为真值的位置(指针)
9. 选入观测 :[条件, ] #可加which,条件 与&,或|
subset(数据源,条件,select=c(列名1,列名2……))
dplyr包的filter()
10. apply家族:apply(x, margin, fun) #对数组/矩阵的各个维度使用函数,margin=1时为行,2为列
sapply(x, fun, ) #用于vector/list, 返回一个vector
sapply(x,"[",1) #提取列表每个成分的第一个元素
lapply(x, fun, 函数的参数) #用于vector/list, 返回一个list——可搭配unlist(),将list类型的结果转化为vector
11. 分组数据处理函数tapply(要计算的变量,list(分组变量1,分组变量2), fun)
by(数据框/矩阵, 分组变量, fun) --fun可以是任意函数---不能用mean?mean不能用于数据框多列?
aggregate(要计算的变量~分组变量1+分组变量2, 数据集, fun) ---结果是个list?
12. 字符处理函数substr(x,start,stop) #提取或替换一个字符向量中的子串
grep()
sub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE) #替换,正则表达式
gsub()
strsplit(x,split,fixed=FALSE) #在split处分割x的元素
paste() #向量转换成字符并连接,分隔符为sep=""
toupper/tolower() #大/小写转换
stringr包: str_replace /str_sub
13. 其他函数rep(x,n) #将x重复n次
例子:cr$number
= cr$number
rep(1:3,c(2,3,5))
seq(from,to,by) #生成一个序列
cut(x,n) #将连续型变量分割成n个水平的因子
range(x) #返回c(min(x),max(x))
14. 整合与重构t() #转置
aggregate(x, by=list(), FUN=) #x是待折叠的数据对象,by是一个变量名组成的列表(必须在一个列表中,即使只有一个变量,可以在列表中自定义名称),这些变量将被去掉以形成新的观测,FUN则是用来计算描述性统计量的标量函数,它将被用来计算新观测中的值。
reshape2包
melt() #融合
dcast() #重铸
14. table() #使用n个类别型变量(因子)创建一个n维列联表,默认忽略缺失值NA,若将NA视为有效,设定参数useNA="ifany"
xtabs(formula ,data= ) #根据一个公式和一个矩阵或数据框创建一个N维列联表,要进行交叉分类的变量应出现在公式的右侧(~符号的右方),以+作为分隔符;若某个变量写在公式的左侧,则其作为一个
margin.table() prop.table()
addmargins() #将概述边margins(默认是求和结果)放入表中
CrossTable() #创建二维列表联,gmodels包
ftable() #紧凑的平铺式多维列表
15. data.table包:setkey
16. 时序处理(zoo、xts包)as.xts()
period1
period.apply(x, INDEX=period1, fun)
split(x, f="weeks") #按周切片
apply.daily/weekly/monthly/quarterly/yearly( ): 按日/周/月/季/年分割数据,执行函数
描述性统计weighted.mean() #加权平均数
quantile() #百分位数
sort() #顺序统计量
cov() #协方差矩阵
cor() #相关矩阵
描述性统计量
summary()
describe() #psych包
stat.desc() #pastecs包
计算分组统计量:
summaryBy(var1+var2~groupvar1+groupvar2, data= dataframe, FUN= ) # doBy包,可为任何内建或自建函数
describeBy(,list() ) # psych包,不允许指定任意函数
colMeans() #对矩阵算平均数
cumsum() #累加
各描述统计
data_outline
n
m
v
s
me
cv
css
uss
R
R1
sm
g1
g2
data.frame(N=n, Mean=m, Var=v, std_dev=s, Median=me, std_mean=sm, CV=cv, CSS=css, USS=uss, R=R, R1=R1, Skewness=g1, Kurtosis=g2, row.names=1)
}
6. 分布函数正态分布:pnorm(q, mu, sigma, lower.tail = TRUE, log.p = FALSE) #正态分布函数, lower.tail = TRUE时 F(x)=P{X<=x} ,左尾概率?
--dnorm(x, mu, sigma, log = FALSE) #对应的概率密度函数
--qnorm(p, mu, sigma, lower.tail = TRUE, log.p = FALSE) #分布函数的反函数,计算下分位点
--rnorm(n, mean=0, sd=1) #产生n个标准正态分布的随机数
7. 其他scale() #中心化center = TRUE,标准化scale = TRUE
diff() #差分
8. 正态性检验shapiro.test() #W检验,只适用于小样本场合(3~50)
ks.test() #经验分布的Kolmogorov-Smirnov检验,大小样本均可
9. describe() #psych包
10. 独立性检验chisq.test() #卡方独立性检验,对二维表
fisher.test() #Fisher精确检验,不能用于2*2的列联表
mantelhaen.test() #其原假设为两个名义变量在第三个变量的每一层中都是条件独立的
11. 相关性的度量
assocstats() #vcd包
12. 相关系数 r—度量两个变量之间线性关系强调的统计量,其取值范围[-1,1]cor(x, use= , method= ) #相关系数, method可选pearson(默认,积差相关/线性相关系数)、spearman(等级相关系数)、kendall(秩相关系数)
cov() #协方差
pcor() #偏相关,ggm包--
cor.test(x, y, alternative = , method =) #相关性的显著性检验,默认alternative = “two.side”
corr.test() #psych包 ,参数use = “pairwise”/"complete" 分别表示对缺失值执行成对删除或行删除
pcor.test() #psych包
13. t检验t.test(x, m=总体均值,al="备择假设的方向") #一个正态总体均值的检验
t.test(y~x, data) #x是一个二分变量 or t.test(y1, y2) #两个独立样本的t检验,默认假定方差不相等(参数var.equel=TRUE假定方差相等),默认备择假设是双侧的(参数alternative="less" 左尾 /"greater" 右尾 可进行有方向的检验)
t.test(y1, y2, paired=TRUE) #非独立样本的t检验,如配对样本
14. 非参数检验 #不知总体分布的情况下,重要概念:秩wilcox.test(y1, y2) #Wilcoxon秩和检验,默认双侧检验 。两组数据独立,来评估观测是否从相同的概率分布中抽到的
wilcox.test(y1, y2) #Wilcoxon符号秩检验,适用于两组配对样本和无法保证正态性假设 的情境。可加参数paired=TRUE 不独立kruskal.test(y~A, data) #各组独立,y是数值型结果变量,A是有两个或更多水平的分组变量,独立
friedman.test(y~A | B, data) #各组不独立,B是一个用以认定匹配观测的区组变量?
15. 置信区间t.test(x, conf=0.95)$con? #参数conf or con?=0.95 为95%的置信区间,可求正态总体均值的置信区间
binom.test(x1, n样本量, 0.95) #可求一个总体比例的置信区间,0.95 为95%的置信区间
binconf(x1, n, alpha=0.05 , method= "all") #Hmisc 包,可求一个总体比例的置信区间,参数alpha为显著性水平,method= ?prop.test(,,con=) $con # 可求两个总体比例之差的置信区间
16. 相关矩阵特征值和特征根eigen() #$values 特征值
正则表达式
\t 匹配一个制表符;
\r 匹配一个回车符;
\n 匹配一个换行符;
function(){
} #自建函数循环while
例如:
fun
if(n<=0)
print("please input a integer above 0!")
else{
while (n!=1){
if (n%%2 == 0)
n
else n
}
print("success!")
}
}
for
for(var in seq) {
statement
}
repeat
2. 条件执行if( ) - else
ifelse()
switch()
3. 自编函数
myfunction
statements
return()
}
4. args() #观测参数的名字和默认值
formals() #以编程方式获取参数名称和默认值时,返回含有必要信息的列表
回归OLS回归:最小二乘法拟合0—使离差平方和达到最小
lm(y~x1+x2+...,data=) #线性回归
例子:lm(weight, height+I(height^2),woman) #多项式回归
lm(y~x+z+x:z,data) #交互项?
scatterplot() #car包
confint() #提供模型参数的置信区间(默认95%)
回归诊断:car包:
正态性: qqPlot() #要求用lm()拟合;参数simulate=TRUE时,95%的置信区间会用参数自助法
独立性: durbinWatsonTest() #适用于时间独立的数据
线性: crplot()
同方差性: ncvTest() #生成计分检验,零假设为误差方差不变
spreadLevelPlot() #创建添加了最佳拟合曲线的散点图
gvlma包:gvlma()
5. 多重共线性
vif() #方差膨胀因子 ,VIF值越大多重共线性越严重(一般>10则认为存在严重的多重共线性)
6. 异常观测值:car包的influencePlot()离群点:模型预测效果不佳的观测点,car包的outerlineTest()
高杠杆值点: 与其他预测变量有关的离群点,可通过帽子统计量判断,
强影响点:对模型参数估计值影响有些比例失衡的点,car包的avplot() 可提供变量添加图
7. 变量转化:car包的powerTransform() #违反正态假设时
boxTidwell() #违反线性假设时,通过获得预测变量幂数的最大似然估计来改善线性关系
8. 模型比较:anova() #比较两个嵌套模型的拟合优度
AIC() #赤池信息准则,AIC值较小的优先选择
9. 变量选择逐步回归:MASS包中的stepAIC()
全子集回归:所有可能的模型都会被检验,leaps包的regsubsets(),通过决定系数R平方,调整的R平方,Mallows Cp统计量等准则来选择“最佳”模型--Cp统计量接近于模型的参数数目(包括截距项Intercept?)
10. 交叉验证:评价回归方程的泛化能力。将一定比例的数据作为训练样本,另外的样本作保留样本
bootstrap包的crossval() #可以实现k重交叉验证
11. 相对重要性coef() #列出拟合模型的系数(截距项、斜率)
relweights 相对权重
%*%表示?
12. 哑变量回归--代码化(1,0)的定性(类别)自变量称为哑变量,定性自变量有k个水平,则在回归模型中引入k-1 个哑变量
方差分析 ANOVA -- 分析factor自变量对numeric因变量的影响/效应 —F检验类型:单因素组间方差分析、单因素组内方差分析、双因素方差分析(主效应、交互效应)
协方差分析ANCOVA、多元方差分析MANOVA、多元协方差分析 MANCOVA
aov(formula, data=dataframe)
#formula例子:y ~ A + B + A:B , y为因变量,A:B为A与B的交互项。
#注意formula顺序很重要:非平衡设计or存在协变量时,协变量-主效应-双因素的交互项-三因素的交互项;默认类型Ⅰ(序贯型)方法计算效应。 —协变量如何定义?y~A*B --双因素且*表示所有可能交互项
y~x+A --含单个协变量的单因素;小写字母表示定量变量,大写字母表示组别因子 —x为协变量,协变量为数值型?
y~B*W+Error(Subject/W) --含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA ;Subject为被试者独有的标识变量 —区别组间因子和组内因子? 组内因子是同一组受试者在变量W所有水平下重复测试
3. Anova() #car包,注意不要与标准anova()函数混淆!提供了类型Ⅱ(分层型)或类型Ⅲ(边界型)的选项
4. plotmeans() #gplots包,用来绘制带有置信区间的组均值图形
5. 多重比较TukeyHSD() #对各组均值差异的成对检验
glht(model, linfct=mcp(自变量= ) ) #multcomp包,适用于线性模型&广义线性模型
6. 评估检验的假设条件正态分布: car包的qqPlot()
方差齐性检验:bartlett.test() /flingner.test() /HH包的hov()函数
离群点检验:car包的outlierTest() 函数
7. 单因素协方差分析ANCOVAeffects包中的effect( "自变量" , model) 来计算调整的均值(即除去协变量效应后的组均值)
检验回归斜率的同质性:除正态性和方差齐性检验外,还假定回归斜率相同,可通过检验交互效应的显著性。
结果可视化:HH包的ancova(formula, data=)
8. 双因素方差分析注意:某自变量需要用factor()转换为因子变量,aov() 函数就会将它当做一个分组变量,而不是一个数值型协变量!
可视化处理: interaction.plot() #展示双因素方差分析的交互效应
更推荐-> HH包的interaction2wt()
9. 重复测量方差分析(含一个组内和一个组间因子的)需要长格式数据才能拟合模型,因变量的每次测试都要放到它独有的行中。
备选方法: lme4包的lmer() / car包的Anova() / nlme包中的gls()
10. 多元方差分析MANOVA --因变量不止一个例子y
manova(y~自变量)
summary.avo() #对每一个变量做单因素方差分析
检验多元正态性,对y用Q-Q图,一个p*1的多元正态随机向量x与均值μ的马氏距离mahalanobis(y, μ, cov) 的平方服从自由度为p是卡方分布qchisq()
identify() #
ap.plot() #mvoutlier包,检验多元离群点
若多元正态性或者方差-协方差均值检验都不满足,或担心离群点。则
--稳健多元方差分析:Wilks.test() #rrcov包
--非参数MANOVA:adonis() #vegan包
11. 用回归做ANOVAlm() 函数 #当lm() 碰到因子时,它会用一系列与因子水平相对应的数值型对照变量来代替因子,设定contracts参数可修改默认的对照方法。
功效分析
—样本大小、显著性水平α、功效1-β、效应值?pwr包
t检验:pwr.t.test(n=, d=, sig.level=, power=, type=, alternative=) #d为效应值,即标准化的均值之差(μ1-μ2)/σ;power为功效水平;type指检验类型("two.sample","one.sample","paired")
pwr.t2n.test(n1=, n2=, d=, sig.level=, power=, alternative=) #n不相等的样本
3. 方差分析pwr.anova.test(k=, n=, f=, sig.level=, power=) #对平衡单因素ANOVA,k是组的个数,n是各组的样本大小
效应值用f衡量
4. 相关性pwr.r.test(n=, r=, sig.level=, power=, alternative=) #r是效应值(通过线性相关系数来衡量)
5. 线性模型pwr.f2.test(u=, v=, f2=, sig.level=, power=) #u和v分别为分子自由度和分母自由度,v=N-k-1(N为总观测数,k为预测变量数),f2是效应值。
6. 比例检验pwr.2p.test(h=, n=, sig.level=, power=) #h是效应值,可用ES.h(p1, p2)函数计算;n是各组相同的样本量。
7. 卡方检验pwr.chisq.test(w=, N=, df=, sig.level=, power=) #w是效应值,可用ES.w2(P)函数计算双因素列联表中备择假设的效应值,P是一个假设的双因素概率表;N是总样本大小;df是自由度,双因素列联表的自由度为(r-1)(c-1)。
8. 在新情况中选择合适的效应值Cohen效应值基准 —书p232
9. 绘制功效分析图形可用for循环+pwr各函数
重抽样与自助法置换检验 #非参数统计的一种,也称随机化检验或重随机化检验;
处理非正态数据/存在离群点/样本很小/无法做参数检验
coin包:--独立性检验
oneway_test(y~A) #两样本和K样本置换检验
oneway_test(y~A|C) #含一个分层(区组)因子的两样本和K样本置换检验
wilcox_test(y~A) #秩和(U)检验,非参数检验的一种
kruskal_test(y~A) #Kruskal-Wallis检验,非参数检验的一种
chisq_test(A~B) #Pearson 卡方检验,判断两类别型变量的独立性
cmhtest(A~B|C) #可根据第三个类别性变量进行分层时,判断类别型变量的独立性
lbl_test(D~E) #线性关联检验,若变量都是有序型,检验是否存在线性趋势
spearman_test(y~x) #Spearman检验,检验两数值变量的独立性
wilcoxsign_test(y1~y2) #符号秩检验,非参数检验的一种,两配对组的相关性检验
friedman_test(y~A|C) #friedman检验,非参数检验的一种,多于两组的相关性检验
注意:y,x为数值变量;A,B 为因子(必须转化为factor);C为类别型区组变量;D,E为有序因子;y1,y2为相匹配的数值变量。
其形式: function_name(formula, data, distribution=) ;参数distribution = (1)"exact"--精确分布 (2)"asymptotic" --渐进分布 (3)approximate(B=#) --蒙特卡洛重抽样,#指重复的次数
lmPerm包:--可做线性模型的置换检验lmp()
aovp()
#与lm() 和aov() 类似,参数perm=(1)Exact,精确检验,适应于小样本(2)Prob(3)SPR
4. 自助法 #无需假设一个特定的理论分布,便可生成统计量的置信区间,并能检验统计假设
5. boot包
bootobject
boot.ci(bootobject, conf=, type=) #获取统计量的置信区间,conf为置信区间,默认=0.95;type默认="all",="bca"在大部分情况中都是更可取的。
广义线性模型--极大似然估计glm(formula, family=family(link=function), data=)
#概率分布family和相应默认的连接函数function
回归诊断:诊断图,car包的influencePlot
Logistic 回归--适用于二值响应变量(0和1) ,假设Y服从二项分布
family=binomial(link= "logit")
泊松回归--适用于在给定时间内响应变量为事件发生数目的情形,假设Y服从泊松分布
family=poisson(link="log")
过度离势:残差偏差与残差自由度的比例远远大于1 --qcc包提供了对泊松模型过度离势的检验方法 qcc.overdispersion.test()
robust包中的glmRob() #可以拟合稳健广义线性模型,包括稳健泊松回归。
主成分分析和因子分析主成分分析(PCA):基础包princomp( ) #数据降维,目标用一组较少的不相关变量代替大量相关变量
因子分析(EFA):基础包factanal( ) #发现潜在结构
——观测变量间的相关性
psych包:principal(r, nfactors=, rotate=, scores=) #含多种可选的方差旋转方法的主成分分析 --rotate指定旋转的方法(默认最大方差旋转varimax),scores设定是否需要计算主成分得分(默认不需要)
fa(r, nfactors=, n.obs=, rotate=, scores=, fm=) #可用主轴、最小方差、加权最小平方或最大似然法估计法因子分析 --fm设定因子化方法(默认极小残差法minres)
fa.parallel() #含平行分析的碎石图 --参数fa="pc"主成分/"both", n.obs= 设定样本大小, n.iter= n次随机数据矩阵?
factor.plot() #绘制因子分析或主成分分析的结果
fa.diagram() #绘制因子分析或主成分分析的载荷矩阵
scree() #因子分析和主成分分析的碎石图
3.常见步骤
(1)数据预处理 --确保数据中没有缺失值
(2)选择因子模型 --EFA还需选择一种估计因子模型的方法(如最大似然法ml、主轴迭代法pa)
(3)判断要选择的主成分/因子数目
(4)选择主成分/因子
(5)旋转主成分/因子
(6)解释结果
(7)计算主成分或因子得分
4.主成分分析:判断主成分个数:基于观测特征值的碎石检验(拐点)/大于1的特征值准则/平行分析;累计方差贡献率>80%的前几个主成分
结果PC1栏包含了成分载荷,指观测变量与主成分的相关系数;h2栏指成分公因子方差,即主成分对每个变量的方差解释度;u2栏指成分唯一性,即方差无法被主成分解释的比例;SS loadings行包含了与主成分相关联的特征值;Proportion Var 每个主成分的方差贡献率。
主成分旋转:正交旋转、斜交旋转
5.探索性因子分析判断需提取的公共因子数:碎石检验/特征值>0
因子旋转:正交旋转重点在于因子结构矩阵(变量与因子的相关系数);斜交旋转(如斜交转轴法promax)会考虑因子结构矩阵、因子模式矩阵(标准化的回归系数矩阵)、因子关联矩阵(因子间相关系数矩阵)。 ?
时间序列常用程序包:stats、forecast、base、tseries
常用函数:ts(data, start=, end=, frequency=) #生成时序对象
stl(ts, s.window=, t.window=) #用LOESS光滑将时序分解为季节项、趋势项和随机项 --s.window="periodic"可以使得季节效应在各年间都一样;只能处理相加模型,相乘模型可以通过对数变换log成相加模型
HoltWinters()
forcast(fit, k) #预测时序未来的k步
accuracy() #返回时序的拟合优度度量,如常用的平均残差平方和的平方根RMSE。
ets(ts, model="zzz") #拟合指数平滑模型,同时可自动选取最优模型;三字母分别代表误差项、趋势项、季节项;可选字母包括相加模型A/相乘模型M/无N/自动选择Z。
Acf(ts) #估计自相关函数
Pacf(ts) #估计偏自相关函数
diff(ts, differences=d) #对序列进行差分
ndiffs(ts) #找到最优差分次数以消除趋势项
adf.test(ts) #ADF检验判断是非平稳,如果结果显著则序列满足平稳性。
arima(ts, order=c(p,d,q)) #拟合ARIMA模型,主要用于拟合具有平稳性的时间序列
Box.text() #Ljung-box检验判断模型的残差是都独立
bdf.test() #判断是否服从独立同分布
auto.arima() #自动选择arima模型
fitted(拟合)是在给定样本上做预测
predict(预测)是在新的样本上做预测,参数n.ahead=预测n期。
#结果$pred点预测,$se估计误差
3. ARIMA模型(p,d,q)步骤:确保时序平稳;可通过ACF和PACF图选择模型;拟合模型;从统计假设和预测准确性等角度评估模型;预测。
AIC值越小越好
聚类分析 --cluster、NbClust、flexclust包一般步骤:
(1)选择合适变量
(2)缩放数据 --scale()函数将变量标准化
(3)寻找异常点 --outliers包
(4)计算距离 --dist(x, method=),默认"euclidean"
(5)选择聚类算法 --层次聚类-小样本
(6)获得一种或多种聚类方法
(7)确定类的数目 --NbClust(data, distance=, min.nc=, max.nc=, method=) 函数提供30个不同指标类帮助选择
(8)获得最终的聚类解决方案
(9)结果可视化
(10)解读类
(11)验证结果 --稳定性
层次聚类:起初每个观测值为一类
hclust(d, method=) #d是距离矩阵;method区别为两类之间的距离定义,包括单联动single、全联动complete、平均联动average、质心centroid和ward
划分聚类:K-means:kmeans(x, centers, nstart=) #对异常值敏感,一般使用euclidean距离;nstart选项尝试多种初始配置并输最好的一个。
围绕中心点的划分(PAM): pam(x, k, metric="euclidean", stand=FALSE) #可以使用任意距离,可容纳混合数据类型,且不仅限于连续变量;stand表示是否有变量应该在计算该指标前被标准化
flexclust包的兰德指数 randIndex()来量化变型变量和类之间的协议
clusplot
4. 避免不存在的类
NbClust包的立方聚类规则CCC
分类逻辑回归
决策树
随机森林
支持向量机
残差分析$residuals
1.残差—时间图rstandard() 标准化残差
残差图 plot(x,which=1) 残差图近似水平,无规律
2.残差独立性检验ACF图
DW独立性检验 :car包的durbinWatsonTest() #pvalue>0.05,符合独立性假设
3.残差随机性检验广义方差检验gvtest()
Ljung-Box检验 #pvalue>0.05满足随机性检验
4.正态性检验qqnorm() + qqline()
shapiro.test() #pvalue>0.05服从正态分布
5.同方差性car包ncvTest() #pvalue>0.05,符合同方差性
dplyr包 (原数据集行名称会被过滤掉。)tbl_df() #用于将过长过大的数据集转换为显示更友好的 tbl_df 类型
筛选:filter() # 类似于 base::subset() 函数
slice() #通过行号选取数据
原数据集行名称会被过滤掉。
排列: arrange() #类似于base::order()函数。默认升序排序,对列名加 desc() 可实现倒序排序。原数据集行名称会被过滤掉。
选择: select() #用列名作参数来选择子数据集。dplyr包中提供了些特殊功能的函数与select函数结合使用, 用于筛选变量,包括starts_with,ends_with,contains,matches,one_of,num_range和everything等。
变形: mutate() #类似于base::transform() 函数,可以在同一语句中对刚增添加的列进行操作。返回的结果集会保留原有变量。
transmute() #只返回扩展的新变量,原数据集行名称会被过滤掉。
去重: distinct #用于对输入的tbl进行去重,返回无重复的行,类似于 base::unique() ,原数据集行名称会被过滤掉。
概括: summarise #对数据框调用函数进行汇总操作,原数据集行名称会被过滤掉。
抽样: sample_n() #随机抽取指定数目的样本
sample_frac() #随机抽取指定百分比的样本,默认都为不放回抽样,通过设置replacement = TRUE可改为放回抽样,可以用于实现Bootstrap抽样。
分组: group_by(.data, ..., add = FALSE)
group_indices(.data, ...)
group_size(x) #返回每个分组的记录数
n_groups(x) #返回分成的组数
tally(x, wt, sort = FALSE);count(x, ..., wt =NULL, sort = FALSE) #分组计数,类似于base:: table()函数。
关联:类似于 base::merge() 函数
inner_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) #内连接,合并数据仅保留匹配的记录。
left_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) #左连接,向数据集x中加入匹配的数据集y记录。
ight_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) #右连接,向数据集y中加入匹配的数据集x记录
full_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) #全连接
semi_join(x,y, by = NULL, copy = FALSE, ...) #返回能够与y表匹配的x表所有记录 anti_join(x, y, by = NULL, copy = FALSE, ...) #返回无法与y表匹配的x表的所有记录
11. 集合操作:
intersect(x,y, ...) #取两个集合的交集
union(x,y, ...) #取两个集合的并集,并进行去重
union_all(x,y, ...) #取两个集合的并集,不去重
setdiff(x,y, ...) #取两个集合的差集
setequal(x, y, ...) #判断两个集合是否相等
12. 数据合并:
bind_rows(...,.id = NULL) # #按行合并,.id添加新列用于指明合并后每条数据来自的源数据框
bind_cols() #按列合并
combine() #合并数据集
13. 条件语句:if_else(condition,true, false, missing = NULL) #missing值用于替代缺失值。true和false对应的值必须要有相同的类型。
case_when语句类似于if/else语句。表达式使用“~”连接,左值LHS为条件语句用于判断满足条件的元素,右值为具有相同类型的替换值,用于替换满足条件的元素。