You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何GLM仅输出部分系数?分类变量各水平系数未显示求助

GLM分类变量各水平系数输出问题解决方案

问题描述

构建包含3个分类变量的二项式GLM时,使用summary()仅得到每个分类变量的单一系数,但期望输出各变量不同水平的系数。以下是相关代码、当前输出与期望输出:

拟合模型代码

binmodel2 <- glm(rate ~ age + sex + ID, family = binomial(), data = irlsuicide, weights = pop)
summary(binmodel2)

当前输出

Call:
glm(formula = rate ~ age + sex + ID, family = binomial(), data = irlsuicide, 
    weights = pop)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-6.6223  -1.1460   0.1466   1.5126   6.7728  

Coefficients:
            Estimate Std. Error  z value Pr(>|z|)    
(Intercept) -8.35037    0.05919 -141.088  < 2e-16 ***
age          0.20536    0.01363   15.067  < 2e-16 ***
sex          1.45107    0.04094   35.444  < 2e-16 ***
ID           0.01324    0.00449    2.949  0.00319 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2301.66  on 103  degrees of freedom
Residual deviance:  506.76  on 100  degrees of freedom
AIC: 1017.4

Number of Fisher Scoring iterations: 4

期望输出

Call:
glm(formula = rate ~ age + sex + ID, family = binomial(), data = irlsuicide, 
    weights = pop)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.3382  -0.7672  -0.0952   0.6748   3.3815  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -7.83022    0.08297 -94.371  < 2e-16 ***
age2         0.77568    0.04544  17.069  < 2e-16 ***
age3         0.72427    0.04057  17.851  < 2e-16 ***
age4         0.47303    0.04948   9.561  < 2e-16 ***
sex1         1.44189    0.04095  35.213  < 2e-16 ***
ID2         -0.38530    0.08584  -4.488 7.18e-06 ***
ID3         -0.43499    0.15794  -2.754 0.005884 ** 
ID4         -0.14573    0.14233  -1.024 0.305905    
ID5         -0.55167    0.18199  -3.031 0.002434 ** 
ID6         -0.69006    0.08349  -8.266  < 2e-16 ***
ID7         -0.29398    0.09268  -3.172 0.001513 ** 
ID8         -0.39606    0.10003  -3.959 7.52e-05 ***
ID9         -0.34822    0.09127  -3.815 0.000136 ***
ID10        -0.36341    0.09868  -3.683 0.000231 ***
ID11        -0.15210    0.08645  -1.759 0.078506 .  
ID12        -0.24432    0.08526  -2.866 0.004161 ** 
ID13        -0.29089    0.09057  -3.212 0.001320 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2301.66  on 103  degrees of freedom
Residual deviance:  163.24  on  87  degrees of freedom
AIC: 699.9

Number of Fisher Scoring iterations: 4

解决方案

核心原因是:你的age、sex、ID在数据集里是数值型变量,R默认将其当作连续变量处理,因此summary()只输出单个线性系数。要让R识别为分类变量,需将它们转为因子(factor)类型,有两种实现方式:

方式1:提前将变量转为因子

先修改数据集里的变量类型,再拟合模型:

# 将分类变量转换为因子类型
irlsuicide$age <- factor(irlsuicide$age)
irlsuicide$sex <- factor(irlsuicide$sex)
irlsuicide$ID <- factor(irlsuicide$ID)

# 重新拟合模型
binmodel2 <- glm(rate ~ age + sex + ID, family = binomial(), data = irlsuicide, weights = pop)
summary(binmodel2)

方式2:在模型公式中直接转换

无需修改原数据集,在拟合时直接指定变量类型:

# 拟合模型时将变量转为因子
binmodel2 <- glm(rate ~ factor(age) + factor(sex) + factor(ID), family = binomial(), data = irlsuicide, weights = pop)
summary(binmodel2)

转换后,R会自动以每个变量的第一个水平作为参考水平,输出其他所有水平相对于参考水平的系数,结果就会和你期望的一致。


内容的提问来源于stack exchange,提问作者Rebeca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:42:25