关于R语言中Logistic Regression Model对象rank属性内部计算逻辑的问询
解读R语言glm模型的
rank属性 你用fit = glm(vs ~ hp + mpg, mtcars, family = "binomial")构建了逻辑回归模型,提取rank得到3,想搞清楚它的计算逻辑,还有是不是等于自变量数量加1——这就来给你拆解明白:
核心计算逻辑
rank本质上是模型设计矩阵的秩,也就是设计矩阵里线性无关的列的总数。在R的线性模型(包括glm这类广义线性模型)中,这个值代表的是模型实际参与拟合的独立参数的个数。
你的模型实例分析
你的模型公式是vs ~ hp + mpg:
- R里的公式默认会自动加入截距项(也就是常数项),所以对应的设计矩阵会有3列:全1的截距列、
hp的列、mpg的列。 - 在
mtcars数据集里,这三列是线性无关的,所以设计矩阵的秩就是3,和你得到的rank(fit)结果完全匹配。
关于“自变量数量加1”的验证
大多数正常场景下(自变量无完全共线性、模型包含截距项),rank确实等于自变量个数 + 1(加的1就是截距项)。但有两种特殊情况会打破这个规律:
- 存在完全共线性:如果自变量之间是严格线性相关的(比如一个变量是另一个的2倍),R会自动剔除共线性的变量,这时候设计矩阵的秩就会小于自变量个数+1。比如你建个模型
fit2 = glm(vs ~ hp + I(hp*2), mtcars, family = "binomial"),这里I(hp*2)和hp完全共线,rank(fit2)就会是2(截距项 + 独立的hp项),而不是3。 - 去掉截距项:如果你的公式明确去掉截距(比如写成
vs ~ hp + mpg - 1),那rank就等于自变量的数量,这时候就没有加1的情况了。
内容的提问来源于stack exchange,提问作者Ash Reddy
相关产品推荐
相关产品推荐

