2010-06-25 3 views
2

일반화 된 선형 모델 (GLM)에 맞게 R에서 사용하는 code을 읽었습니다. R의 소스 코드는 무료로 사용할 수 있기 때문에. 사용 된 알고리즘은 으로 반복적으로 재구성 된 최소 자승법 (IRLS)이라고하며, 이는 문서화 된 알고리즘입니다. 매 반복마다 가중치가 최소 제곱 문제를 해결하기 위해 Fortran 함수를 호출합니다.GLM에서 계산 된 절편은 어떻게 적합합니까?

y <- rbinom(100, 1, 0.5) 
x <- rnorm(100) 
glm(y~x, family=binomial)$coefficients 

을 그리고 당신이 원하지 않는 경우 차단,이 중 하나를 사용하려면 최종 사용자의 관점에서

은 인스턴스에 대한 로지스틱 회귀 분석을 위해, R의 호출은 다음과 같습니다 호출 괜찮 그러나

glm(y~x-1, family=binomial)$coefficients 
glm(y~x+0, family=binomial)$coefficients 

, 나는 공식, 즉 y~x 또는 y~x-1은 코드에서 의미를 만드는 방법을 이해하는 관리 할 수 ​​없습니다 절편을 사용할지 말지를 사용할지 여부에 대해 이해합니다. 나는 하나의 열이 x에 바인딩 될 코드의 일부를 찾고 있었지만 아무 것도없는 것 같습니다.

감사합니다.

추신 : 내가 읽은 한, glm.fit이라는 함수에 나타나는 부울 절편은 내가 언급 한 절편과 동일하지 않습니다. 그리고 오프셋은입니다.

glmglm.fit에 대한 설명서는 here입니다.

답변

6

아마도 당신은 틀린 장소에서보고있을 것입니다.

> 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 
> 

을 그리고 포트란 아래로 전달되는 model.matrix()의 출력 : 일반적으로, model.matrix()은 피팅 함수의 첫 번째라고합니다. lm() 및 기타 모델 피터의 경우입니다.

glm()의 경우 model.frame()이 호출되어 이 아닌 경우은 절편을 추가합니다. 그 이유는 일반화 된 선형 모델과 표준 선형 모델의 차이점과이 게시의 범위를 벗어나는 이유입니다.

+0

이 답변의 마지막 단락이 실제로 맞습니까? 'glm.fit'은'lm.fit'에서와 똑같은 모델 행렬'x'를 취합니다 ... –

+0

내가 대답한지 몇 년이 지났지 만 코드에서 그 점을 생각해 보았습니다. 나는 그것의 어떤 양상에 당연히 틀릴 수 있었다 ... –