Как я могу игнорировать данные NA, когда я выполняю функцию lm? - PullRequest
2 голосов
/ 23 ноября 2010

Мой вопрос довольно прост, но я не смог решить его после многих попыток.

У меня есть два кадра данных.* вписать данные в a и b?

Если я это сделаю, как мне проигнорировать данные NA?

Спасибо, Дэн

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

Как правило, функции регрессии в R будут сообщать результаты только для завершенных дел, поэтому вам обычно не нужно делать что-то особенное для удержания дел. Ваш вопрос кажется немного расплывчатым, и неясно, почему вы помещаете всю матрицу (или это data.frame?) В левую часть формулы. Существует возможность проводить многовариантный анализ с помощью функции lm (), но люди, которые хотят это сделать, обычно задают более конкретные вопросы.

> lm(a$col1 ~ b$col1+b$col2 +b$col3+b$col4)

Call:
lm(formula = a$col1 ~ b$col1 + b$col2 + b$col3 + b$col4)

Coefficients:
(Intercept)       b$col1       b$col2       b$col3       b$col4  
         16           -3           NA           NA           NA  

Небольшое количество данных препятствует дальнейшим оценкам после потери двух случаев и только двух оставшихся.

2 голосов
/ 24 ноября 2010

Если a и b являются фреймами данных, и вы хотите регрессировать отдельные значения в a в значения в b, то вам необходимо преобразовать их в векторы.Например:

> lm(as.vector(as.matrix(a))~as.vector(as.matrix(b)))

Call:
lm(formula = as.vector(as.matrix(a)) ~ as.vector(as.matrix(b)))

Coefficients:
            (Intercept)  as.vector(as.matrix(b))  
               8.418239                -0.005241  

Отсутствующие данные по умолчанию удаляются - см. справку (lm) и параметр na.action.Сводный метод для объекта lm расскажет вам о пропущенных наблюдениях.

Конечно, игнорирование пространственной корреляции, которая может присутствовать в пространственных данных, будет означать, что ваши выводы из оценок параметров будут совершенно неверными.Карта остатков.И прочитайте хорошую книгу о пространственной статистике ...

[Правка: о, и кадры данных должны быть всеми числами, или вся партия преобразуется в символы, а затем ... ну, кто знает ...]

Редактировать:

Еще один способ получения векторов из фреймов данных - просто использовать 'unlist':

> a=data.frame(matrix(runif(16),4,4))
> b=data.frame(matrix(runif(16),4,4))
> lm(a~b)
Error in model.frame.default(formula = a ~ b, drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'a'
> lm(unlist(a)~unlist(b))

Call:
lm(formula = unlist(a) ~ unlist(b))

Coefficients:
(Intercept)    unlist(b)  
     0.6488      -0.3137  

Я раньше не видел data.matrixСпасибо Гэвин.

...