2

Rのソースコードは自由に入手できるため、R が一般化線形モデル(GLM)に適合させるために使用するコードを読んでいます。使用されるアルゴリズムは反復再重み付け最小二乗法(IRLS) と呼ばれ、かなり文書化されたアルゴリズムです。反復ごとに、重み付き最小二乗問題を解くために Fortran 関数が呼び出されます。

エンド ユーザーの観点からは、たとえばロジスティック回帰の場合、R での呼び出しは次のようになります。

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

また、 interceptを使用したくない場合は、次の呼び出しのどちらでもかまいません。

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

ただし、、つまりy~xまたはy~x-1がコード内でどのように意味をなしており、切片を使用するかどうかについて理解されているかを理解することはできません。1 の列が にバインドされるコードの一部を探していましたが、x何もないようです。

私が読んだ限りでは、呼び出された関数に現れるブール値の切片は、glm.fit私が参照している切片と同じではありません。オフセットについても同様です。

glmとに関するドキュメントglm.fitこちらにあります。

4

1 に答える 1

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
> 

その出力がmodel.matrix()Fortran に渡されます。これは、lm()および他のモデルフィッターの場合です。

の場合glm()は異なり、切片列を追加しないmodel.frame()のみが呼び出されます。なぜそうなのかは、一般化線形モデルと標準線形モデルの違いに関係しており、この投稿の範囲を超えています。

于 2010-06-25T16:29:22.673 に答える