使用若干自变量并建立公式,以预测目标变量

目标变量是连续型的,则称其为回归分析

(1)一元线性回归分析

y=kx+b 
sol.lm<-lm(y~x,data) 
abline(sol.lm)

使模型误差的平方和最小,求参数k和b,称为最小二乘法

k=cov(x,y)/cov(x,x) 
b=mean(y)-k*mean(x)

 

 估计参数b,k的取值范围 p元模型 p是自变量数,n是样本数

[ki-sd(ki)ta/2(n-p-1),ki+sd(ki)ta/2(n-p-1)] k0表示回归模型的b;   k1表示k;sd(k)是标准差

自由度 df<-sol.lm$df.residual

left<-summary(sol.lm)$coefficients[,1]-summary(sol.lm)$coeffients[,2]*qt(1-alpha/2,df) 
right<-summary(sol.lm)$coefficients[,1]+summary(sol.lm)$coeffients[,2]*qt(1-alpha/2,df)

 

衡量相关程度

变量x和y相关系数r=Sxy/sqrt(Sxx)sqrt(Syy) 取值范围是[-1,1]  cor(x,y)  

判定系数r^2

 

修正判定系数 adjusted.r^2

判定系数在用于多元回归分析时有一个缺点,自变量数越多,判定系数越大

 

回归系数的显著性检验

 

T检验 summary(sol.lm)$coefficients[,4]

计算得到的p.value值越小,其值等于0的概率也就越小,当p.value<0.05,可认定k!=0

 

F检验 summary(sol.lm)$p.value

在整体上检验模型参数是否为0,并计算等于0的概率,当p.value<0.05,则通过了F检验

 

summary(sol.lm)$fstatistic 给出了样本自由度f、自变量自由度df1、F值df2

 

可以使用如下代码直接读取p.value值

pf(f,df1,df2,lower.tail=F) 或 1-pf(f,df1,df2)

模型误差(残差)  residuals

 

对一个正确的回归模型,其误差要服从正态分布

 

残差的标准误差可以从整体上体现一个模型的误差情况,它可以用于不同模型间性能的对比

 

预测

predict(sol.lm)

(2)多元回归分析

sol.lm<-lm(formula=y~. ,data.train)

 

模型修正函数update(object,formula)

update函数可以在lm模型结果的基础上任意添加或减少自变量,或对目标变量做取对数及开方等建模

 例如:

增加x2平方变量

lm.new<-update(sol.lm, .~.+I(x2^2))

删除x2变量

.~.-x2

把x2变为x2平方变量

.~.-x2+I(x2^2)

增加x1*x2

.~.+x1*x2

在模型中对y开方建模

sqrt(.)~.

 

逐步回归分析函数 step()

逐步减少变量的方法

lm.step<-step(sol.lm)

模型的ACI数值越小越好

 

自变量中包含分类型数据的回归分析

分类变量a的取值为i,则模型预测值是f(a1=0,...ai=1,ap=0)

 

(3)Logic回归 y=1/(1+exp(-x)) 使用最大似然法来估算

使用RODBC包读取Excel文件

root<-"C:/"
file<-paste(root,"data.xls",sep="")
library(RODBC)
excel_file<-odbcConnectExcel(file)
data<-sqlFetch(excel_file,"data")
close(excel_file)

 

使用模型的预测正确率来衡量

 

                               预测数据

                              num11              num10

实际数据                 num01             num00

 

预测正确率=(num11+num00)/样本总数量=(num11+num00)/(num11+num10+num01+num00)

 

t()返回转置

 

glm()是用R语言实现logic回归分析的核心函数

family=binomial("logit")

使用step()函数对模型进行修正

str函数查看包含的数据属性

 

模型预测

new<-predict(old,newdata=test.data) 
new<-1/(1+exp(-new)) 
new<-as.factor(ifelse(new>=0.5,1,0))

 

模型的性能衡量

performance<-length(which((predict.data==data)==TRUE))/nrow(data)

(4)回归树CART

实现CART算法的核心函数是rpart包的rpart函数,再用plot函数画

maptree包的draw.tree函数

 

读取叶节点sol.rpart$frame$var=="<leaf>"

读取叶节点序号sol$rpart$where

要使测试集误差和回归树的规模尽可能小

 

cp复杂度系数 sol.rpart$cptable

xerror是通过交叉验证获得的模型误差

xstd是模型误差的标准差     xerror取xerror+/-xstd

剪枝就是找到一个合理的cp值

随着拆分的增多,复杂性参数会单调下降,但预测误差会先降后生

 

剪枝

prune(sol.part,0.02) 把cp<0.02的树剪除

使用plotcp()函数可以绘制出cp的波动关系