2017-11-24 11 views
0

この質問はherehereの前に尋ねられました。データセットに欠落データがありません。model.frameからmodel.matrixを作成しようとしています。再現可能な例を次に示します。model.frame.default(object、data、xlev = xlev)のエラー:可変長が異なる( 'z'のために見つかりました)

dat = data.frame(x = rep(1:3, each = 5), 
    y = rnorm(15), 
    z = rep(c(1,1.1,1.3), each = 5)) 
# this works 
mt = model.matrix(model.frame(lm(y ~ x,dat))) 
# this produces the error 
mt = model.matrix(model.frame(lm(y ~ x + z,dat))) 

なぜこの問題を解決するのですか?あるいは、インターセプト列を使用して右辺値の行列を別の、効果的かつ堅牢な方法で取得するにはどうすればよいですか?

+1

'mt = model.matrix(model.frame(lm(y〜x、dat)))'実​​行しないでください。 – cuttlefish44

+1

@ cuttlefish44が正しいです、あなたがそれを書いたように、そのコード行は実行されません。それは関数が期待する引数を調べるために 'help(" model.matrix ")'を見る必要があるからです。最初の引数として数式または用語オブジェクトが必要です。 'model.matrix(y〜x + z、model.frame(lm(y〜x + z、dat))')を試してください。 – duckmayr

+2

'model.matrix'にはデフォルトとlmメソッドがあります。最初に 'model.matrix(y〜x + z、dat)'と書くか、 '' lm'オブジェクトの関数として書く必要があるなら 'model.matrix(lm(y〜x + z、 dat)) ' –

答えて

1

問題は、model.matrix()は、最初の引数として数式またはタームオブジェクトが必要であるということです。ソリューション:

model.matrix(y ~ x + z, model.frame(lm(y ~ x + z, dat))) 
関連する問題