2017-01-31 12 views
0

Je crée ma première application Shiny et j'ai du mal à tracer les quatre tests d'adéquation du paquet fitdistrplus. (Pour les références, je suis en train de reproduire les parcelles de la page 7 de la référence ici:fitdist in r shiny, l'erreur nécessite des valeurs finies 'xlim'

https://www.jstatsoft.org/article/view/v064i04/v64i04.pdf

En bref, je veux que l'utilisateur de sélectionner un sous-ensemble de données en fonction de la variable M, puis d'évaluer différentes densités de distributions de probabilité pour la variable Q. J'ai utilisé le code pour créer la bonté de l'ajustement des parcelles en dehors de Shiny et cela fonctionne parfaitement.En R Shiny, je suis capable de tracer individuellement l'ajustement (fw, fg, fl) mais quand il s'agit d'utiliser le denscomp, qqcomp, cdfcomp et ppcomp, j'ai ce message d'erreur:

Error: need finite 'xlim' values

J'ai essayé d'ajouter les xlim et ylim dans le code (ex: xlim =c(0,300), ylim=c(0.008)) mais j'ai quand même reçu le message d'erreur.

Est-ce que quelqu'un a une idée pour résoudre ce problème?

Mon code ci-dessous:

library(fitdistrplus) 
library(shiny) 
library(dplyr) 

ui<- shinyUI(pageWithSidebar(

headerPanel("Distribution analysis"), 

sidebarPanel(
    selectInput("input1", 
       label = "M", 
       choices = data$m, 
       selected = "M1"), 

mainPanel(
    tabsetPanel(
    tabPanel("Fit", plotOutput("fit1")), 
    tabPanel("Distribution", plotOutput("hist1")), 
    tabPanel("Table", tableOutput("table")) 
)) 
)) 

server<- shinyServer(function(input, output) { 

dataInput <- reactive({ 
    data %>% 
    filter(m==input$input1) 
}) 

fw<- eventReactive(input$input1 { 
    fitdist(dataInput()$Q, "weibull") 
    }) 

fg<- eventReactive(input$input1 { 
    fitdist(dataInput()$Q, "gamma") 
    }) 

fln<- eventReactive(input$input1 { 
    fitdist(dataInput()$Q, "lnorm") 
    }) 

output$fit1 <- renderPlot({ 
    if (!is.null(dataInput())) { 
    par(mfrow = c(2, 2)) 
    plot.legend <- c("Weibull", "lognormal", "gamma") 
    denscomp(list(fw, fln, fg), legendtext = plot.legend) 
    qqcomp(list(fw, fln, fg), legendtext = plot.legend) 
    cdfcomp(list(fw, fln, fg), legendtext = plot.legend) 
    ppcomp(list(fw, fln, fg), legendtext = plot.legend) 

    } 
}) 
}) 

shinyApp(ui=ui, server=server) 

et les données pour recréer l'exemple:

m<- c("M1","M3","M3", "M2", "M3","M2","M2","M1","M1","M1","M1","M3","M3","M2","M2","M1","M3","M3", "M3","M2","M2","M2","M1","M1","M1","M1","M1","M3","M3","M3") 
Q<- c(265, 65, 40, 245,230,175, 185, 190, 290, 85, 75, 155, 110, 60, 35, 245, 300,175, 180, 265, 55, 200, 95, 185, 165, 55, 90, 190, 235, 200) 
data<- data.frame(m,Q) 

Répondre

0

je fixe quelque chose que vous avez, mais comme je ne suis pas familier avec le paquet fitdistrplus Je ne peux pas complètement debug autres avertissements. Notez que tous les réactifs sont des fonctions doivent donc être utilisés en tant que tels par exemple: fln() et non fln

#rm(list = ls()) 
library(fitdistrplus) 
library(shiny) 
library(dplyr) 

m<- c("M1","M3","M3", "M2", "M3","M2","M2","M1","M1","M1","M1","M3","M3","M2","M2","M1","M3","M3", "M3","M2","M2","M2","M1","M1","M1","M1","M1","M3","M3","M3") 
Q<- c(265, 65, 40, 245,230,175, 185, 190, 290, 85, 75, 155, 110, 60, 35, 245, 300,175, 180, 265, 55, 200, 95, 185, 165, 55, 90, 190, 235, 200) 
data<- data.frame(m,Q) 

ui<- shinyUI(pageWithSidebar(
    headerPanel("Distribution analysis"), 
    sidebarPanel( selectInput("input1", label = "M",choices = data$m,selected = "M1")), 

    mainPanel(
    tabsetPanel(
     tabPanel("Fit", plotOutput("fit1")), 
     tabPanel("Distribution", plotOutput("hist1")), 
     tabPanel("Table", tableOutput("table")) 
    )) 
)) 

server<- shinyServer(function(input, output) { 

    dataInput <- reactive({ 
    if(is.null(input$input1)){ 
     return() 
    } 
    data %>% filter(m==input$input1) 
    }) 

    fw <- eventReactive(input$input1, { 
    fitdist(dataInput()$Q, "weibull") 
    }) 

    fg <- eventReactive(input$input1, { 
    fitdist(dataInput()$Q, "gamma") 
    }) 

    fln <- eventReactive(input$input1, { 
    fitdist(dataInput()$Q, "lnorm") 
    }) 

    output$fit1 <- renderPlot({ 
    if(is.null(dataInput()) | nrow(dataInput()) ==0){ 
     return() 
    } 
    par(mfrow = c(2, 2)) 
    plot.legend <- c("Weibull", "lognormal", "gamma") 
    denscomp(list(fw(), fln(), fg()), legendtext = plot.legend) 
    qqcomp(list(fw(), fln(), fg()), legendtext = plot.legend) 
    cdfcomp(list(fw(), fln(), fg()), legendtext = plot.legend) 
    ppcomp(list(fw(), fln(), fg()), legendtext = plot.legend) 
    }) 
}) 

shinyApp(ui=ui, server=server) 

enter image description here

Note de ces erreurs de message que vous devez prendre en charge, commencent peut-être ici https://stats.stackexchange.com/questions/158163/why-does-this-data-throw-an-error-in-r-fitdistr

enter image description here

+0

Merci pour la réponse. Cela a résolu le problème. Merci pour les conseils aussi. Très apprécié. –

+0

Veuillez Accepter la réponse si elle a résolu votre problème –