线性回归
1.简单的一元线性回归分析
1.1人造数据
set.seed(1)#随机数种子
x <- seq(1,5,length.out=100)#seq是生成一个向量,首项是1,末项是5,共100个值
noise <- rnorm(n=100,mean=0,sd=1)
beta0 <- 1#截距
beta1 <- 2
y <- beta0 +beta1*x+noise#人造数据,xy大体成线性关系
plot(x,y) #画出一个图
1.2逆向思维,由数据求线性回归关系
假设线性回归模型
Y = b0 + b1*X + e
可以用lm函数
lm函数:用最小二乘法来估计参数
model <- lm(y~x)
plot(y~x)#图不要关
abline(model)
看看残差
plot(x,model$residuals)
残差如果很均匀,无规律
问题解决
如果残差出现弧线之类的
考虑不是线性回归,可能是二次项之类的
比如y <- beta0 +beta1*x^2+noise按二次构建
试着加二次项
model2 <- lm(y~x+I(x^2))
summary(model2)
发现判定系数 R-squared有提高,且得到二次项很显著,一次项不显著
试着把一次项剔除
model3 <- lm(y~I(x^2))
现在有model,model2,model3
用AIC函数判断,找AIC最小的那个
AIC(model,model2,model3)
# df AIC
#model 3 267.2888
#model2 4 269.2121
#model3 3 267.2736
model3拟合的最好
1.3对新样本预测
yConf <- predict(model,interval='confidence')
yPred <- predict(model,interval='prediction')
plot(y~x,col='gray',pch=16)
yConf <- as.data.frame(yConf)
yPred <- as.data.frame(yPred)
lines(yConf$lwr~x,col='black',lty=3)
lines(yConf$upr~x,col='black',lty=3)
lines(yPred$lwr~x,col='black',lty=2)
lines(yPred$upr~x,col='black',lty=2)
lines(yPred$fit~x,col='black',lty=1)
1.4注意:当解释变量不是连续数值时
解释变量不是连续数值,而是二元分类变量时,我们成为虚拟变量
R语言对虚拟变量回归,要将自变量转为因子类型,单纯的虚拟变量回归效果相当于两组数值T检验
set.seed(1)#随机数种子
x <- factor(rep(c(0,1),each=30))
y <- c(rnorm(n=30,mean=0,sd=1),rnorm(n=30,mean=1,sd=1))
plot(x,y) #画出一个图
打赏微信扫一扫,打赏作者吧~