在 R 中进行线性回归时如何解释模型诊断?

机器算法验证 r 回归 诊断
2022-04-11 04:40:29

我使用由每个特征的个人选择的模型运行lm()我的数据,lm然后结合顶部R2基于p-价值。例如,取前几个特征,然后评估其余特征,如果它们有p<.005. 我的特征包含一些重复:例如,我在测试 P 中有一个特征及其标准化变体。我的p-值都非常小,但我的图表对于 R 和 T 看起来不正确。(请参阅此博客文章:在 R 中评估线性回归模型。)

在测试 P(和 T)中,根据 Cooks Distance 有一个异常值。如何找到并消除该实例?

根据this tutorial on Using R for Linear Regression

左上角的图显示了残差与拟合值的关系。残差应随机分布在水平线周围,表示残差为零;也就是说,点的分布不应该有明显的趋势。

测试 P 在残差中看起来不错,但测试 R 和 T 有一个分组这是什么意思,我该如何解释它?

左下角的图是一个标准的 QQ 图,应该表明残差是正态分布的。右上角的比例位置图显示了作为拟合值函数的标准化残差的平方根(某种相对误差的平方根)。同样,这个情节应该没有明显的趋势。

再次测试 P 在标准 QQ 图中看起来不错,但测试 R 和 T 有一个分组这是什么意思,我该如何解释它?

还有输出的系数是多少。我注意到它列出了特征和 ap 值,但我不明白它的含义。

最后,如何使用我创建的模型进行预测?

检验 P F 统计量:在 280 和 2221 DF 上为 2.684,p 值:< 2.2e-16 在此处输入图像描述

测试 R F 统计量:在 258 和 2243 DF 上为 3.691,p 值:< 2.2e-16 在此处输入图像描述

测试 T F 统计量:在 268 和 2233 DF 上为 4.029,p 值:< 2.2e-16 在此处输入图像描述

运行 gls 后编辑我的 p 看起来像这样

1个回答

这是一个冗长而杂乱无章的问题,因此您得到的答案又长又杂乱无章。道歉。使用?lm()通话中的示例,

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
summary(lm.D9)
#output#
Call:
lm(formula = weight ~ group)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.0710 -0.4938  0.0685  0.2462  1.3690 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.0320     0.2202  22.850 9.55e-15 ***
groupTrt     -0.3710     0.3114  -1.191    0.249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.6964 on 18 degrees of freedom
Multiple R-squared: 0.07308,    Adjusted R-squared: 0.02158 
F-statistic: 1.419 on 1 and 18 DF,  p-value: 0.249 

我不完全理解您对“系数”的困惑。该表仅显示了 OLS 估计β, 估计的标准误SE(β), 那个“距离”β从 0 开始(0,SE(β))分布,以及观察到的概率β离0还很远。请原谅我进行基本统计审查;我不知道这是否是你所要求的。

正确的 OLS 估计回归建模(这是 lm 命令运行的)需要几个假设,这些诊断图旨在测试它们。

“Residuals vs Fitted”和“Scale-Location”图表基本相同,显示残差是否有趋势。OLS 模型要求残差“相同且独立地分布”,即它们的分布不会因不同的x. 在这方面,您的图表都不是真正令人满意的。如果不满足此假设,您的β估计还是不错的,但是你的t-统计,以及相应的p-值,是垃圾。

另一个假设是误差大致呈正态分布,这是 QQ 图可以让您看到的。同样,在这方面,您的任何情节都没有真正让我满意。不满足此假设的后果与上述相同(β不错,t毫无价值)。

“异常值”原则实际上不是 OLS 回归的假设。但是,如果您在某些位置有异常值,您的β参数会受到它们的过度影响。在这种情况下,您的βt测量是没有用的。您可以通过识别其行号并发出命令从数据框中删除有影响的观察

data <- data[-offending.row,]

offending.row您要消除的行号在哪里。R 诊断图标记了潜在异常值的行数。

我不知道你有什么样的数据,但你应该非常小心地消除你不喜欢的观察结果。相反,您应该问自己,这种观察是如何变成这样的。如果是由于测量误差,请务必丢弃。如果不是,那么这种观察是否是您尝试建模的系统的一部分?如果是这样,您应该保留它并以其他方式适应它。

对于你的分析,我有两个建议。首先,尝试使用 GLS 估计器。此方法为您的观察分配权重,以纠正异方差、异常值和某种程度的非正态性。用于此的 R 命令是gls().

但从您的情节看来,您的数据在某些方面受到限制。特别是 Test-P 似乎是一个 1 或 0 或限制在该范围内的变量。对于这样的变量,您可能需要查看二进制 logit 或 probit 模型,可通过命令获得

glm(model, family=binomial(link="logit"))

如果您的数据被审查为 0 但不在高端,那么您想要一个 tobit 模型,tobit()从 AER 包看起来是正确的(我从未运行过 tobit 模型,我只是在理论上看过它)。

predict()最后,使用该函数进行预测。如果您想在之后扰乱您的数据(以创建可能预测的分布),我知道的最好方法是在预测中添加一个随机数。使用上面的例子,

#base prediction
pred.values <- predict(lm.D9)
# get standard error of residuals
SER <- (summary(lm.D9)$sigma)^2
#perturbations
pert <- rnorm(length(pred.values), mean=0, sd=SER)
SIMULATION.VALUES <- pred.values + pert

您可以通过重复最后两个步骤来获得多个替代模拟。祝你好运。