Создание интерактивного линейного графика с блестящим R

#r #plot #dynamic #shiny #modeling

Вопрос:

Обычно я могу найти здесь ответ на все свои проблемы с кодированием, но эту конкретную проблему я не могу решить.

Я создаю модель IS/LM из экономики, где я хочу, чтобы сюжет был интерактивным. Я сделал оси x и y интерактивными, но, похоже, я даже не могу нарисовать линии ни для IS, ни для функции LM.

Большая часть кода взята у пользователя github(https://github.com/josephdsbr), где я перевел его и внес буквенные изменения в уравнения. Я просто хочу добавить интерактивный график на блестящий сайт.

Код: Пользовательский интерфейс:

 
library(shiny)
library(shinydashboard)



header <- dashboardHeader(title = 'IS/LM')

sidebar <- dashboardSidebar(
  sidebarMenu(
        menuItem('IS-LM', tabName = 'islm')))



body <- dashboardBody(
  tabItems(
    tabItem(tabName = 'islm',
            
            fluidRow(
              box(width = 12,
                  h1('IS/LM modellen')
            ),
            
            fluidRow(
              infoBoxOutput('Indkomst'),
              infoBoxOutput('Rente'),
              infoBoxOutput('alpha')
            ),
            
            fluidRow(
              box(title = 'Autonomt forbrug',
                  status = 'primary',
                  solidHeader = T,
                  collapsible = T,
                  collapsed = T,
                  sliderInput('c_0',
                              'Autonomt forbrug',
                              min = 0,
                              max = 100,
                              value = 50,
                              step = 10),
                  sliderInput('i_0',
                              'Autonome investeringer',
                              min = 0,
                              max = 100,
                              value = 50,
                              step = 10),
                  sliderInput('g_0',
                              'Offentlig forbrug',
                              min = 0,
                              max = 100,
                              value = 30,
                              step = 10)),
              
              box(title = 'LM parametrer',
                  status = 'primary',
                  solidHeader = T,
                  collapsible = T,
                  collapsed = T,
                  
                  sliderInput('m',
                              'Pengeudbud',
                              min = 10,
                              max = 150,
                              value = 60,
                              step = 10),
                  
                  sliderInput('k',
                              'Følsomhed i efterspørgsel efter valuta / indkomst',
                              min = 0,
                              max = 1,
                              value = 0.5,
                              step = 0.1),
                  sliderInput('h',
                              'Følsomhed i efterspørgsel efter valuta / rentesats',
                              min = 0,
                              max = 10,
                              value = 4,
                              step = 1))),
            fluidRow(
              box(width = 12,
                  title = 'IS paramtrer',
                  status = 'primary',
                  solidHeader = T,
                  collapsible = T,
                  collapsed = T,
                  sliderInput('c_1',
                              'Marginal forbrugstilbøjelighed',
                              min = 0,
                              max = 1,
                              value = 0.8,
                              step = 0.1),
                  sliderInput('b',
                              'Investeringstilbøjelighed',
                              min = 0,
                              max = 10,
                              value = 5,
                              step = 1)
                  )), 
            plotOutput("plot")
            ))))

shinyUI(
  dashboardPage(
    header = header,
    sidebar = sidebar,
    body = body
  ))
 

Сервер:

 library(shiny)
library(shinydashboard)
library(tidyverse)

shinyServer(function(input, output){
  
  ## Pre-processing
  
  vals <- reactiveValues()
  res <- reactiveValues()
  
  observe({
    vals$c_0 <- input$c_0
    c_0 <- vals$c_0
    vals$i_0 <- input$i_0
    i_0 <- vals$i_0
    vals$g_0 <- input$g_0
    g_0 <- vals$g_0
    vals$m <- input$m
    m <- vals$m
    vals$k <- input$k
    k <- vals$k
    vals$h <- input$h
    h <- vals$h
    vals$c_1 <- input$c_1
    c_1<-vals$c_1
    vals$b <- input$b
    b <- vals$b
    
    res$ga <- vals$c_0   vals$i_0   vals$g_0
    res$alpha <- 1 - vals$c_1
    res$sigma <- res$alpha*vals$h   vals$b*vals$k
    res$prod <- (res$ga*vals$h   vals$b*vals$m)/(res$sigma)
    res$Rente <- (res$ga*vals$k - res$alpha*vals$m)/(res$sigma)
    
    IS.curve <- function(c_0, g_0, b, i_0)
    { 
      y = (1/(1-c_0))*g_0 - (1/(1-c_0))*b*i_0
      return(y)
    }
    
    LM.curve <- function(m, h, k, i_0)
    {
      y = m/k   (h/k)*i_0
      return(y)
    }
    
    res$IS <- IS.curve(c_0, g_0, b, i_0)
   
    res$LM <- LM.curve(m, h, k, i_0)
  }) 
  
  output$Indkomst <- renderInfoBox({
    infoBox('Indkomst', value = paste('

Надеюсь, вы, ребята, сможете мне помочь.


Комментарии:

1. Первый. Ваше приложение работает нормально и отображает значения. Однако вычисляемые вами значения выходят за установленные вами пределы по осям x и y. Во-вторых, мои знания в области IS-LM немного заржавели, но, насколько я понимаю, вы вычисляете только одно значение для выбранных параметров модели. Следовательно, никакие строки не появятся.

, round(res$prod,2)), fill = T)
})

output$Rente <- renderInfoBox({
infoBox('Rente', value = paste(round(res$Rente), '%'), fill = T)
})

output$alpha <- renderInfoBox({
infoBox('Multiplicator', value = round(1/(res$alpha)), fill = T)
})

output$plot <- renderPlot({
plot(x=res$IS,y=res$Rente, xlim=c(min(res$prod), max(res$prod)), ylim=c(min(res$Rente),max(res$Rente)))
lines(x=res$LM, y=res$Rente, xlim=c(min(res$prod), max(res$prod)), ylim=c(min(res$Rente),max(res$Rente)))
})
})

Надеюсь, вы, ребята, сможете мне помочь.

Комментарии:

1. Первый. Ваше приложение работает нормально и отображает значения. Однако вычисляемые вами значения выходят за установленные вами пределы по осям x и y. Во-вторых, мои знания в области IS-LM немного заржавели, но, насколько я понимаю, вы вычисляете только одно значение для выбранных параметров модели. Следовательно, никакие строки не появятся.