1:如何创建简单线性回归、多项式回归、多元线性回归
7:深层次的分析-泛化能力和变量相对重要性
一、如何创建简单线性回归、多项式回归、多元线性回归
简单线性回归:##采用R自带的women数据集,分析体重和更改的关系
fit1 = lm(weight~height,data=women) summary(fit)

参数解释:
R方模型的整体评价是怎么样的,R方(0.991)可以解释99.1%的因变量Weight的值。 Estimate 参数的截距项和系数 Pr(>|t|)系数是否显著 H0:t检验所以是为0的原假设
多项式回归:多项式回归其实也是单个的自变量对因变量的解释,只不过对自变量做了算数如对身高^2的算数
fit2= lm(weight~height+I(height^2),data=women) summary(fit2)

七、深层次的分析
模型的泛化能力和变量相对重要性方法
泛化能力:模型对新数据表现如何就叫做模型泛化能力,方法交叉验证:
所谓的交叉验证,将数据分为训练数据和测试数据,先训练数据做回归,再保留样本做预测。
栗子:
创建函数:shrinkage可获得初始R方和交叉验证后的R方
shrinkage= function(fit,k=10){
require(bootstrap)
theta.fit =function(x,y){lsfit(x,y)}
theta.predict = function(fit,x){cbind(1,x)%*%fit$coef}
x = fit$model[,2:ncol(fit$model)]
y = fit$model[,1]
results = crossval(x,y,theta.fit,theta.predict,ngroup = k)
r2 = cor(y,fit$fitted.values)^2
r2cv = cor(y,results$cv.fit)^2
cat("Original R-square=",r2,"\n")
cat(k,"Fold cross-Validated R-square=",r2cv,"\n")
cat("change=",r2-r2cv,"\n")
}
states = as.data.frame(state.x77[,c("Population","Income","Illiteracy","Frost","Murder")])
fit = lm(Murder~.-Murder,data=states)
shrinkage(fit)

可以看到,基于初始样本R方(0.567)过于乐观了,对新数据更好的方差解释率估计是交叉验证后的R方(0.484)
这里,我们可以选择模型变量是4个,我们可以选择具有更好的泛化能力的模型,比如说我们值采用两个变量

变量的相对性
我们一直会存在一个疑问“哪些变量对预测变量有用呢?”又或者是“哪些变量对预测最为重要”
如果预测变量之间不相关,我们直接采用相关系数就可以了,但是大部分情况预测变量之间具有一定的关系。
如此我们去分析变量的相对性就比较复杂了:我们通过以下两种办法
①将数据标准化,然后采用coef函数对回归模型做分析
states = as.data.frame(state.x77[,c("Population","Illiteracy",
"Murder","Income","Frost")])
zstates = as.data.frame(scale(states))
fit = lm(Murder~.-Murder,data=zstates)
coef(fit)
> coef(fit)
(Intercept) Population Illiteracy Income Frost
-2.054026e-16 2.705095e-01 6.840496e-01 1.072372e-02 8.185407e-03
此处可以看到,当其他因数不变时,文盲率一个标准差的变化将增加0.68个标准差的谋杀率。
根据这个我们认为Frost最不重要
②相对权重:在整体的R方解释量时,各个变量对其解释的程度
构建:分析相对权重函数relweghts
relweghts <- function(fit,...){
R <-cor(fit$model)
nvar <-ncol(R)
rxx <-R[2:nvar,2:nvar]
rxy<-R[2:nvar,1]
svd<-eigen(rxx)
evec<-svd$vectors
ev<-svd$values
delta<-diag(sqrt(ev))
lambda<-evec %*% delta %*% t(evec)
lambdasq<-lambda^2
beta<-solve(lambda)%*%rxy
rsquare<-colSums(beta^2)
rawwgt<-lambdasq %*% beta^2
import<-(rawwgt/rsquare)*100
import<-as.data.frame(import)
row.names(import)<-names(fit$model[2:nvar])
names(import)<-"Weights"
import<-import[order(import),1,drop=FALSE]
dotchart(import$Weights,labels = row.names(import),
xlab="% of R-Square",pch=19,
main="Relative Impotance of Predictor Variables",
sub=paste("Total R-Square=",round(rsquare,digits = 3)),...)
return(import)
}
代码清单:
states = as.data.frame(state.x77[,c("Population","Illiteracy",
"Murder","Income","Frost")])
fit = lm(Murder~.-Murder,data=states)
relweghts(fit,col="blue")


通过图形:我们整体R方是(0.567)Illiteracy解释了59%的R方,Frost解释了20.79%,根据相对权重的重要性分别是:
"Illiteracy","Frost"Population","Income",
来源:https://www.cnblogs.com/hero799/p/12031552.html