GLM中计算的截距如何拟合?

Wok*_*Wok 2 r formula intercept

我一直在阅读R使用的代码以适应广义线性模型(GLM),因为R的源代码是免费的.使用的算法称为迭代重加权最小二乘(IRLS),这是一个相当文档化的算法.对于每次迭代,都会调用Fortran函数来解决加权最小二乘问题.

从最终用户的角度来看,对于逻辑回归,例如,R中的调用看起来像这样:

y <- rbinom(100, 1, 0.5)
x <- rnorm(100)
glm(y~x, family=binomial)$coefficients
Run Code Online (Sandbox Code Playgroud)

如果您不想使用拦截,这些调用中的任何一个都可以:

glm(y~x-1, family=binomial)$coefficients
glm(y~x+0, family=binomial)$coefficients
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解公式,即y~x或是如何y~x-1在代码中有意义并且被理解为是否使用截距.我正在寻找代码的一部分,其中一列将绑定x,但似乎没有.

谢谢.

PS:据我所知,所调用函数中出现的布尔截距glm.fit与我所指的截距不同.偏移也是一样的.

有关文档glmglm.fit在这里.

Dir*_*tel 6

你可能看错了地方.通常,model.matrix()在拟合函数中首先调用:

> D <- data.frame(x1=1:4, x2=4:1)
> model.matrix(~ x1 + x2, D)
  (Intercept) x1 x2
1           1  1  4
2           1  2  3
3           1  3  2
4           1  4  1
attr(,"assign")
[1] 0 1 2
> model.matrix(~ x1 + x2 -1 , D)
  x1 x2
1  1  4
2  2  3
3  3  2
4  4  1
attr(,"assign")
[1] 1 2
> 
Run Code Online (Sandbox Code Playgroud)

它的输出model.matrix()传递给Fortran.这是lm()和其他模型装配工的情况.

因为glm(),它是不同的,只model.frame()调用添加拦截列.为什么会这样与广义线性模型和标准线性模型之间的差异有关,超出了这篇文章的范围.