2012-06-07 3 views
7

В R при использовании lm(), если я установил na.action = na.pass внутри вызова lm(), то в сводной таблице есть NA для любого коэффициента, который нельзя оценить (поскольку недостающих ячеек в этом случае).Различные действия NA для коэффициентов и сводка линейной модели в R

Если, однако, я извлекаю только коэффициенты из суммарного объекта, используя либо 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 

ответ

1

Почему вы не просто извлекать коэффициенты из подобранной модели:

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

Это кажется самый простой вариант.

na.action не имеет никакого отношения к этому. Обратите внимание, что вы не сделали перейдите na.action = na.pass в ваш пример.

na.action глобальная опция для обработки NA в данных, переданных в соответствии модели, как правило, в сочетании с формулой; это также имя функции na.action(). R создает так называемый модельный кадр из аргумента data и символическое представление модели, выраженной в формуле. На этом этапе будет обнаружено любое NA, а опция по умолчанию для na.action должна использовать na.omit(), чтобы удалить NA из данных, сбросив образцы с помощью NA для любой переменной. Существуют альтернативы, наиболее полезные na.exclude(), которые удалят NA во время установки, но добавьте обратно NA в правильные места в установленных значениях, остатках и т. Д. Прочтите ?na.omit и ?na.action для более, плюс ?options для получения дополнительной информации об этом.

+2

Спасибо за пояснения, что параметры na.action не относятся к этой проблеме. Извлечение коэффициентов из установленной модели может работать в крайнем случае, но я хотел связать пару столбцов для доверительных интервалов с суммарной таблицей. Мне не нужны только оценки; Я хочу стандартные ошибки, p-значения и т. Д., С доверительными интервалами, указанными в конце. Я мог бы просто сделать таблицу с нуля, но я подумал, что может быть какая-то простая настройка, которая нуждается в изменении, чтобы получить 'coef (summary (myModel))' и 'confint (myModel)' для вывода того же количества строк в том же порядке , – Jdub

+0

@Jdub, вы поняли это? У меня точно такая же проблема. –

+0

такой же здесь! та же проблема – vagabond

0

документация summary.lm говорит: «Псевдонимые коэффициенты опущены в возвращаемом объекте, но восстанавливаются с помощью метода ». Кажется, нет никакого параметра для управления этим пропуском. Существует еще одна работа, помимо использования coef (summary (myModel)), как это предложил @Gavin Simpson. Вы можете создать матрицу

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)) 

, а затем rbind два Matrice:

mat_coef <- rbind(summary(myModel)$coefficients,mat_na) 

 Смежные вопросы

  • Нет связанных вопросов^_^