R语言实战笔记–第八章 OLS回归分析

R语言实战笔记–第八章 OLS回归分析R 语言实战笔记 第八章 OLS 回归分析标签 空格分隔 R 语言回归分析 首先 是之前的文章 数理统计里面的简单回归分析 这里简单回顾一下 简单回归分析的原理 最小二乘法 即使回归函数与实际值之差的平方和最小 所以它在 R 中也称为 OLS 模型 它能实现的回归分析为简单线性回归 多项式回归以及多元线性回归 模型中的称谓 自变量 解释变量及预测变量为 x 因变量 结果变量 效标变量及预测响

R语言实战笔记–第八章 OLS回归分析

标签(空格分隔): R语言 回归分析


符号 用途
~ 分隔符号,左边为响应变量,右边为解释变量。例如,要通过x、z和w预测y,代码为y ~ x + z + w
+ 分隔预测变量
: 表示预测变量的交互项。例如,要通过x、z及x与z的交互项预测y,代码为y ~ x + z + x:z
* 表示所有可能交互项的简洁方式。代码y~ x * z * w可展开为y ~ x + z + w + x:z + x:w + z:w + x:z:w
^ 表示交互项达到某个次数。代码y ~ (x + z + w)^2可展开为y ~ x + z + w + x:z + x:w + z:w
. 表示包含除因变量外的所有变量。例如,若一个数据框包含变量x、y、z和w,代码y ~ .可展开为y ~ x + z + w
减号,表示从等式中移除某个变量。例如,y ~ (x + z + w)^2 – x:w可展开为y ~ x + z + w + x:z + z:w
-1 删除截距项。例如,表达式y ~ x -1拟合y在x上的回归,并强制直线通过原点
I() 从算术的角度来解释括号中的元素。例如,y ~ x + (z + w)^2将展开为y ~ x + z + w + z:w。相反, 代码y~ x + I((z + w)^2)将展开为y ~ x + h, h是一个由z和w的平方和创建的新变量
function 可以在表达式中用的数学函数。例如,log(y) ~ x + z + w表示通过x、z和w来预测log(y)
函 数 用 途
summary() 展示拟合模型的详细结果
coefficients() 列出拟合模型的模型参数(截距项和斜率)
confint() 提供模型参数的置信区间(默认95%)
fitted() 列出拟合模型的预测值
residuals() 列出拟合模型的残差值
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot() 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值
myfit<-lm(I(Y^(a))~x+I(x^2)+I(log(x))+var+…+[-1],data=dataframe) 
Call: #拟合公式 lm(formula = Murder ~ Population + Illiteracy + Income + Frost, data = states) Residuals: #残差的图基五数 Min 1Q Median 3Q Max -4.7960 -1.6495 -0.0811 1.4815 7.6210 Coefficients: #回归系数及相关 Estimate Std. Error t value Pr(>|t|) #系数估计值 标准误 t统计量 P值 (Intercept) 1.235e+00 3.866e+00 0.319 0.7510 Population 2.237e-04 9.052e-05 2.471 0.0173 * Illiteracy 4.143e+00 8.744e-01 4.738 2.19e-05 * Income 6.442e-05 6.837e-04 0.094 0.9253 Frost 5.813e-04 1.005e-02 0.058 0.9541 --- Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #上面一行标明在上面的回归系数后面跟着的*的含义,0-0.001之间为'*',0.001-0.001之间为''……,直观表示P值的范围 Residual standard error: 2.535 on 45 degrees of freedom #残差标准误 Multiple R-squared: 0.567, Adjusted R-squared: 0.5285 #决定系数R平方及修正R平方 F-statistic: 14.73 on 4 and 45 DF, p-value: 9.133e-08 #F统计量 
函 数 目 的
Plot() 分位数比较图
durbinWatsonTest() 对误差自相关性做Durbin-Watson检验
crPlots() 成分与残差图
ncvTest() 对非恒定的误差方差做得分检验
spreadLevelPlot() 分散水平检验
outlierTest() Bonferroni离群点检验
avPlots() 添加的变量图形
inluencePlot() 回归影响图
scatterplot() 增强的散点图
scatterplotMatrix() 增强的散点图矩阵
vif() 方差膨胀因子
residplot <- function(fit, nbreaks=10) { #标准化残差z z <- rstudent(fit) #画直方图 hist(z, breaks=nbreaks, freq=FALSE,xlab="Studentized Residual",main="Distribution of Errors") #画轴须图 rug(jitter(z), col="brown") #画正态曲线图(以标准化残差的均值及标准差画正常的正态曲线) curve(dnorm(x, mean=mean(z), sd=sd(z)),add=TRUE, col="blue", lwd=2) #拟合核密度曲线 lines(density(z)$x, density(z)$y,col="red", lwd=2, lty=2) #右上角加入图例 legend("topright",legend = c( "Normal Curve", "Kernel Density Curve"),lty=1:2, col=c("blue","red"), cex=.7) } residplot(fit,nbreaks=n) #调用函数,fit为回归模型lm(),nbreaks为直方图分组数 

  误差的独立性,car包主要提供的是Durbin-Watson检验(函数durbinWatsonTest(),一种检测样本是否存在自相关关系的方法,其原假设为独立,即不相关,当p
<显著水平时,显著拒绝原假设)。其它书上介绍了误差自相关时的解决方案:误差不独立,可以看作是自相关,也叫序列相关,一般来说,有三种原因导致其产生,1)模型的数学形式错误,可以通过利用残差对较高次幂的解释变量进行回归,然后做dw检验,如果序列相关性消失,则为数学形式错误,2)经济变量的惯性,比如时间序列,3)回归模型中略去了带有自相关的重要解释变量,可以通过利用残差对可能影响但未列入模型的解释变量进行回归,并做显著性检验,若显著,则则列入模型。若误差存在自相关,并且排除了上述因素1和因素3后,可以使用orcutt包的cochrane.orcutt(lmobject)函数来进行求解其回归系数。
  

  线性,成份残差图/偏残差图,使用crPlot来画出残差与各成份(即变量)的散点图,实线与虚线拟合度越高越好,即实线最好能与虚线重合。
  
  同方差性,ncvTest()函数将生成一个卡方检验量,零假设为方差不变,即P值小于显著水平时,显著拒绝方差不变的零假设。另外,car包还给出了一个Suggested power transformation(函数为spreadLevelPlot),建议幂次变换值 λ ,使 Yλ 得到一个较为平稳的误差方差,可若建议为0,则使用对数变换,若为0.5,则使用 y 代替y。建议以0.5为一进位,spreadLevelPlot给出了一张图,若图形的线非水平,,则可以按照建议值进行y值的幂次变换。另外,异方差的克服也可以通过Glejser方法进行检验并得到残差绝对值与变量的回归函数关系式,然后对现有回归方程中所有变量均除这个关系式结果得到新解释变量观测值,利用新观测值进行回归拟合即可。
  
  综合验证,gvlma包给出了一个综合验证函数gvlma()上述假设的综合验证结果(acceptable/NOT satisfied)若出现不满意,则需要逐个排除。
  
  多重共线性,当自变量之间存在极高相关性时,将会出现整体的F检验非常显著,但各个回归系数却不显著的情况,要检测此值,可以使用方差膨胀因子VIF进行检测,一般来说 vif>2 就表明存在多重共线性问题。多重共线性的克服可以通过逐步回归方法(setp()函数)对变量的筛选来进行,但逐步回归方法会对变量进行删除,会有一定程度的失真,另一种方法叫 岭回归,它可以在不删除变量的基础上,选择适当的岭参数对回归系数进行修正,使岭估计相对稳定,函数为MASS包中的lm.ridge()函数,相对lm()函数多出了一个岭参数lambda的设置,岭迹法就是把lambda参数设置为序列,并画出来,选择其稳定点的具体参数进行代入计算,选择稳定点可以使用select()函数进行更精确的选择(有HKB、L-W和GCV三种方法,具体先哪个可以分别测试),方法如下:
















