2017-05-24 3 views
0

私は時々model.matrixの使用について混乱します。私はそれがデザインマトリックス(https://en.wikipedia.org/wiki/Design_matrix)を作ることを意図していることを理解していますが、単に列をglmに直接渡すことに固執しないでください。model.matrixを使用してデザインを作成する理由

私は少し違いを見つけることを試みるための例を作りましたが、どちらも同等のようです。誰でも説明できますか?

ありがとうございます!

## Data prep 
require(data.table) 
require(ggplot2) 

set.seed(200) 
s = 204 
dt = data.table(x1=seq(1,s), 
      x2=c(-3,0,3,9), 
      switch = c("Low","Zero","High","VHigh"), 
      e = rnorm(s,mean =0, sd=5)) 

dt[, y_real := x1^2+x2*e] 


# Regression without explicit design matrix 
r = lm(y_real~I(x1^2)+switch,data=dt) 
summary(r) 
dt[, y_fitted := r$fitted.values] 

# Regression with explicit design matrix 
mod = model.matrix(~I(x1^2)+switch+0, data=dt) 
r2 = lm(dt$y_real~mod) 
summary(r2) 
dt[, y_model := r2$fitted.values] 

identical(dt$y_fitted, dt$y_model) # => FALSE, but errors ~ 1e-14 

ggplot(dt[1:20])+ 
aes(x=x1)+ 
geom_line(aes(y = y_real, colour = "Y real"))+ 
geom_point(aes(y = y_fitted, colour = "Y fitted"))+ 
geom_line(aes(y = y_model, colour = "Y model")) 
# => perfectly aligned 
+5

カテゴリ変数がある場合はどうなりますか?変数に変換するとどうなりますか?インタラクションがある場合はどうなりますか?スプラインをフィッティングして後で予測するとどうなりますか? –

答えて

1

このように使用している場合、それらは互いに同等です。回帰式とデータから、model.matrixを取得することができます。また、model.matrixの各列は、元の変数の元の変数を式に応じて変換したものに過ぎず、回帰パラメータを取得するために必要なものです。

私の考え方から、model.matrixは、式の世界(統計モデルを記述するために使用する)と、glmやlmなどの統計的方法が実際に頼っている数値的方法との架け橋に過ぎないと思います。ユーザーポイントからは、数式があり、データがあることだけを知る必要があります。次に、lmまたはglmを使用して必要な結果を得ることができます。これは本当に簡単で、気にする必要はありませんmodel.matrix。実際の実装の観点から、式とデータからmodel.matrixを取得し、数値的な方法を使用して結果を得ます。

ほとんどのユーザーはmodel.matrixを気にする必要はありませんが、一部のユーザーは気になることがあります。たぶん、彼らはデザインマトリックスの分析をしたいのでしょうか?多分数式クラスを拡張し、新しい "formula"クラスがmodel.matrixを生成し、glmやlmで直接使用できるようにしたいのですか?あるいは、彼らは行列(model.matrix)上にいくつかの新しい回帰方法を開発し、一般ユーザーに魅力的なformulaとdata.frameで回帰方法を使いやすくすることができますか?

私の個人的見解では、model.matrixは、研究者や開発者の生活を簡単にする潜在的に有用な抽象化です。それが役に立てば幸い。

関連する問題