[size=13.3333px]常用模型
[size=13.3333px]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、精简线性模型,向后消元法
[size=13.3333px]线性回归模型基础
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))——直接用用原模型的自变量做预测,生成估计值
[size=13.3333px]筛选模型自变量
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构成的对象,对回归诊断作总括,返回列表中包括,广义线性模型也可以使用
[size=13.3333px]anova(<lm>)——简单线性模型拟合的方差分析(确定各个变量的作用)
anova(<lm1>,<lm2>)——比较两个模型(检验原假设为不同)
[size=13.3333px]2、误差的独立性——car包提供Duerbin_Watson检验函数
3、线性——car包crPlots()绘制成分残差图(偏残差图)可以看因变量与自变量之间是否呈线性
4、同方差性——car包ncvTest()原假设为误差方差不变,若拒绝原假设,则说明存在异方差性
5、多重共线性——car包中的vif()函数计算VIF方差膨胀因子,一般vif>2存在多重共线性问题
[size=13.3333px]异常点分析(影响分析)
hatvalues()和hat()——帽子矩阵
dffits()——DFFITS准则
cooks.distance()——Cook统计量,值越大越有可能是异常值点
covratio()——COVRATIO准则
[size=13.3333px]kappa(z,exact=FALSE)——多重共线性,计算矩阵的条件数k,若k<100则认为多重共线性的程度很小;100<=k<=1000则认为存在中等程度或较强的多重共线性;若k>1000则认为存在严重的多重共线性。z是自变量矩阵(标准化,中心化的?相关矩阵),exact是逻辑变量,当其为TRUE时计算精准条件数,否则计算近似条件数。用eigen(z)计算特征值和特征向量,最小的特征值对应的特征向量为共线的系数。
[size=13.3333px]step()——逐步回归,观察AIC和残差平方和最小,广义线性模型也可以使用
add1()——前进法
drop()——后退法
stepAIC(sol,direction="backward")——MASS包,可以实现逐步回归(向前、向后、向前向后)
[size=13.3333px]预测
predict(<sol>,<newdataframe>,level=0.95,interval="prediction")——回归预测,sol是模型,newdataframe是待预测数据框,level设置置信度,interval="prediction"表示结果要计算置信区间
[size=13.3333px]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。
[size=13.3333px]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是图题的内容。
[size=13.3333px]avova(sol1,sol2,test="Chisq")——比较模型两个模型,广义线性模型可用卡方检验(分类变量),不拒绝原假设说明两个没有显著差异,即用较少自变量模型就可以。
非线性模型
poly(想,degree=1)——计算正交多现实,x是数值向量,degree是正交多项式的阶数,并且degree<length(x)样本个数,例如建立二次正交式回归模型:lm(y~1+poly(x,2))
[size=13.3333px]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折交叉验证
[size=13.3333px]printcp(<rt>)——查看回归树结果,rt是指rpart()函数的运行结果模型,plotcp(<rt>)以图形方式显示回归树的参数信息
参数如下:
cp——当偏差的减少小于某一个给定界限值,默认0.01
minsplit——当结点中的样本数量小于某个给定界限时,默认20
maxdepth——当树的深度大于一个给定的界限值,默认30
[size=13.3333px]prune(<rt>,cp)——自行设置cp值的建树
[size=13.3333px]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表示时间起始点
[size=13.3333px]decompose(<data>,type)——把时间序列分解成长期趋势和周期性变化,<data>是设置了频率(周期长度)的时间序列数据,type="additive"为累加形式:长期趋势+周期性变化+随机变化;"multiplicative"分解为累乘形式:长期趋势*周期性变化*随机变化。默认使用"additive"累加形式。函数返回值sol<-decompose()中,sol$trend是时间序列趋势,seasonal是季节性周期变化,random是随机误差。
[size=13.3333px]stl(<data>,"per")——分解时间序列,返回值sol<-stl()中,sol$time.series[, "seasonal"]读取周期性序列seasonal,sol$time.series[, "trend"]读取长期趋势trend。误差可以使用sol$time.series[, "remainder"]读取。
[size=13.3333px]增长率:
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一般以周为单位
[size=13.3333px]移动平均:
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]
[size=13.3333px]指数平滑:
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值
[size=13.3333px]模型评估
RMSE(lm,< which>)——qpcR包中计算均方根误差,计算子集subset