Радарные/паутинные карты


Радарные диаграммы все еще не так распространены, как их другие сестры и братья. Они позволяют показать различия между группами по многим переменным одновременно. Они хорошо работают, если у вас есть какой-то максимум для этих переменных. Кроме того, если у вас не так много групп для сравнения, в идеале 2-3. И если вас не интересуют сами распределения.
Тем не менее, они визуально привлекательны и могут быть приятной частью динамического приложения Shiny.

Ниже приведен простой код для построения радарного графика для данных о симптомах болезни Паркинсона. Каждый симптом оценивается в баллах от 0 до 100. Поскольку данные являются продольными, функция позволяет построить график в определенный момент времени. Также включено упорядочивание по степени тяжести.

Функция работает для бинарной группы.

Plot.Bin.Radar<-функция(timepoint,group,order_by_severity = FALSE){

1TP5Данные о симптомах протекания#

data.symptoms<-data.frame(ID=m.data$participant_id,slow=m.data$slow, constipation=m.data$constipation,walk=m.data$walk,freezing=m.data$freezing, falls=m.data$falls,rising=m.data$rising,dressing=m.data$dressing,motivation=m.data$motivation,handwriting=m.data$handwriting,
депрессия=m.data$depression,withrawn=m.data$withdrawn,
тревога=m.data$anxiety,усталость=m.data$fatigue,
сонливость=m.data$sleepy,дискинезия=m.data$dyskinesia,
тремор=m.data$tremor,равновесие=m.data$balance,
головокружение=m.data$dizzy,зрительное=m.data$visual,бессонница=m.data$insomnia,
rbd=m.data$rbd,restlesslegs=m.data$restlesslegs,
мышечная боль=m.data$musclepain,речь=m.data$speech,
слюни=m.data$drool,сутулость=m.data$stoop,
память=m.data$memory,понимание=m.data$comprehension,запах=m.data$smell,
сексуальные=m.data$sexual,мочевые=m.data$urinary,
галлюцинации=m.data$hallucinations,тошнота=m.data$nausea,время=m.data$TimeCont)

#where групповая переменная в данных#
where.group<-which(names(m.data)==group)
  
data.symptoms.0<-data.symptoms[(data.symptoms$time==timepoint)&(m.data[,where.group]==0),]
data.symptoms.12<-data.symptoms[(data.symptoms$time==timepoint)&(m.data[,where.group]==1),]
  
  
all.symptoms.0 <- data.frame(sapply(data.symptoms.0, function(x) as.numeric(as.character(x))))
all.symptoms.12 <- data.frame(sapply(data.symptoms.12, function(x) as.numeric(as.character(x))))
  
  
av.symp.0<-colMeans(all.symptoms.0, na.rm=TRUE)
av.symp.12<-colMeans(all.symptoms.12, na.rm=TRUE)
  
data <- as.data.frame(rbind(av.symp.0[2:34],av.symp.12[2:34]))

1TP5Упорядочивание по степени тяжести#
  
  if (order_by_severity) {
    # Рассчитайте среднюю степень тяжести в обеих группах
    mean_severity <- colMeans(data, na.rm = TRUE)
    ordered_symptoms <- names(sort(mean_severity, decreasing = TRUE))
    data <- data[, ordered_symptoms]
  }
  
get.labels<-names.data$Field.Label[names.data$Variable.Field.Name==group]
  
rownames(data) <- c(paste0(" No ", timepoint, "m."),paste0(" Yes ",timepoint, "m."))
  
# Чтобы использовать пакет fmsb, я должен добавить 2 строки в кадр данных: максимальное и минимальное значение каждой переменной для отображения на графике!
  
 data <- rbind(rep(100,33) , rep(0,33) , data)
  
# Цветной вектор (границы и заливка)#

colors_border=c( rgb(0.2,0.5,0.5,0.9), rgb(0.8,0.2,0.5,0.9) , rgb(0.7,0.5,0.1,0.9),rgb(0.1,0.1,0.9,0.9))
colors_in=c( rgb(0.2,0.5,0.5,0.4), rgb(0.8,0.2,0.5,0.4) , rgb(0.7,0.5,0.1,0.4),rgb(0.1,0.1,0.9,0.4) )
  
  График # с параметрами по умолчанию:
  radarchart( data , axistype=1 ,
              #custom polygon
              pcol=colors_border , pfcol=colors_in , plwd=4 , plty=1,
              1TP5Настроить сетку
              cglcol="grey", cglty=1, axislabcol="grey", caxislabels=seq(0,20,5), cglwd=0.8, vlcex=0.8,title=get.labels)
  legend(x=0.8, y=1.3, legend = rownames(data[-c(1,2),]), bty = "n", pch=20 ,
         col=colors_border , text.col = "black", cex=1, pt.cex=2)
  if (order_by_severity) {
    mtext("Симптомы упорядочены по средней тяжести во всех группах",
          side = 1, line = 4, cex = 0.9, col = "grey40")
  }
  
}
Plot.Bin.Radar(0, "gender",order_by_severity = TRUE) 

Радарная диаграмма, сравнивающая мужские и женские симптомы.

В результате вызова функции Plot.Bin.Radar(0, "gender",order_by_severity = TRUE) мы имеем график, как показано выше. Для пола, для 0 месяцев (исходный уровень). Теперь представьте себе приложение Shiny со временем в качестве ползунка:

библиотека(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Дашборд Паркинсона"),
  dashboardSidebar(),
  dashboardBody(
    # Боксы необходимо расположить в ряд (или колонку)
    fluidRow(
      box(width = 6,plotOutput("plot1", height = 450)),
      
      box(
        title = "Базовый уровень по сравнению с другой временной точкой",
        sliderInput("slider", "Choose time point:", 0, 24, 6)
      )
    )
  )
)

server <- function(input, output) {
  
 библиотека(fmsb)
 
  
  your.data <- read.csv("mydata.csv")
  #Делайте некоторые операции с данными здесь#
 

  source("park_functions.R")
  
  output$plot1 <- renderPlot({
    Plot.Radar(input$slider)
   
  })
}

shinyApp(ui, server)
Приборная панель Parkinson с графиком сравнения по полу и времени.

Затем загрузите приложение на блестящий сервер и альт! Это сэкономит вам около 1000 участков и будет действительно интересно исследовать!

Удачи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


ru_RURussian