2017-03-29 1 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

수식을 올바르게 작성하면됩니다. 난 당신이 paste0가하는 생각하는지 모르겠지만, 여기에 더 나은 방법

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

당신이 (독립 변수는 함수의 앞부분이 있습니다위한 reformulate() 명령이 올바른 공식을 구축 할 것입니다.

+0

최고, 감사합니다! lm() 함수의 정규 형식이 다른 스크립트에서와 같이 작동하지 않는 이유가 확실하지 않습니다. 표준 lm()과 달리 여기에서 다시 형식화해야하는 이유를 설명해 주시겠습니까? 예 : 다른 스크립트에서 lm() 함수를 사용했고 다음 함수에 대한 원하는 결과를 제공 할 수있었습니다 : lm2 = lm (AvgIR ~ Date + AvgGFEE + AvgLTV + SumCount + AvgRTC, data = subSD) 하지만이 경우에는 재구성이 필요합니다. – Jst2Wond3r

+0

R의 문자 값과 적절한 기호 사이에는 큰 차이가 있습니다. 수식은 평가되지 않은 기호의 모음입니다. 그것은 문자 값을 전혀 포함하지 않습니다. 문자 값 ('input $ IndVar'와'Input $ DepVar'가 리턴하는 것)으로부터 공식을 만들려면,'reformulate()'또는'as.formula()'와 같은 함수를 사용해야합니다. – MrFlick

관련 문제