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")
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度线
左下(检验同方差性)位置尺度图,水平线周围的点应该随机分布
右下(离群、高杠杆点、强影响点),残差—杠杆图
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") # 绘制学生分布残差图
library(car)
durbinWatsonTest(fit)
library(car)
crPlots(fit)
library(car)
ncvTest(fit) # 生成一个计分检验,零假设为误差方差不变,显著则说明存在异方差性
spreadLevelPlot(fit) # 添加了最佳拟合曲线的散点图
library(car)
vif(fit)
sqrt(vif(fit)) > 2 #大于2就表明存在多重共线性
library(car)
outlierTest(fit)
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)
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")
library(car)
influencePlot(fit, id.method="identify", main="")
如何删除异常值点(13、15号)然后做回归
fit <- lm(weight~ height + I(height^2), data=women[-c(13,15),])
当违反了线性假设时,需要对预测变量进行变换
library(car)
summary(powerTransform(states$Murder)) #看Est.Power下面的数是几
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小者更优
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")
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") ##预测区间