library(MASS) lm.ridge(Y~X,data=data)#未设置岭参数时,岭回归与lm结果一样 plot(lm.ridge(Y~X,data=data,lambda=seq(0,1,0.0001)))#画岭迹图 select(lm.ridge(Y~X,data=data,lambda=seq(0,1,0.0001)))#选岭参数 lm.ridge(Y~X,data=data,lambda=0.0038)#根据选择的具体参数代入计算 
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) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220294.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:48
下一篇 2026年3月17日 下午8:48


相关推荐

  • 数独解法(C)

    数独解法(C)未完成 回家继续 usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text usingSystem Threading Tasks namespaceAlg classSudoku Chain IAlgorithm

    2026年3月17日
    2
  • java卸载干净_win10系统java如何卸载_win10怎么把java卸载干净

    java卸载干净_win10系统java如何卸载_win10怎么把java卸载干净win10系统功能强大,在使用win10系统电脑过程中,经常需要对系统中一些不需要的java程序进行卸载,对于一些不熟悉win10系统电脑操作的用户来说,完全不知道win10系统java程序如何卸载,那么下面就由小编来给大家介绍一下win10系统java卸载详细教程。具体方法:方法一:1、单击开始菜单,选择【设置】按钮;2、打开设置会弹出windows设置,在弹出的窗口点击【应用】按钮;3、在右…

    2022年5月12日
    69
  • PEiD查壳教程

    PEiD查壳教程很多新手想要学汉化软件 不知道从何学 今天我就发个最基本的查壳教程 当然咯 此教程只对新手 老鸟请飞过 下面我就简单的介绍一下 新手想要学汉化 第 1 步 就是要查壳 看看软件加的是什么壳 什么是壳 壳呢 就象我们人穿的外表的衣服 穿了衣服 我们也就看不到里面的 下面我就用 PEID 查壳软件来查壳 PEiD 查壳软件介绍 PEiD 可以探测大多数的 PE 文件封包器 加密器和编译器 当前可以探

    2026年3月18日
    2
  • 关于C语言中fseek函数的使用

    关于C语言中fseek函数的使用关于 C 语言中

    2026年3月19日
    1
  • Hibernate Criterion

    Hibernate Criterion

    2021年12月7日
    44
  • eBPF BCC 实现UNIX socket抓包「建议收藏」

    eBPF BCC 实现UNIX socket抓包「建议收藏」在之前,我写了一个《eBPFbpftrace实现个UNIXsocket抓包试试》,但是很受限啊,不能完整打印包数据信息,今天又写了一个BCC的,感觉没问题了。不多说,直接上代码:#!/usr/bin/python#@lint-avoid-python-3-compatibility-imports##undumpDumpUNIXsocketpackets.#ForLinux,usesBCC,eBPF.Embedded

    2026年2月6日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号