2016-11-28 4 views
2
library(lmPerm) 
x <- lmp(formula = a ~ b * c + d + e, data = df, perm = "Prob") 

summary(x) # truncated output, I can see `NA` rows here! 

#Coefficients: (1 not defined because of singularities) 
#     Estimate Iter Pr(Prob) 
#b     5.874 51 1.000 
#c    -30.060 281 0.263 
#b:c     NA NA  NA 
#d1    -31.333 60 0.633 
#d2    33.297 165 0.382 
#d3    -19.096 51 1.000 
#e     1.976 NA  NA 

私はすべてのためにPr(Prob)結果を引き出したいのですが、係数表にランクが不足しているフィッティングのNA行がありません。それらを挿入するには?これは私が欲しいものではありません

y <- summary(x)$coef[, "Pr(Prob)"] 

#(Intercept)   b   c   d1   d2 
# 0.09459459 1.00000000 0.26334520 0.63333333 0.38181818 
#   d3   e 
# 1.00000000   NA 

。正しい位置にb:c行も必要です。

Iは次のようになり、上から希望の出力の例:

# (Intercept)   b   c b:c   d1   d2 
# 0.09459459 1.00000000 0.26334520  NA 0.63333333 0.38181818 
#   d3   e 
# 1.00000000   NA 

Iは、各変数に対応Iterカラムを引き出したいです。ありがとう。

答えて

3

lmplmsummary.lmpに基づいてもsummary.lmのように振る舞うので、私は最初に私たちはlmpために同じことを行うことができることを示し、その後、説明のためにlmを使用します。


lmsummary.lm

?summary.lmの読み取りを持っており、以下の返された値に注意:

coefficients: a p x 4 matrix with columns for the estimated 
       coefficient, its standard error, t-statistic and 
       corresponding (two-sided) p-value. Aliased coefficients are 
       omitted. 

    aliased: named logical vector showing if the original coefficients are 
       aliased. 

あなたがランク欠損モデルを持っている場合は、NA係数は省略しています係数テーブルと呼ばれ、変数はaliasedと呼ばれます。あなたは、テーブル/行列を係数にパッドNA行にしたい場合は、我々は

## an augmented matrix of `NA` 
e <- matrix(nrow = length(d), ncol = ncol(b), 
      dimnames = list(names(d), dimnames(b)[[2]])) 
## fill rows for non-aliased variables 
e[!d] <- b 

#    Estimate Std. Error t value Pr(>|t|) 
#(Intercept) 0.1295147 0.3142758 0.4121051 0.6910837 
#xx   0.2706560 0.2669118 1.0140279 0.3402525 
#zz     NA   NA  NA  NA 

lmpsummary.lmp

を行うことができ、

set.seed(0) 
zz <- xx <- rnorm(10) 
yy <- rnorm(10) 
fit <- lm(yy ~ xx + zz) 

coef(fit) ## we can see `NA` here 
#(Intercept)   xx   zz 
# 0.1295147 0.2706560   NA 

a <- summary(fit) ## it is also printed to screen 
#Coefficients: (1 not defined because of singularities) 
#   Estimate Std. Error t value Pr(>|t|) 
#(Intercept) 0.1295  0.3143 0.412 0.691 
#xx   0.2707  0.2669 1.014 0.340 
#zz    NA   NA  NA  NA 

b <- coef(a) ## but no `NA` returned in the matrix/table 
#    Estimate Std. Error t value Pr(>|t|) 
#(Intercept) 0.1295147 0.3142758 0.4121051 0.6910837 
#xx   0.2706560 0.2669118 1.0140279 0.3402525 

d <- a$aliased 
#(Intercept)   xx   zz 
#  FALSE  FALSE  TRUE 

:以下の小型、再現性の例を考えてみましょう何も変更する必要はありません。

library(lmPerm) 
fit <- lmp(yy ~ xx + zz, perm = "Prob") 
a <- summary(fit) ## `summary.lmp` 
b <- coef(a) 

#    Estimate Iter Pr(Prob) 
#(Intercept) -0.0264354 241 0.2946058 
#xx   0.2706560 241 0.2946058 

d <- a$aliased 
#(Intercept)   xx   zz 
#  FALSE  FALSE  TRUE 

e <- matrix(nrow = length(d), ncol = ncol(b), 
      dimnames = list(names(d), dimnames(b)[[2]])) 
e[!d] <- b 

#    Estimate Iter Pr(Prob) 
#(Intercept) -0.0264354 241 0.2946058 
#xx   0.2706560 241 0.2946058 
#zz     NA NA  NA 

あなたの場合、IterPr(Prob)を抽出するには、ちょうど

e[, 2] ## e[, "Iter"] 
#(Intercept)   xx   zz 
#  241   241   NA 

e[, 3] ## e[, "Pr(Prob)"] 
#(Intercept)   xx   zz 
# 0.2946058 0.2946058   NA 
+0

完璧なソリューションを行います。どうもありがとう。 – Gotmadstacks

関連する問題