Ошибка R: "Не все модели соответствуют одному и тому же размеру набора данных.

Я создал две обобщенные линейные модели 9X_anova следующим образом:

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

Затем я использую функцию 9X_r anova:

anova(glm2,glm1) 

но появляется сообщение об ошибке:

"Ошибка 9X_rstats в anova.glmlist (c (список (объект), точки), дисперсия 9X_lm = дисперсия,:
не все модели соответствовали 9X_anova одинаковому размеру набора данных "

Что это 9X_r-language значит и как это исправить? Я attach редактировал 9X_r-language набор данных в начале моего кода, поэтому 9X_lm обе модели работают с одним и тем же набором 9X_glm данных.

16
3

  • Кроме того, я предполагаю, что вы использовали `glm (Y ~ X1 ...)`, а не просто `(Y ~ X1 ...)`? А почему у ...
3
Общее количество ответов: 3

Ответ #1

Ответ на вопрос: Ошибка R: "Не все модели соответствуют одному и тому же размеру набора данных.

Основная причина этой ошибки - отсутствие 9X_glm значений в одной или нескольких переменных-предикторах. В 9X_lm последних версиях R действие по умолчанию 9X_base-r - опустить все строки, в которых отсутствуют 9X_r-language какие-либо значения (предыдущее значение 9X_r по умолчанию приводило к ошибке). Так, например, если 9X_glm фрейм данных имеет 100 строк и в X3 отсутствует 9X_r-language одно значение, тогда ваша модель glm1 будет 9X_glm соответствовать 99 строкам данных (отбрасывая 9X_glm строку, в которой отсутствует X3), но объект 9X_r-language glm2 будет соответствовать полностью 100 9X_glm строк данных (поскольку он не использует 9X_rstats X3, строки удалять не нужно).

Итак, функция 9X_base-r anova выдает ошибку, потому что две модели подходят 9X_r для разных наборов данных (и как вы вычисляете 9X_lm степени свободы и т. д.).

Одно из решений 9X_lm - создать новый фрейм данных, содержащий 9X_glm только столбцы, которые будут использоваться 9X_glm хотя бы в одной из ваших моделей, и удалить 9X_base-r все строки с любыми пропущенными значениями 9X_r (функция na.omit или na.exclude сделает это easy), затем 9X_base-r поместите обе модели в один и тот же фрейм 9X_r-language данных, в котором нет пропущенных значений.

Другим 9X_r вариантом может быть использование инструментов 9X_base-r для множественного вменения или других способов 9X_glm работы с отсутствующими данными.

17
0

Ответ #2

Ответ на вопрос: Ошибка R: "Не все модели соответствуют одному и тому же размеру набора данных.

Чтобы избежать ошибки "models were not all fitted to the same size of dataset", необходимо подогнать 9X_glm обе модели к одному и тому же подмножеству 9X_r-language данных. Это можно сделать двумя простыми 9X_rstats способами:

  • либо используйте data=glm1$model во втором подходе к модели
  • или получить правильно подобранный набор данных с помощью data=na.omit(orig.data[ , all.vars(formula(glm1))]) во втором подходе модели

Вот воспроизводимый пример с использованием 9X_rstats lm (для glm должен работать тот же подход) и 9X_glm 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 

См. также:

  • How to update `lm` or `glm` model on same subset of data?

8
0

Ответ #3

Ответ на вопрос: Ошибка R: "Не все модели соответствуют одному и тому же размеру набора данных.

Решение заключается в использовании:

glm1 <-glm(Y ~ X1 + X2 + X3, family = binomial(link = logit), na.action = na.exclude) glm2 <-glm(Y ~ X1 + X2, family = binomial(link = logit), na.action = na.exclude) anova(glm2,glm1) 

Это 9X_glm заставит R включить случаи с отсутствующими 9X_base-r данными (NA) в подобранную модель. Это гарантирует 9X_rstats идентичность наборов данных в разных моделях 9X_glm подгонки независимо от того, как распределяются 9X_base-r отсутствующие данные.

1
2

  • Есть как минимум два простых подхода к этому, которые я обсуждаю в [этом ответе] (http://stackoverflow.com/questions/18387258/r-error-which-says-models-were-not-all-fitted ...