У меня есть следующий рабочий игрушечный пример:Как игнорировать cor.test: «не достаточно конечных наблюдений» и по-прежнему, при использовании tidyverse и ggplot2 (ggpmisc)
trunctiris <- iris [1:102,]
analysis <- trunctiris %>%
group_by(Species) %>%
nest() %>%
mutate(model = map(data, ~lm(Sepal.Length ~ Sepal.Width, data = .)),
cor = map(data, ~tidy(cor.test(.x$Sepal.Length, .x$Sepal.Width), 3)))
stats <- analysis %>%
unnest(cor)
ggplot(trunctiris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point(shape = 21) +
geom_text(data = stats, aes(label = sprintf("r = %s", round(estimate, 3)), x = 7, y = 4)) +
geom_text(data = stats, aes(label = sprintf("p = %s", round(p.value, 3)), x = 7, y = 3.8)) +
geom_smooth(method = "lm", formula = y ~ x) +
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~~")),
formula = y ~ x,
parse = TRUE) +
facet_wrap(~Species)
код был предоставлен другой вопрос , Однако мне не удалось заставить его работать с моими данными. Проблема в том, что у меня есть некоторые (не все) группы, которые имеют менее 3 наблюдений, и поэтому в «аналитической» части R возвращается:
Ошибка в файле mutate_impl (.data, dots): недостаточно конечных наблюдений
, что связано с тем, что в группе недостаточно наблюдений (в данном случае: virginica). Я хочу, чтобы обойти это, я пытался 'попробовать (если nrow (данные)> = 2)' или подобный .. как следующее:
analysis <- iris %>%
group_by(Species) %>%
nest() %>% mutate(model = map(data, ~lm (Sepal.Length ~ Sepal.Width, data = .)),
cor = if_else(nrow(data) <= 2 , warning ("Must have at least 3 rows of data"),
(map(data, ~tidy(cor.test(.x$Sepal.Length, .x$Sepal.Width), 3)))))
, которая возвращает:
Ошибка в mutate_impl (.data, dots): недостаточно конечных наблюдений Дополнительно: Предупреждающее сообщение: В if_else (список (список (Sepal.Length = c (5.1, 4.9, 4.7, 4.6, 5,: Должен иметь не менее 3 строки данных
Кто-нибудь знает простой способ обойти это? Я бы хотел пропустить проблемную группу и продолжить работу.
Большое спасибо и извините за мои основные навыки R.
Самое легкое решение, о котором я могу думать, - это заранее проверить это в ваших данных, отбросить группы, которые не соответствуют этому критерию, и передать полученный data.frame в 'ggplot'. – lmo