Ошибка при построении ggplot во вложенном наборе данных с несколькими переменными для построения - PullRequest
0 голосов
/ 12 апреля 2020

Я делал анализ данных о наборе данных по раку простаты.

Я хотел увидеть прогнозы и остатки, основанные на статусе пациента и причине смерти.

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

Я хочу визуализировать прогнозы и остатки, используя ggplot2 и, к сожалению, Я получил ошибку.

Не знаю, как автоматически выбрать масштаб для объекта типа grouped_df/tbl_df/tbl/data.frame. По умолчанию для непрерывного. Ошибка:

Эстетика должна иметь длину 1 или совпадать с данными (502): y

Я вижу, что в y имеется 502 элемента , Я понятия не имею, как визуализировать этот массивный набор данных. Набор данных прикреплен в виде снимка экрана (извините, не знаю, как загрузить файл).

dataset

#load libraries
install.packages("broom")
install.packages("purrr")
install.packages("ggplot2")
library(purrr)
library(tidyr)
library(dplyr)
library(broom)
library(modelr)
library(ggplot2)
library(tibble)
library(rlang)

#preparing data-nesting
#grouping my categorical variable
#interested in death cause and status

by_deathcause<-prostate_data_clean %>% 
  group_by(cause_of_death, status_) %>%
  nest() 

##building models
model1<-function(df){
  lm(serum_hemoglobin~sdate, df)
}    

#nesting and modelling
by_deathcause<-by_deathcause %>% 
  mutate(mdls=map(data,model1)) %>% 
  mutate(resids= map2(data, mdls, add_residuals), 
         pred=map2(data, mdls, add_predictions))

#unnest prediction
pred<-unnest(by_deathcause, pred)
resids<-unnest(by_deathcause, resids)

#plot the prediction
pred %>% 
  ggplot(aes(sdate, pred, group=status_))+
  geom_line()+
  geom_smooth()

#want clearer view on each cause of death!
pred %>% 
  ggplot(aes(sdate, pred, group=status_))+
  geom_line()+
  facet_wrap(~status_)

#plot the residual  !!!!!!!!!!!!
resids %>% 
  ggplot(aes(sdate, resids, group=cause_of_death))+
  geom_line()+
  geom_smooth(se=FALSE)

#model 2
model2<-function(df){
  lm(diastolic_bp~sdate, df)
}                

#nesting and modelling
by_deathcause_dia<-by_deathcause %>% 
  mutate(mdls=map(data,model2)) %>% 
  mutate(resids= map2(data, mdls, add_residuals), 
         pred=map2(data, mdls, add_predictions))

#unnest prediction
pred2<-unnest(by_deathcause_dia, pred)
resids2<-unnest(by_deathcause_dia, resids)

#plot the prediction
ggplot(data=pred2, mapping=aes(sdate, pred2))+
  geom_line(aes(group=status_))+
  geom_smooth(se=FALSE)

#want clearer view on each cause of death!
ggplot(data=pred2, mapping=aes(sdate, pred2, group=cause_of_death))+
  geom_line()+
  facet_wrap(~status_)

#plot the residual  !!!!!!!!!!!!
resids2 %>% 
  ggplot(aes(sdate, resids2, group=cause_of_death))+
  geom_line()+
  geom_smooth(se=FALSE)

1 Ответ

0 голосов
/ 12 апреля 2020

Я не могу воспроизвести ваш процесс, поэтому я просто укажу, откуда возникла ошибка и как с ней бороться.

Здесь у нас есть столбец в качестве столбца для другого столбца.

suppressWarnings(library(tidyverse))

df <- tibble(x = 1:10)
df$nest <- tibble(y = rnorm(10), z = rnorm(10))

Это структура df, где вы можете видеть, что nest - это столбец в df что само по себе является тибблом.

str(df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    10 obs. of  2 variables:
#>  $ x   : int  1 2 3 4 5 6 7 8 9 10
#>  $ nest:Classes 'tbl_df', 'tbl' and 'data.frame':    10 obs. of  2 variables:
#>   ..$ y: num  -0.7 -0.455 0.729 0.572 -0.535 ...
#>   ..$ z: num  -0.6152 -0.6212 -0.804 -0.0456 0.5856 ...

Попытка использовать столбец nest для построения дает ошибку, как это было в вашем случае.

# Doesn't work
ggplot(df, aes(x, nest)) +
  geom_point()
#> Don't know how to automatically pick scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous.
#> Error: Aesthetics must be either length 1 or the same as the data (10): y

Вы можете справиться с этим ошибка путем подстановки вложенного столбца с $. Обычно это не рекомендуется делать в aes(), но это имеет смысл с вложенными столбцами.

# Access columns in the nested data.frame with `$`
ggplot(df, aes(x, nest$y)) +
  geom_point()

Создано в 2020-04-12 представляет пакет (v0.3.0)

Не по теме; вам не обязательно публиковать весь ваш скрипт, только биты с некоторыми (фиктивными) данными, способными воспроизвести вашу ошибку. Вы можете опубликовать фрагмент своих данных, скопировав результат dput(head(my_data)), если заголовок данных - это все, что необходимо для воспроизведения проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...