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

R语言str()与head()输出不一致的疑问及逻辑回归影响咨询

问题

数据集birth.csv是1986年美国斯普林菲尔德贝斯州医学中心收集的,使用read.csv()并指定colClasses导入该CSV文件后,出现str()函数输出与head()函数输出不匹配的情况:例如low列的前6个值在head()中显示为0,但str()的输出里该列对应的数值是1。相关输出如下:

str()输出

'data.frame':   189 obs. of  9 variables:
 $ low  : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...  # 这里为什么不是0 0 0 0...?
 $ age  : num  19 33 20 21 18 21 22 17 29 26 ...
 $ lwt  : num  182 155 105 108 107 124 118 103 123 113 ...
 $ race : Factor w/ 3 levels "1","2","3": 2 3 1 1 1 3 1 3 1 1 ...
 $ smoke: Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 1 2 2 ...
 $ ptl  : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
 $ ht   : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
 $ ui   : Factor w/ 2 levels "0","1": 2 1 1 2 2 1 1 1 1 1 ...
 $ ftv  : Factor w/ 3 levels "0","1","2": 1 3 2 3 1 1 2 2 2 1 ...

head()输出

A data.frame: 6 × 9
    low age lwt race smoke  ptl ht  ui  ftv
    <fct><dbl><dbl><fct><fct><fct><fct><fct><fct>
1   0   19  182 2    0      0   0   1   0
2   0   33  155 3    0      0   0   0   2
3   0   20  105 1    1      0   0   0   1
4   0   21  108 1    1      0   0   1   2
5   0   18  107 1    1      0   0   1   0
6   0   21  124 3    0      0   0   0   0

请问这是什么原因?若基于该导入数据集构建逻辑回归模型,结果是否会出错?


原因分析

这是R语言中因子(Factor)类型的特性导致的:

  • 因子在内部是以整数形式存储的,str()输出里的数字(比如low列的1)是该因子对应的整数编码,而非实际显示的标签值。
  • 因子的整数编码由标签的排序结果分配:以low列为例,因子的两个水平是"0"和"1",排序后"0"作为第一个水平,对应整数1;"1"作为第二个水平,对应整数2。因此head()里显示的0,在str()中会以整数1的形式体现。
  • 类似的,ui列head()第一行显示1,对应str()里的2,是因为"1"是该因子的第二个水平,对应整数编码2。

对逻辑回归模型的影响

不会导致模型结果出错:

  • R在拟合逻辑回归(比如使用glm()函数并指定family = binomial)时,会自动识别因子的标签与编码的对应关系,模型计算基于因子的实际含义(标签值)进行,而非直接使用内部整数编码。
  • 唯一需要注意的是,二分类因子的参考水平默认是排序后的第一个水平(此处low列的参考水平为"0"),若需调整参考水平,可通过relevel()函数修改;即使不修改,也仅会改变模型系数的解释方向,不会影响模型的预测能力与整体有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:40