【问题标题】:Logistic regression from R returning values greater than one从 R 返回大于一的值的逻辑回归
【发布时间】:2019-11-13 06:00:42
【问题描述】:

我在 R 中使用 glm 进行了逻辑回归,以根据性别 (Gen)、吸烟状况 (Smoke1993)、高血压 (HT1993)、高胆固醇预测 1993 年的个人在 2004 年 (Arth2004) 患关节炎的可能性(HC1993) 和 1993 年的 BMI (BMI1993) 状态。我的样本量是 n=7896。所有变量都是二进制的,0 和 1 表示假和真,除了 BMI,它是连续数字。对于性别,男性=1,女性=0。

当我在 R 中运行回归时,我得到了很好的 p 值,但是当我实际使用回归进行预测时,对于非常标准的个体,我经常得到大于 1 的值。对于大代码块,我深表歉意,但我认为更多信息可能会有所帮助。

library(ResourceSelection)
library(MASS)
data=read.csv(file.choose())
data$Arth2004 = as.factor(data$Arth2004)
data$Gen = as.factor(data$Gen)
data$Smoke1993 = as.factor(data$Smoke1993)
data$HT1993 = as.factor(data$HT1993)
data$HC1993 = as.factor(data$HC1993)
data$BMI1993 = as.numeric(data$BMI1993)

logistic <- glm(Arth2004 ~ Gen + Smoke1993 + BMI1993 + HC1993 + HT1993, data=data, family="binomial")

summary(logistic)

hoslem.test(logistic$y, fitted(logistic))

confint(logistic)

min(data$BMI1993)
median(data$BMI1993)
max(data$BMI1993)

e=2.71828

输出如下:

Call:
glm(formula = Arth2004 ~ Gen + Smoke1993 + BMI1993 + HC1993 + 
    HT1993, family = "binomial", data = data)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0362  -1.0513  -0.7831   1.1844   1.8807  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -2.346104   0.158043 -14.845  < 2e-16 ***
Gen1        -0.748286   0.048398 -15.461  < 2e-16 ***
Smoke19931  -0.059342   0.064606  -0.919    0.358    
BMI1993      0.084056   0.006005  13.997  < 2e-16 ***
HC19931      0.388217   0.047820   8.118 4.72e-16 ***
HT19931      0.341375   0.058423   5.843 5.12e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 10890  on 7895  degrees of freedom
Residual deviance: 10309  on 7890  degrees of freedom
AIC: 10321

Number of Fisher Scoring iterations: 4

    Hosmer and Lemeshow goodness of fit (GOF) test

data:  logistic$y, fitted(logistic)
X-squared = 18.293, df = 8, p-value = 0.01913

Waiting for profiling to be done...
                  2.5 %      97.5 %
(Intercept) -2.65715966 -2.03756775
Gen1        -0.84336906 -0.65364134
Smoke19931  -0.18619647  0.06709748
BMI1993      0.07233866  0.09588198
HC19931      0.29454661  0.48200673
HT19931      0.22690608  0.45595006

[1] 18
[1] 26
[1] 43

一位不吸烟的女性,BMI 中值 (26)、高血压和高胆固醇会产生以下结果:

e^(26*0.084056+1*0.388217+1*0.341375-0*0.748286-0*0.059342-2.346104)

[1] 1.7664

考虑到 BMI 是唯一的数字变量,我认为这个问题在某种程度上与 BMI 有关。有谁知道为什么这个回归产生大于 1 的概率?

【问题讨论】:

  • e^x 不是逻辑回归中转换的正确逆。转换是使用logit 函数,它的逆函数是expit 函数,应该是e^x/(1+e^x)。这似乎是一个统计上的误解,而不是一个编程问题。此外,使用 predict() 函数中的构建来计算新值通常比在 R 中像这样手动完成要容易得多。
  • 谢谢!这样就可以解释了。

标签: r regression logistic-regression glm


【解决方案1】:

默认情况下,family = "binomial" 使用logit 链接功能(请参阅?family)。所以你要找的概率是1.7664 / (1+1.7664)

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 2021-01-13
    • 2019-04-24
    • 2018-02-12
    • 2014-06-20
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多