目录
相关性分析
- 绘制散点图先观察相关性
- 根据相关系数进行计算 如pearson相关系数
- 相关关系 的绝对值0.8 则高度相关 0.5到0.8之间则中度相关,0.3-0.5则弱相关,小于0.3则几乎不相关。
回归性分析
- 当组合中仅包含一个因变量和一个自变量的时候,称为简单线性回归模型,反之是多元线性回归模型。
线性回归模型的介绍
回归系数的求解
- 假设误差项服从均值为0,标准值为的正态分布
- 构造似然函数
- 取对数并整理
- 展开并求导
- 计算偏回归系数
R语言中的线性回归
lm(formula,data,subset,wrights,na.action)
#formula: 指定函数公示 如y~x1+x2, 若y~.则和所有变量相关
#subset 样本子集
# weights 权重
显著性检验
#F检验,使用anova函数进行方差分析
使用 qf(0.95,5,34)可以获取该*度下的F分布理论值。
# 建模
model <- lm(Profit ~ ., data = train)
model
# F统计量的计算
result <- anova(model)
result
# F统计量的计算
RSS <- sum(result$`Sum Sq`[1:4])
df_RSS <- sum(result$Df[1:4])
ESS <- result$`Sum Sq`[5]
df_ESS <- sum(result$Df[5])
F <- (RSS/df_RSS)/(ESS/df_ESS)
F
qf(0.975,5,34)
其中RSS为回归离差平方和(预测值减去平均值),ESS为误差平方和(实际值减去预测值)
参数的显著性检验——t检验
F检验用于对模型的检验,t 检验用于对单个参数的检验。
使用summary函数可以直接获得t检验的值
# 模型的概览
summary(model)
# 理论t分布的值
n <- nrow(train)
p <- ncol(train)
t <- qt(0.975,n-p-1)
t
逐步回归
- 前向回归:逐步添加变量,不断调整
- 后向回归:逐步删除变量
- 双向逐步回归:删除了的可以添加,添加的可以删除
逐步回归使用step函数
# 逐步回归完成遍历选择
model2 <- step(model)
# 最终模型概览
summary(model2)
验证模型的各类假设前提
多重线性检验
使用car包的vif函数
VIF简称方差的膨胀因子,0<VIF<10的时候,不存在多重现性,在10到100则存在,大于一百则严重。
library(car)
vif(model2)
正态性检验
#绘制直方图
hist(x = profit$Profit, freq = FALSE, main = '利润的直方图',
ylab = '核密度值',xlab = NULL, col = 'steelblue')
#添加核密度图
lines(density(profit$Profit), col = 'red', lty = 1, lwd = 2)
#添加正态分布图
x <- profit$Profit[order(profit$Profit)]
lines(x, dnorm(x, mean(x), sd(x)),
col = 'black', lty = 2, lwd = 2.5)
使用PP图或QQ图
PP图横坐标是累计概率,纵坐标是实际累计概率;QQ图横坐标为理论分位数,纵坐标为实际分位数。
shapior检验与k-s检验
当样本量低于5000时候,使用shapiro检验法,否则使用k-2检验法。
P值大于置信水平则接受原假设。
# 统计法
shapiro.test(profit$Profit)
数学变换
当变量不服从正态分布就进行数学变换,如开根号、取对数等,还有BOX-COX变换。
# box-cox变换
powerTransform(model2)
独立性检验
检验各变量之间是否独立。
# 独立性检验
durbinWatsonTest(model2)
方差齐性检验
方差齐性要求模型残差项的方差不随自变量的变动而呈现某种趋势。
是否存在线性关系用BP检验,非线性用White检验,若存在则不满足齐性的条件。
# 方差齐性检验
ncvTest(model2)
模型预测
使用predict函数
# 模型预测
pred <- predict(model2, newdata = test[,c('R.D.Spend','Marketing.Spend')])
ggplot(data = NULL, mapping = aes(pred, test$Profit)) +
geom_point(color = 'red', shape = 19) +
geom_abline(slope = 1, intercept = 0, size = 1) +
labs(x = '预测值', y = '实际值')