15

次のように、2 つの一般化線形モデルを作成しました。

glm1 <-glm(Y ~ X1 + X2 + X3, family=binomial(link=logit))

glm2 <-glm(Y ~ X1 + X2, family=binomial(link=logit))

次に、anova関数を使用します。

anova(glm2,glm1)

しかし、エラーメッセージが表示されます:

「anova.glmlist(c(list(object),dotargs) のエラー、分散 = 分散、:
モデルはすべて同じサイズのデータ​​セットに適合していませんでした」

これは何を意味し、どうすれば修正できますか? コードの最初でデータセットをattach編集したので、両方のモデルが同じデータセットで動作しています。

4

6 に答える 6

16

このエラーの主な原因は、1 つ以上の予測変数に欠損値がある場合です。R の最近のバージョンでは、既定のアクションは、値が欠落しているすべての行を省略することです (以前の既定ではエラーが生成されました)。したがって、たとえば、データ フレームに 100 行があり、X3 に 1 つの欠損値がある場合、モデル glm1 は 99 行のデータに適合します (X3 が欠損している行を削除します) が、glm2 オブジェクトは完全に適合します。 100 行のデータ (X3 を使用しないため、行を削除する必要はありません)。

そのanovaため、2 つのモデルが異なるデータセットに適合しているため (また、自由度などをどのように計算するのか)、関数はエラーを返します。

解決策の 1 つは、少なくとも 1 つのモデルで使用される列のみを持つ新しいデータ フレームを作成し、値が欠落しているすべての行を削除して ( na.omitorna.exclude関数を使用すると簡単になります)、両方のモデルを欠損値を持たない同じデータ フレーム。

他のオプションは、複数の代入または欠損データを処理する他の方法のためのツールを検討することです。

于 2013-08-22T18:17:23.540 に答える
7

エラーを回避する"models were not all fitted to the same size of dataset"には、データのまったく同じサブセットに両方のモデルを適合させる必要があります。これを行うには、次の 2 つの簡単な方法があります。

  • data=glm1$model2ndモデルフィットで使用するか
  • またはdata=na.omit(orig.data[ , all.vars(formula(glm1))])、2 番目のモデル フィットで使用して、正しくサブセット化されたデータセットを取得します

lmglm同じアプローチが機能するはずです)とを使用した再現可能な例を次に示しupdateます。

# 1st approach
# define a convenience wrapper
update_nested <- function(object, formula., ..., evaluate = TRUE){
    update(object = object, formula. = formula., data = object$model, ..., evaluate = evaluate)
}

# prepare data with NAs
data(mtcars)
for(i in 1:ncol(mtcars)) mtcars[i,i] <- NA

xa <- lm(mpg~cyl+disp, mtcars)
xb <- update_nested(xa, .~.-cyl)
anova(xa, xb)
## Analysis of Variance Table
## 
## Model 1: mpg ~ cyl + disp
## Model 2: mpg ~ disp
##   Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
## 1     26 256.91                              
## 2     27 301.32 -1   -44.411 4.4945 0.04371 *
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# 2nd approach
xc <- update(xa, .~.-cyl, data=na.omit(mtcars[ , all.vars(formula(xa))]))
anova(xa, xc)
## Analysis of Variance Table
## 
## Model 1: mpg ~ cyl + disp
## Model 2: mpg ~ disp
##   Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
## 1     26 256.91                              
## 2     27 301.32 -1   -44.411 4.4945 0.04371 *
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

以下も参照してください。

于 2016-05-24T14:20:10.957 に答える
0

次のように入力するつもりだったと思います。

glm1 <-glm(Y ~ X1+X2+X3, family=binomial(link=logit))

glm2 <-glm(Y ~ X1 + X2, family=binomial(link=logit))

R 回帰関数の数式インターフェイスは、コンマを数式の RHS に共変量を追加するものとして認識しません。そして使用しないでくださいattach(); 回帰関数に data 引数を使用します。

于 2013-08-22T19:01:26.190 に答える