繁体   English   中英

R Logistic回归与相关

[英]R Logistic regression and correlation

我在理解R中这种逻辑回归的输出时遇到了麻烦。

数据

dat <- data.frame(
  var1 = c(2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 
    1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 
    2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 
    2, 1, 2, 2, 2, 2, 2, 1),
  outcome = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 
    0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 
    1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 
    1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 
    1, 0, 1, 1, 1, 0, 1, 0),
  var2 = c(70, 86, 80, 88, 74, 75, 76, 82, 79, 80, 80, 79, 81, 79, 77, 
    75, 77, 75, 70, 65, 67, 86, 87, 70, 81, 66, 76, 62, 62, 73, 65, 
    66, 65, 85, 82, 76, 64, 68, 66, 83, 69, 73, 82, 65, 86, 74, 62, 
    68, 64, 81, 72, 74, 63, 63, 76, 79, 82, 73, 78, 70, 68, 72, 72, 
    60, 73, 73, 74, 86, 77, 81, 63, 79, 74, 76, 83, 85, 61, 83, 73, 
    71, 72, 59, 77, 73, 67, 80, 84, 77, 79, 73, 86, 75, 79, 78, 82, 
    80, 78, 58, 82, 74, 77, 78, 67, 68, 82, 72, 65, 85, 83, 69, 73, 
    78),
  stringsAsFactors = FALSE)

回归:

fit <- glm(outcome ~  var1 + var2 , 
           data = dat, family = "binomial")
summary(fit)
Call:
glm(formula = outcome ~ var1 + var2, family = "binomial", data = dat)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-2.61347  -0.00006   0.31030   0.41875   0.74162  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)  -47.79642 3650.08385  -0.013    0.990
var1          22.03545 1825.04048   0.012    0.990
var2           0.08264    0.05621   1.470    0.142

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 145.993  on 111  degrees of freedom
Residual deviance:  45.062  on 109  degrees of freedom
AIC: 51.062

Number of Fisher Scoring iterations: 18

从结果来看,var1具有非常高的p值,所以我的理解是,在预测“结果”方面的贡献很差。 但是,当我查看2之间的相关性时,它们是高度相关的。 反之亦然,var2的p值较低,但与“结果”的相关性不高

谁能解释,为什么? 这可能微不足道,但是我找不到答案。

cor(dat)
             var1   outcome      var2
var1    1.0000000 0.8671209 0.1029565
outcome 0.8671209 1.0000000 0.1587125
var2    0.1029565 0.1587125 1.0000000

如果您控制服务器,我建议创建一个Windows服务 - 完全从ASP.NET外部执行数据转换任务; 你不希望ASP.NET在40分钟的转换例程中途重启。

首先, 您的模型没有任何问题。 您没有告诉我们有关数据性质(似乎是为了演示而发明的)或模型目的的任何信息,因此在谈论“改进”模型时我没有任何意义。 听起来您将从更好地了解相关的预测变量如何影响回归模型中受益。

让我们从一个插图开始,让您对发生的事情有更好的感觉:考虑一种情况,您试图确定T恤颜色{红色,蓝色}和头发颜色{金发,深色}对体重的影响{0-100}。

首先,您观察到体重为50磅的红衫金发人,然后是体重为100磅的蓝衫黑发人。 请注意,在此示例中,头发的颜色和衬衫的颜色似乎完美相关。

仅根据数据 ,您将无法确定一件蓝色衬衫的增重效果是+50磅,还是黑发的增重效果是+50磅。 就模型而言, 衬衫颜色的效果可能没有效果(如果头发颜色是“原因”),或者+50(如果头发颜色没有真实效果)是完全负责的。

请注意,这个示例确实过分简化了 ,但是希望其本质是清楚的-当两个变量相关时, 很难分辨两个变量中哪个变量具有真正的效果 在模型中,这意味着方差增加-或两个变量的置信区间变大。

先前的两个答案都指出,仅使用Var1拟合模型会导致该模型得出结论,即Var1结果产生重大影响。 但是,在完整模型中,您添加了第二个协变量Var2 ,该变量与Var1高度相关,结果模型很难判断两个变量中的哪个变量(如果有的话)对结果有重大影响。

需要指出的一件事是, 较大的模型(即使用var1var2 )似乎比仅使用var1的模型更好地解释了结果。 请注意,较大模型(51.062)的AIC优于@Bernhard(55.045)拟合的较小模型。 这通常是正确的,因为将相关的预测变量添加到模型中并不一定会导致模型“较差”。 相反,它仅表示参数估计值将更难解释(即,当估计的效果与另一个变量高度相关时,您是否可以将估计的效果真正归因于相关变量?)

简而言之:您没有做错任何事; 您已经简单地证明了多重共线性会导致参数估计值的方差增加。 我要提醒您,您对p值的解释(“对预测“结果”的贡献不大”)是有问题的,并且可能是导致此结果令人困惑的原因之一。

有很多选项,基本上归结为你需要任何可以与之沟通的过程。 我能想到的选择是: 在另一个应用程序池下运行的Web服务; 一个Windows服务; 由ASP.NET代码启动的命令行进程。

接下来的问题是如何与其他流程进行通信。 如果您正在使用数据库,则可以设置两个进程都可以访问的公用表。 该网站将把工作请求放入第二个流程将监控的表中。 然后可以将第二个表用于结果,网站将监视该结果。 另一种选择是使用Windows Communication Foundation(WCF)或.NET远程处理等方法在进程之间发送事件。

首先,仅说明事实。 该模型在过度拟合的意义上是不好的,实际上没有一个预测指标是好的(重要的)。

关联仅反映两个对象之间的线性关联量,并不一定转化为以下事实:当关联变量与输出关联时,它将有助于将变量包括在逻辑回归中。

如果绘制“ var1”与“结果”以及“ var2”与“结果”的关系图,则可以看到在var2与结果的情况下没有线性关联,并且在“ var1”与“结果”的情况下存在一些“虚假”相关性。

假设您正在预测二进制数据,那么您的模型将使用“ var1”作为最差参数中的最佳值以进行过度拟合并给出最低的误差。

考虑改善模型。

这不是一个完整的答案,但可能会提供一些有助于您找到答案的见识。

查看您的数据, var1应该很容易解释outcome ,主要是var1自己:

plot(outcome ~ jitter(var1), data=dat)

在此处输入图片说明

但是,只要var1只有12值, glm不会得出“显着”的结果。 这以某种方式导致巨大的标准错误。 正如您在上图中所做的那样,在var1添加一点抖动后,标准误差急剧下降,所有结果都非常显着

> summary(glm(outcome ~ jitter(var1), data=dat, family=binomial))

Call:
glm(formula = outcome ~ jitter(var1), family = binomial, data = dat)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.7033  -0.1286   0.2903   0.4610   0.7332  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)   -11.405      2.988  -3.818 0.000135 ***
jitter(var1)    6.982      1.586   4.402 1.07e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 145.993  on 111  degrees of freedom
Residual deviance:  51.045  on 110  degrees of freedom
AIC: 55.045

Number of Fisher Scoring iterations: 7

添加抖动会使残留偏差从47.29增加到51.0因此模型不是更好,只是标准误差较小。

对于为什么“完美”的var1会导致这些巨大的标准错误,我没有定论的答案,但是显然,这是这里问题的一个非常明显的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM