1. 载入数据
data(iris) # 载入iris数据集
# 查看数据集
summary(iris)
str(iris)
View(iris)
#划分数据集合
is_train <- sample(c(TRUE,FALSE),nrow(iris),replace=TRUE,prob=c(0.7,0.3))
train <- iris[is_train,] # training dataset
test <- iris[!is_train,] # test dataset
2. 模型拟合
### 模型拟合
# train$Species 为多分类变量,模型中为哑变量
lm_fit<- lm(train$Petal.Length~.,data = train)
summary(lm_fit)
# F统计量:它提供了模型的整体重要性。它评估至少一个预测变量是否具有非零系数。
# F统计量越大, 对应的统计显着性p值(p <0.05)越小
# Adjusted R-squared:模型中的自变量多大程度上解释了因变量,越大越好
# 残差标准误/残留标准误差(residual standard error, RSE),
# 也称为模型sigma(model sigma),是针对模型中预测变量数量进行调整的RMSE。
# RSE越低,模型越好。
# 实际上,RMSE(root mean squared error, RMSE)和RSE之间的差异很小,
# 尤其是对于多元数据(含有多个预测变量的模型)而言。
lm_fit2<- lm(train$Petal.Length~Sepal.Length+Petal.Width+Species,
data = train)
lm_fit3<- lm(train$Petal.Length~Sepal.Length+Petal.Width,
data = train)
3. 模型参数
## 模型参数
coef(lm_fit)
#coefficients(lm_fit)
df.residual(lm_fit) # 残差df,数据集的观测(行)总数减去所估计的变量数
deviance(lm_fit) # 模型偏差
residuals(lm_fit) # 拟合模型残差(训练集上)
confint(lm_fit) # 模型参数的置信区间,默认95%
fitted(lm_fit) # 模型的拟合值
4. 模型回归诊断
### 回归诊断
# 残差要符合正太分布
lm_res = residuals(lm_fit) # 模型残差:预测值和实际值差
shapiro.test(lm_res) # 检验是否正态分布 p<0.05:正态分布
par(mfrow=c(2,2))
plot(lm_fit)
5. 模型预测
### 模型预测
test_x <- test[,-3]
test_y <- test[,3]
# iris$Petal.Length 为iris 数据框第三列
# ?predict.lm
predict_y <- predict(lm_fit,test_x)
# predict_y <- predict(lm_fit,test_data,se.fit = TRUE)
# predict(lm_fit,test_data,interval="confidence")
plot(test_y,predict_y)
6. 模型选择
### 根据AIC选择模型
# step {stats}:Select a formula-based model by AIC.
# 赤池信息标准AIC,越小越好
st_fit <- step(lm_fit,derection = "both")
summary(st_fit)
7. 模型比较
### 模型比较
# anova {stats}:Compute analysis of variance (or deviance) tables
# for one or more fitted model objects.
anova(lm_fit,lm_fit2,lm_fit3) # 模型间是否有显著差异
AIC(lm_fit,lm_fit2,lm_fit3) # AIC值越小的模型要优先选择