10

R で を使用する場合、 への呼び出し内lm()に設定すると、要約テーブルに推定できない係数の NA があります (この場合はセルが欠落しているため)。na.action = na.passlm()

summary(myModel)$coefficientsただし、またはを使用して集計オブジェクトから係数のみを抽出するとcoef(summary(myModel))、NA は省略されます。

要約を印刷するときに含まれるのと同じ方法で係数を抽出するときに、NA を含めたいと思います。これを行う方法はありますか?

設定options(na.action = na.pass)は役に立たないようです。

次に例を示します。

> set.seed(534)
> myGroup1 <- factor(c("a","a","a","a","b","b"))
> myGroup2 <- factor(c("first","second","first","second","first","first"))
> myDepVar <- rnorm(6, 0, 1)
> myModel <- lm(myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2)
> summary(myModel)

Call:
lm(formula = myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2)

Residuals:
       1        2        3        4        5        6 
-0.05813  0.55323  0.05813 -0.55323 -0.12192  0.12192 

Coefficients: (1 not defined because of singularities)
                    Estimate Std. Error t value Pr(>|t|)
(Intercept)         -0.15150    0.23249  -0.652    0.561
myGroup11            0.03927    0.23249   0.169    0.877
myGroup21           -0.37273    0.23249  -1.603    0.207
myGroup11:myGroup21       NA         NA      NA       NA

Residual standard error: 0.465 on 3 degrees of freedom
Multiple R-squared: 0.5605,     Adjusted R-squared: 0.2675 
F-statistic: 1.913 on 2 and 3 DF,  p-value: 0.2914 

> coef(summary(myModel))
               Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -0.15149826  0.2324894 -0.6516352 0.5611052
myGroup11    0.03926774  0.2324894  0.1689012 0.8766203
myGroup21   -0.37273117  0.2324894 -1.6032180 0.2072173

> summary(myModel)$coefficients
               Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -0.15149826  0.2324894 -0.6516352 0.5611052
myGroup11    0.03926774  0.2324894  0.1689012 0.8766203
myGroup21   -0.37273117  0.2324894 -1.6032180 0.2072173
4

3 に答える 3

3

近似モデルから係数を抽出してみませんか。

> coef(myModel)
             (Intercept)                myGroup1b 
             -0.48496169              -0.07853547 
          myGroup2second myGroup1b:myGroup2second 
              0.74546233                       NA

それが最も簡単なオプションのようです。

na.actionこれとは何の関係もありません。あなたはあなたの例に合格しなかったことに注意してna.action = na.passください。

na.actionモデルフィットに渡されるデータNAを処理するためのグローバルオプションであり、通常は数式と組み合わせて使用​​します。関数の名前でもあります。Rは、式で表現されたモデルの引数と記号表現から、いわゆるモデルフレームを構築します。この時点で、anyが検出され、のデフォルトオプションは、任意の変数のサンプルをドロップすることにより、データからを削除するために使用することです。代替案がありますが、最も便利なのは、フィッティング中に削除しますが、フィッティング値、残差などの正しい場所に追加し直すことです。詳細については、さらに詳しく読んでください。na.action()dataNAna.actionna.omit()NANAna.exclude()NANA?na.omit?na.action?options

于 2012-06-07T15:24:59.050 に答える
1

summary.lm のドキュメントには、「エイリアス係数は戻りオブジェクトでは省略されていますが、printメソッドによって復元されています」と書かれています。この省略を制御するパラメータはないようです。@Gavin Simpson によって提案されているように、 coef(summary(myModel)) を使用する以外に別の回避策があります。マトリックスを作成できます

nr <- num_regressors - nrow(summary(myModel)$coefficients) ##num_regressors shall be defined previously
nc <- 4
rnames <- names(which(summary(myModel)$aliased))
cnames <- colnames(summary(myModel)$coefficients)
mat_na <- matrix(data = NA,nrow = nr,ncol = nc,
           dimnames = list(rnames,cnames))

次に、2 つの行列を rbind します。

mat_coef <- rbind(summary(myModel)$coefficients,mat_na)
于 2017-01-12T10:21:08.730 に答える
-1

サマリー フィット テーブルをデータ フレームに変換することもできます (NA である変数は失われます)。

fit <- as.data.frame(summary(fit)$coefficients)

そして、係数を名前で抽出します。

fit["age", "Pr(>|z|)"]

「年齢」が削除された場合、データフレームから年齢の P 値を抽出しようとすると NA が得られます

于 2018-07-04T11:53:28.837 に答える