2017-03-29 6 views
2

lm()関数で使用される独立変数と従属変数の両方を選択して最終的にプロットする線形回帰を使用して簡単なアプリを構築しようとしていますいくつかのチャートも同様です。私は現在、光沢のあるサーバ側のlm()関数への入力を渡し、回帰の概要を出力することができません。私のロジック/コードが間違っている場所で誰でも助けてくれますか?事前にRの動的入力を使って線形回帰を構築するShiny

 YYYYMM  AvgIR SumCount AvgLTV  AvgGFEE AvgRTC  Date 
1: 2015-10 0.04106781 180029 0.7531805 0.002424778 319.6837 2015-10-01 
2: 2015-11 0.04036154 160061 0.7380383 0.002722529 312.6314 2015-11-01 
3: 2015-12 0.04001407 145560 0.7392874 0.002425912 313.0351 2015-12-01 
4: 2016-01 0.04034078 147693 0.7396932 0.002600640 315.0238 2016-01-01 
5: 2016-02 0.04055688 142545 0.7345160 0.002449523 310.3950 2016-02-01 

ありがとう:以下のコード

library(shiny) 
library(data.table) 

RegData <- as.data.table(read.table("/home/r2uphp/ShinyApps/IRViews/RegData.tsv", header = TRUE, stringsAsFactors = FALSE)) 

ui <- fluidPage(
    headerPanel("Regression and Time Series Analysis"), 
    sidebarPanel(
    p("Select the inputs for the Dependent Variable"), 
    selectInput(inputId = "DepVar", label = "Dependent Variables", multiple = FALSE, choices = list("AvgIR", "YYYYMM", "SumCount", "AvgLTV", "AvgGFEE", "AvgRTC", "Date")), 
    p("Select the inputs for the Independent Variable"), 
    selectInput(inputId = "IndVar", label = "Independent Variables", multiple = FALSE, choices = list("SumCount", "AvgIR", "YYYYMM", "AvgLTV", "AvgGFEE", "AvgRTC", "Date")) 
), 
    mainPanel(
    verbatimTextOutput(outputId = "RegSum"), 
    verbatimTextOutput(outputId = "IndPrint"), 
    verbatimTextOutput(outputId = "DepPrint") 
    #plotOutput("hist") 
) 
) 

server <- function(input, output) { 

    lm1 <- reactive({lm(paste0(input$DepVar) ~ paste0(input$IndVar), data = RegData)}) 

    output$DepPrint <- renderPrint({input$DepVar}) 
    output$IndPrint <- renderPrint({input$IndVar}) 
    output$RegSum <- renderPrint({summary(lm1())}) 

} 

shinyApp(ui = ui, server = server) 
はここ

This is the result of the shinyapp私が使用していたサンプルデータセットがされています!

答えて

3

フォーミュラを正しく作成するだけで済みます。 、reformulate()コマンドは、独立変数が関数内で最初に来ることに注意してください(あなたのための正しい式を構築します。

+0

恐ろしい私はあなたがpaste0はないと思うのかわからないんだけど、ここではより良い方法は

lm1 <- reactive({lm(reformulate(input$IndVar, input$DepVar), data = RegData)}) 

ですありがとうございます!lm()関数の通常の形式が他のスクリプトと同じように機能しない理由がわかりません。標準lm()とは対照的に、ここで再定式化する必要性について説明してください。 例私はいくつかのスクリプトでlm()関数を使用し、次の関数の目的の結果を提供することができました: lm2 = lm(AvgIR〜Date + AvgGFEE + AvgLTV + SumCount + AvgRTC、data = subSD) しかし、この場合は再調整が必要で、なぜそれが必要なのか分かりません。 – Jst2Wond3r

+0

Rの文字値と適切な記号との間には大きな違いがあります。数式は未評価の記号の集合です。文字の値はまったく関係しません。文字値( 'input $ IndVar'と' input $ DepVar'が返すもの)から式を構築したい場合は、 'reformulate()'や 'as.formula()'のような関数を使う必要があります。 – MrFlick