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与我所指的截距不同.偏移也是一样的.
有关文档glm和glm.fit是在这里.
你可能看错了地方.通常,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()调用不添加拦截列.为什么会这样与广义线性模型和标准线性模型之间的差异有关,超出了这篇文章的范围.