#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 немного заржавели, но, насколько я понимаю, вы вычисляете только одно значение для выбранных параметров модели. Следовательно, никакие строки не появятся.