Lesson 8:回归

一、回归

1、基准模型

fit<-lm(Y~X, data)

交互项

fit<-lm(Y ~ X1:X2+I(X2^2)+X1+X2+X3, data)

展示交互项的结果

install.packages("effects")
library(effects)
fit1 <- lm(EXPENDOP ~ AGE:GENDER+AGE+GENDER,data=df)
plot(effect("AGE:GENDER", fit1,, list(AGE=c(22,32,42))), multiline=TRUE)
函数 含义
summary() 展示拟合模型的详细结果
coefficients() 列出拟合模型的模型参数(截距项和斜率)
confint() 提供模型参数的置信区间(默认 95%)
fitted() 列出拟合模型的预测值
residuals() 列出拟合模型的残差值
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot(df$ height, df$ weight) 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值
abline(fit) 添加趋势线

二、检测二变量关系

相关系数

cor(df$COUNTOP, df$AGE)

二维散点图 scatterplot()

library(car)
scatterplot(weight ~ height, data=women, spread=FALSE, 
   smoother.args=list(lty=2), pch=19,
   main="Women Age 30-39", xlab="Height", ylab="Weight")
fit1 <- lm(weight ~ height, data=women)
abline(fit1)
lines(women$height, fitted(fit1), lty=2, col="red")

展示所有变量的散点图

library(car)
scatterplotMatrix(states, spread=FALSE, smoother.args=list(lty=2),
                  main="Scatter Plot Matrix")

三、模型诊断

1、标准方法

par(mfrow=c(2,2)) # 2*2多图排布
plot(fit2)# 画出四个模型诊断图

如何删除异常值点(13、15号)然后做回归

fit <- lm(weight~ height + I(height^2), data=women[-c(13,15),])

左上(检验线性),残差图与拟合图,残差和拟合值应该没有系统关联
右上(检验正态性),正态qq图,45度线
左下(检验同方差性)位置尺度图,水平线周围的点应该随机分布
右下(离群、高杠杆点、强影响点),残差—杠杆图

2、检验正态性:学生分布残差QQ图

library(car)
fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
qqPlot(fit, labels=row.names(states), id.method="identify",
       simulate=TRUE, main="Q-Q Plot") # 绘制学生分布残差图

3、检验误差独立性:Durbin-Watson检验

library(car)
durbinWatsonTest(fit)

4、检验线性:crPlots

library(car)
crPlots(fit)

5、检验同方差性

library(car)
ncvTest(fit) # 生成一个计分检验,零假设为误差方差不变,显著则说明存在异方差性
spreadLevelPlot(fit) # 添加了最佳拟合曲线的散点图

6. 多重共线性

library(car)
vif(fit)
sqrt(vif(fit)) > 2 #大于2就表明存在多重共线性

四、异常值

1、离群点

library(car)
outlierTest(fit)

2、高杠杆点

hat.plot <- function(fit) {
p <- length(coefficients(fit))
n <- length(fitted(fit))
plot(hatvalues(fit), main="Index Plot of Hat Values")
abline(h=c(2,3)*p/n, col="red", lty=2)
identify(1:n, hatvalues(fit), names(hatvalues(fit)))
}
hat.plot(fit)

3、强影响点

Cook’s D值大于4/(样本量n–预测变量个数k–1),则表明它是强影响点

cutoff <- 4/(nrow(states)-length(fit$coefficients)-2)
plot(fit, which=4, cook.levels=cutoff)
abline(h=cutoff, lty=2, col="red")

4、整合以上三种点

library(car)
influencePlot(fit, id.method="identify", main="")

五、改进方法

1、删除观测点

如何删除异常值点(13、15号)然后做回归

fit <- lm(weight~ height + I(height^2), data=women[-c(13,15),])

2、Box-Cox正态变换

当违反了线性假设时,需要对预测变量进行变换

library(car)
summary(powerTransform(states$Murder)) #看Est.Power下面的数是几

3、 函数比较

fit1 <- lm(Murder ~ Population + Illiteracy + Income + Frost,
data=states)
fit2 <- lm(Murder ~ Population + Illiteracy, data=states)
anova(fit2, fit1) # 短回归在先,长在后,如果p不显著则不需要增加变量

AIC(fit1,fit2)                        ##AIC小者更优
BIC(fit1,fit2)                        ##BIC小者更优

4、逐步回归

library(MASS)
states <- as.data.frame(state.x77[,c("Murder", "Population", "Illiteracy","Income","Frost")])
# 后项逐步回归
fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
stepAIC(fit, direction="backward") ###backward / forward / both
# 前项逐步回归
fit <- lm(Murder ~ 1, data=states)
stepAIC(fit, scope = list(upper=~Population + Illiteracy + Income + Frost, lower=~1),direction="forward")
# 前项后项逐步回归
fit <- lm(Murder ~ 1, data=states)
stepAIC(fit, scope = list(upper=~Population + Illiteracy + Income + Frost, lower=~1),direction="both")

5、全子集回归

library(leaps)
leaps <-regsubsets(Murder ~ Population + Illiteracy + Income + Frost, data=states, nbest=4)
plot(leaps, scale="adjr2")

六、预测

newdata<-data.frame(hp=c(110,245),wt=c(2.5,3.5))
predict(fit4a,newdata)
predict(fit4a,newdata,interval="confidence") ##置信区间
predict(fit4a,newdata,interval="prediction") ##预测区间

你可能感兴趣的:(零基础,r语言)