2017-02-28 9 views
1

model.matrix関数を使用して作成しました。model.matrixの順序付けられた要素の列名はR

注文した因子デー​​タを使用すると、カラム名に接尾辞としてLQCが付きます。 これらの接尾辞は何を意味し、どのように因子レベルにマッピングされますか?この質問ではmodel.matrixのヘルプファイルが不明です。

head(model.matrix(as.formula(~ ps), 
        model.frame(as.formula(~ ps), 
           data.frame(ps = factor(x = sample(x = c('none', '3XLT', '41X', '3X'), 
                    size = 50, 
                    replace = TRUE), 
                 levels = c('3X', '3XLT', '41X', 'none'), 
                 ordered = TRUE))))) 

# (Intercept)  ps.L ps.Q  ps.C 
# 1   1 -0.2236068 -0.5 0.6708204 
# 2   1 0.6708204 0.5 0.2236068 
# 3   1 0.6708204 0.5 0.2236068 
# 4   1 0.2236068 -0.5 -0.6708204 
# 5   1 0.6708204 0.5 0.2236068 
# 6   1 -0.2236068 -0.5 0.6708204 

私は順序付けられていない要素を使用すると、その列名による列のマッピングを簡単にトレースできます。

head(model.matrix(as.formula(~ ps), 
        model.frame(as.formula(~ ps), 
           data.frame(ps = factor(x = sample(x = c('none', '3XLT', '41X', '3X'), 
                    size = 50, 
                    replace = TRUE), 
                 levels = c('3X', '3XLT', '41X', 'none')))))) 

# (Intercept) ps3XLT ps41X psnone 
# 1   1  0  0  1 
# 2   1  1  0  0 
# 3   1  0  0  1 
# 4   1  1  0  0 
# 5   1  0  0  0 
# 6   1  1  0  0 

答えて

0

私はまだこれらの接尾辞の意味は分かりません。おそらくそれに付随する歴史的な理由があります。

model.matrixのデバッグ後、内部にC_modelmatrixが呼び出されました。注文した要因contrasts.polyについては

.External2(C_modelmatrix, t, data) 

このコール内で定義されたmake.poly機能を使用してデザイン行列を取得するために使用されます。デザイン行列を取得した後、列名が変更され、列2 - 4の奇妙な接尾辞が与えられます。最初の列は無視され、4つ以上の列がある場合、それらは、 make.poly機能。要約する

contr <- make.poly(n, scores) 
if (contrasts) { 
    dn <- colnames(contr) 
    dn[2:min(4, n)] <- c(".L", ".Q", ".C")[1:min(3, n - 1)] 
    colnames(contr) <- dn 
    contr[, -1, drop = FALSE] 
} 

これらのサフィックスは何も意味しないが、それらは4よりも大きい長さを有する因子レベル2から4に順序付けられた係数のレベルにマッピングされ、何の名前変更が適用されません。以下の例を参照してください。

head(model.matrix(as.formula(~ ps), 
        model.frame(as.formula(~ ps), 
           data.frame(ps = factor(x = sample(x = c('none', '3XLT', '2X', '41X', '3X'), 
                    size = 50, 
                    replace = TRUE), 
                 levels = c('3X', '3XLT', '2X', '41X', 'none'), 
                 ordered = TRUE))))) 

# (Intercept)  ps.L  ps.Q   ps.C  ps^4 
# 1   1 0.0000000 -0.5345225 -4.095972e-16 0.7171372 
# 2   1 0.0000000 -0.5345225 -4.095972e-16 0.7171372 
# 3   1 0.3162278 -0.2672612 -6.324555e-01 -0.4780914 
# 4   1 -0.6324555 0.5345225 -3.162278e-01 0.1195229 
# 5   1 0.3162278 -0.2672612 -6.324555e-01 -0.4780914 
# 6   1 -0.6324555 0.5345225 -3.162278e-01 0.1195229 

contr

contr <- make.poly(n, scores) 
Browse[6]> contr 
#    ^0   ^1   ^2   ^3   ^4 
# [1,] 0.4472136 -0.6324555 0.5345225 -3.162278e-01 0.1195229 
# [2,] 0.4472136 -0.3162278 -0.2672612 6.324555e-01 -0.4780914 
# [3,] 0.4472136 0.0000000 -0.5345225 -4.095972e-16 0.7171372 
# [4,] 0.4472136 0.3162278 -0.2672612 -6.324555e-01 -0.4780914 
# [5,] 0.4472136 0.6324555 0.5345225 3.162278e-01 0.1195229 

EDITの出力: Lための拡張、Qは、順序付けられた係数のコントラスト行列におけるCは、線形、二次、および三次の用語に相当します。多項式項のさらなる次数(3より大きい)の命名は、その多項式項の次数の数値によって示される。

関連する問題