NA промежуточные значения -> Ложные корреляции и графики? - PullRequest
2 голосов
/ 12 января 2020

У меня проблема с прогнозированием значений на основе модели при условии, что значения имеют промежуточное значение NA (см. Пример кода ниже). Как вы можете видеть на графике, предсказанная линия кажется странной, и я предполагаю, что АН вроде бы «игнорируются». Возможно, у вас есть решение этой проблемы?

Я также работаю с моделью через al oop для других векторов значений и на их пути к циклической корреляции между значениями и прогнозируемыми значениями появляются некоторые сообщения об ошибках, такие как «несовместимая ошибка» и «недопустимый уровень фактора, сгенерированный NA». Поэтому мне нужен способ игнорировать промежуточную НС ...

scale <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
values <- c(2, NA, NA, NA, 30, 45, 60, 75, 85, 100)
mod <- nls(values~(scale)^a, start=list(a=1))
summary(mod)
cor(values, c(predict(mod)))  

plot(scale,values,pch=16)
lines(scale, c(predict(mod),NA,NA,NA), col='blue',lty=2, lwd=3) 

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Всегда полезно прочитать страницу (-ы) руководства по функциям, которые вы используете. Обработка пропущенных данных контролируется несколькими аргументами. Во-первых, ваша функция cor() должна была выдать сообщение об ошибке, поскольку поведение по умолчанию в nls() заключается в удалении наблюдений с отсутствующими значениями, поэтому длина scale и predict(mod) отличается, поскольку три значения были исключены как содержащие отсутствующие значения. , Затем вы добавляете эти пропущенные значения в конец predict(mod), но пропущенные значения не в конце values, что вводит ваш график в заблуждение. Попробуйте это:

mod <- nls(values~(scale)^a, start=list(a=1), na.action="na.exclude")
cor(values, c(predict(mod)), use="complete.obs")
# [1] 0.9900571
plot(scale, values, pch=16)
lines(scale, predict(mod), col='blue',lty=2, lwd=3)

Теперь сюжет совсем не вводит в заблуждение. Plot

1 голос
/ 12 января 2020

Не совсем понятно, как вы хотите, чтобы ваш график выглядел, но это пример, который строит линию над точками.

plot(scale,values,pch=16)
lines(scale[!is.na(values)], predict(mod), col='blue',lty=2, lwd=3) 

enter image description here

Что касается вашего второго вопроса, вы должны создать для него отдельный пост и включить более полный пример кода, включая l oop.

...