我构建了一个闪亮的应用程序,允许用户输入双变量数据,并通过一系列点击产生散点图,然后将相关系数作为文本添加到图中,最后将回归线与其等式相加。
我试图在应用程序中模拟该过程,该应用程序首先生成带有单击的“随机”散点图。不知何故,随机生成的双变量数据正在影响绘图过程,因为x和y值似乎不会持续产生后续的图。这些值存在于某处,因为相关性和回归方程是根据需要在第二次和第三次点击时产生的。该应用程序使用一些源代码来调用函数来生成随机双变量数据,绘制图表并生成回归系数。我没有把它包括在下面因为我已经单独运行它并且它工作正常。无论如何,这是我的代码:
library(shiny)
source('binorm.R')
ui<-fluidPage(
withMathJax(),
tags$style(type = "text/css",
"h1 {color: blue; font-weight: bold; font-size: 24px;}",
"h4 {color: blue; font-weight: bold; font-size: 18px;}",
"body {background-color: gold;}",
"label {font-size: 16px; color: blue;
font-weight: bold;}"
),
tags$head(tags$style(HTML(
"#r {font-size: 15px; color: red; font-weight: bold;}"))),
tags$head(tags$style(HTML(
"#reg {font-size: 15px;color: red; font-weight: bold;}"))),
tags$h1('Guess the Correlation Coefficient, r'),
fluidRow(
column(9,
plotOutput('plot', height="600px", width='100%')),
column(3,
hr(),
h4("Generate a 'Random' Scatterplot"),
actionButton(inputId='go1', label='Get New Scatterplot',
style="color: blue; font-size: 16px; font-weight: bold;
background-color: white;"),
hr(),
h4('Reveal Correlation'),
actionButton(inputId='go2', label='Show r',
style="color: blue; font-size: 16px; font-weight: bold;
background-color: white;"),
hr(),
verbatimTextOutput('r'),
h4('Show the Regression Line, y on x'),
actionButton(inputId='go3', label='Show Regression Equation',
style="color: blue; font-size: 16px; font-weight: bold;
background-color: white;"),
hr(),
verbatimTextOutput('reg')
)
)
)
server<-function(input, output){
v<-reactiveValues(M=rbivariate(rpar(200)), r=FALSE, reg=FALSE)
observeEvent(input$go1, {v$r<-FALSE})
observeEvent(input$go1, {v$reg<-FALSE})
observeEvent(input$go1, {v$M<-rbivariate(rpar(200))})
observeEvent(input$go2, {v$r<-TRUE})
observeEvent(input$go3, {v$reg<-TRUE})
output$plot<-renderUI({
if (v$r==FALSE){
S1plot(v$M[,1], v$M[,2])}
else if (v$r==TRUE & v$reg==FALSE){
Rplot(v$M[,1], v$M[,2])}
else if (v$r==TRUE & v$reg==TRUE){
L1plot(v$M[,1], v$M[,2])}
})
output$r<-renderPrint({
if(v$r==TRUE){print(cex=2,paste0(
'r= ',
rcfs(v$M[,1], v$M[,2])[3]))}
else {print('What is r?')}
})
output$reg<-renderPrint({
if(v$reg==TRUE){print(cex=2,paste0(
'y=(',
rcfs(v$M[,1],v$M[,2])[1],')x+(',
rcfs(v$M[,1],v$M[,2])[2],')'))
}
else {print('Regression Equation?')}
})
}