forked from mnunes/regressao
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.R
92 lines (76 loc) · 2.84 KB
/
server.R
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
82
83
84
85
86
87
88
89
90
91
92
function(input, output) {
# variavel que guarda os pontos excluídos e mantidos
vals <- reactiveValues(
keeprows = rep(FALSE, nrow(data))
)
output$plot1 <- renderPlot({
# plota os pontos keep e exclude como dois data frames diferentes
keep <- data[ vals$keeprows, , drop = FALSE]
exclude <- data[!vals$keeprows, , drop = FALSE]
# grafico de dispersao e reta ajustada aos dados
if (sum(vals$keeprows) >= 2){
ggplot(keep, aes(x=x, y=y)) +
geom_point() +
geom_smooth(method = lm, se = FALSE, color = "black") +
geom_point(data = exclude, fill = NA, color = "black", alpha = 0.00) +
coord_cartesian(xlim = 0.8*c(minimo, maximo), ylim = 0.8*c(minimo, maximo)) +
labs(x="X", y="Y", title=paste("Y = ", sprintf("%0.4f", coefficients(model())[1]), sprintf("%+0.4f", coefficients(model())[2]), "*X", ", R^2 = ", round(summary(model())$r.squared, digits=4), sep=""))
} else {
ggplot(keep, aes(x=x, y=y)) +
geom_point() +
geom_smooth(method = lm, se = FALSE, color = "black") +
geom_point(data = exclude, fill = NA, color = "black", alpha = 0.00) +
coord_cartesian(xlim = 0.8*c(minimo, maximo), ylim = 0.8*c(minimo, maximo)) +
labs(x="X", y="Y", title="Adicione mais pontos ao gráfico")
}
})
# ajusta o modelo aos dados keep
model <- reactive({
keep <- data[ vals$keeprows, , drop = FALSE]
rownames(keep) <- 1:nrow(keep)
lm(y ~ x, data = keep)
})
# cria a tabela com os resultados da regressao
output$model <- renderPrint({
if (sum(vals$keeprows) >= 2){
tabela_regressao(model())
}
})
# cria a tabela com os resultados da anova da regressao
output$anova <- renderPrint({
if (sum(vals$keeprows) >= 2){
tabela_anova(model())
}
})
# muda os pontos clicados
observeEvent(input$plot1_click, {
res <- nearPoints(data, input$plot1_click, allRows = TRUE, maxpoints=1)
vals$keeprows <- xor(vals$keeprows, res$selected_)
})
# apaga todos os pontos
observeEvent(input$exclude_reset, {
vals$keeprows <- rep(FALSE, nrow(data))
})
# graficos de diagnostico
output$plot2 <- renderPlot({
# condicional para evitar um erro;
# os graficos de diagnostico necessitam
# de pelo menos 3 pontos para serem
# criados
if (sum(vals$keeprows) >= 3){
autoplot(model())
} else {
mensagem <- data.frame(x=0, y=0)
ggplot(mensagem, aes(x=x, y=y, label="Mais pontos são necessários")) +
geom_text(size = 10) +
coord_cartesian(xlim = 0.8*c(minimo, maximo), ylim = 0.8*c(minimo, maximo))
}
})
# cria a tabela com os resultados da anova da regressao
output$dados <- renderPrint({
if (sum(vals$keeprows) >= 1){
tabela_dados(data[ vals$keeprows, , drop = FALSE])
}
}
)
}