File size: 2,970 Bytes
57e83aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
n <- 20
b0 <- isolate(sample(-5:5, size=1))
b1 <- isolate(sample(-5:5, size=1))
x <- isolate(runif(n, min=-5, max=10))
y <- isolate(rnorm(n, mean=b0+b1*x, sd=5))
mod <- lm(y ~ x)
best_b0 <- round(coef(mod)[1], 2)
best_b1 <- round(coef(mod)[2], 2)
ssr <- sum((y-(best_b0+best_b1*x))^2)
ssr <- round(ssr, digits=2)
aux <- sum((y-(0+1*x))^2)

library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {
    
    #Example
    values <- reactiveValues(df_data = NULL)
    values <- reactiveValues(df = data.frame(Intercepto=0, 
                                             Pendiente=1,
                                             SCE=aux))
    
    newEntry <- observeEvent(input$update,{
        b0_new  <- c(values$df$Intercepto, as.numeric(input$b0))
        b1_new  <- c(values$df$Pendiente, as.numeric(input$b1))
        rta <- sum((y - (input$b0 + input$b1 * x))^2)
        rta <- round(rta, digits=2)
        SCE_new <- c(values$df$SCE, as.numeric(rta))
        
        values$df <- data.frame(Intercepto = b0_new, 
                                Pendiente  = b1_new,
                                SCE        = SCE_new)
    })
    
    output$example <- renderTable({values$df})

    output$my_plot <- renderPlot({
        par(mfrow=c(1, 2))
        
        # Figura 1
        plot(x=x, y=y, 
             #main=c(best_b0, best_b1),
             main="Diagrama de dispersion y \n modelo ajustado",
             pch=19, las=1)
        abline(h=0, v=0, lty="dashed", col=gray(0.8))
        aux <- function(inter, slope) inter + slope * x
        y_hat <- aux(inter = tail(values$df$Intercepto, n=1), 
                     slope = tail(values$df$Pendiente, n=1))
        #abline(a=input$b0, b=input$b1, lwd=3, col="deepskyblue3")
        abline(a=tail(values$df$Intercepto, n=1), 
               b=tail(values$df$Pendiente, n=1), 
               lwd=3, col="deepskyblue3")
        segments(x0=x, y0=y, x1 =x, y1=y_hat, col="tomato", lty="dotted")

        # If correct
        if (min(values$df$SCE) == ssr) 
            legend("center","center",
                   paste0(input$nombre, "\n felicitaciones, \n lo hiciste bien!!! "), 
                   text.col="darkorchid3", cex=2, bty="n", bg="#ffffff00")
        
        # Figura 2
        with(values$df, plot(SCE, las=1, type='b', pch=19,
                             ylab="SCE",
                             xlab="Intento",
                             ylim=c(0, max(SCE)),
                             main="Evolucion de SCE"))
        text(x=1, y=ssr, 
             paste0("Obj=", ssr), 
             col="green4", pos=4)
        abline(h=ssr, col="green4", lty="dashed", lwd=2)
        
        # If correct
        if (min(values$df$SCE) == ssr) 
            legend("center","center",
                   paste0(input$nombre, "\n felicitaciones, \n lo hiciste bien!!! "), 
                   text.col="darkorchid3", cex=2, bty="n", bg="#ffffff00")
    })

})