《R语言与农业数据统计分析及建模》学习——回归分析

一、线性回归

        线性回归是一种广泛用于数据分析、预测和建模的技术,可以帮助我们理解变量之间的关系,并进行预测和推断。

1、简单线性回归

        简单线性回归是线性回归的一种特殊情况,适用于只有一个自变量和一个因变量的情况。

        在R语言中,可以使用lm()函数来建立线性回归模型。

# 建立示例数据
df<-data.frame(
  rain=c(136,269,311,427,537),
  yield=c(179,137,355,411,523)
)
# 假设因变量为yield,自变量为rain
mode<-lm(yield~rain,data=df)
# 查看模型摘要
summary(mode)

输出结果如下:

        在简单线性回归中:multiple R-squared=0.8054,说明rain可以解释yield变量80.54%的变异。F-statistic对应的p-value为0.03882,说明rain和yield之间存在线性关系。具体的线性回归系数查看coefficients表即可。

下面利用回归方程进行预测:

# 假设要预测的自变量值为350
new_x<-350
predict_y<-predict(mode,newdata=data.frame(rain=new_x))
print(predict_y)
# 绘制回归线和散点图
library(ggplot2)
ggplot(df,aes(x=rain,y=yield))+geom_point()+geom_smooth(
  method="lm",se=FALSE
)

2、多元线性回归

        在简单线性回归的基础上,引入多个自变量,建立一个多元线性回归模型。

        在R语言中,也是使用lm()函数来建立多元线性回归模型。

# 示例数据集
df<-data.frame(
  rain=c(136,269,311,427,537),
  temp=c(15.5,12.7,16.3,14.3,12.9),
  yield=c(179,137,355,411,523)
)
# 建立多元线性回归模型
model<-lm(yield~rain+temp,data=df)
# 查看模型摘要
summary(model)

        F检验说明存在线性方程,方程可以解释yield变量的91.48%的变异;在系数的t检验,可知rain变量的回归系数是显著的,而temp变量的回归系数是不显著的。

# 数据预测
new_x<-data.frame(rain=c(275,360),temp=c(18.4,13.6))
predict_y<-predict(model,newdata=new_x)
print(predict_y)

二、回归诊断

        回归诊断是对回归分析中的假设的检验与分析。R中lm线性回归基于OLS(普通最小二乘法)方法,需要基于一定的假设。

OLS回归的统计假设:

        正态性:因变量呈正态分布

        独立性:因变量值相互独立

        线性:因变量与自变量线性相关

        残差随机性

1、回归诊断方法

        R基础包中提供了检验回归分析中统计假设的方法。

        最常见的方法就是对lm()函数的返回对象使用plot()。

# 使用自带的mtcars数据集进行简单线性回归模型
model<-lm(mpg~hp,data=mtcars)
par(mfrow=c(2,2))
plot(model)

        car包提供了大量函数,大大增强了诊断回归模型的能力

        (1)qqPlot()函数提供了更为精确的正态假设检验方法。

# 加载car包
library(car)
# qqPlot()函数生成概率图
qqPlot(
  model,
  labels=row.names(mtcars),
  simulate=TRUE,
  main="Q-Q Plot"
)

        (2)Durbin-Watson检验的函数,能够检测误差的序列相关性。

p-value小于0.05,说明误差项之间存在显著自相关,即误差项之间不独立。

        (3)crPlots()函数绘制成分残差图,检验因变量与自变量之间是否呈非线性关系。

        由上图可知,hp与mpg之间存在较明显的非线性关系,需要考虑其他曲线关系。

        (4)ncvTest()函数和spreadLevelPlot()函数用于判断误差的同方差性。

        ncvTest()函数生成一个计分检验,零假设是:误差方差不变;备择假设是:误差方差随着拟合值的水平变化而变化。

        本例结果显示,vcvTest检验说明误差方差不变。

         spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,来展示标准化残差绝对值与拟合值的关系。

        本图显示,散点是水平的最佳拟合周边基本呈随机分布。

2、模型假设的综合验证

        gvlma()函数能够线性模型假设进行综合验证,同时还能做偏斜度、峰度和异方差性的评价。它给模型假设提供了一个单独的综合检验(通过/不通过)。

install.packages("gvlma")
# 加载gvlma包
library(gvlma)
gvmodel<-gvlma(model)
summary(gvmodel)

        重点查看Global Stat检验结果,显示差异极显著,且结论为不满足假设。说明此线性拟合结果存在明显的问题,需重新拟合。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值