《R语言与数据挖掘》⑥-①分类与预测建模【回归分析】
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。lm()函数说明lm(formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, off
·
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。
lm()函数说明
lm(formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...)
其中, formula指要拟合的模型形式, data是一个数据框,包含用于拟合模型的数据。
实际案例1:利用数据集women建立简单线性回归模型
# 线性回归模型
data(women)
lm.model <- lm( weight ~ height - 1, data = women) # 建立线性回归模型
summary(lm.model) # 输出模型的统计信息
plot(women) # 画散点图
abline(lm.model) # 画出拟合曲线
points(women[6,],pch=8,col="red") # 标记点
coefficients(lm.model) # 输出参数估计值
confint(lm.model, parm = "speed", level = 0.95) # parm缺省则计算所有参数的置信区间
fitted(lm.model) # 列出拟合模型的预测值
anova(lm.model) # 生成一个拟合模型的方差分析表
vcov(lm.model) # 列出模型参数的协方差矩阵
residuals(lm.model) # 列出模型的残差
AIC(lm.model) # 输出AIC值
BIC(lm.model) # 输出BIC值
par(mfrow = c(2, 2))
plot(lm.model) # 生成评价拟合模型的诊断图
# 回归模型做预测
x_test = data.frame(height=c(64,65,66)) # 做预测的自变量数据需要存为数据框格式。
predict(lm.model,x_test,interval='prediction',level=0.95)
plot(women)
abline(lm.model)
points(women[6,],pch=8,col="red")
线性拟合常见的参数总结!
实际案例2:结婚时间、教育、宗教等其它变量对出轨次数的影响
# 逻辑回归模型
library(AER)
data(Affairs, package = "AER")
# 由于变量affairs为正整数,为了进行Logistic回归先要将其转化为二元变量。
Affairs$ynaffair[Affairs$affairs > 0] <- 1
Affairs$ynaffair[Affairs$affairs == 0] <- 0
Affairs$ynaffair <- factor(Affairs$ynaffair, levels = c(0, 1),
labels = c("No", "Yes"))
# 建立Logistic回归模型
model.L <- glm(ynaffair ~ age + yearsmarried + religiousness + rating,
data = Affairs, family = binomial (link = logit))
summary(model.L) # 展示拟合模型的详细结果
predictdata <- data.frame(Affairs[, c("age", "yearsmarried", "religiousness", "rating")])
# 由于拟合结果是给每个观测值一个概率值,下面以0.4作为分类界限
predictdata$y <- (predict(model.L, predictdata, type = "response") > 0.4)
predictdata$y[which(predictdata$y == FALSE)] = "No" # 把预测结果转换成原先的值(Yes或No)
predictdata$y[which(predictdata$y == TRUE)] = "Yes"
confusion <- table(actual = Affairs$ynaffair, predictedclass = predictdata$y) # 混淆矩阵
confusion
(sum(confusion) - sum(diag(confusion))) / sum(confusion) # 计算错判率
回归诊断
数据的无规律性或者错误设定了预测变量与响应变量的关系,都将致使模型产生巨大的偏差。这样的模型的预测效果可能会很差,并且误差显著。因此,我们需要对回归模型进行诊断。与回归诊断相关的函数有:
# 检验误差项的自相关性
durbinWatsonTest(lm.model)
离群点检测
# Bonferroni离群点检验
library(car)
fit <- lm(weight ~ height, data = women) # 建立线性模型
outlierTest(fit) # Bonferroni离群点检验
women[10, ] <- c(70, 200) # 将第10个观测的数据该成height = 70,weight = 200
fit <- lm(weight ~ height, data = women)
outlierTest(fit) # Bonferroni离群点检验
变量选择
在实际的问题中,影响因变量的因素很多,可以选择若干个自变量建立回归方程,这便涉及到变量选择的问题。R软件中step()函数可以完成这一过程。
【模型诊断的结果解释:传送门】
# 自变量选择
Data <- freeny
lm <- lm(y ~ ., data = Data) # logistic回归模型
summary(lm)
lm.step <- step(lm, direction = "both") # 一切子集回归
summary(lm.step)
lm.step <- step(lm, direction = "forward") # 前进法
summary(lm.step)
lm.step <- step(lm, direction = "backward") # 后退法
summary(lm.step)
更多推荐
所有评论(0)