Bu çalışma kapsamında bugün R’da yazıp Shiny üzerinde yayınladığım kesikli olasılık dağılımlarından biri olan Binom olasılık dağılım simülasyonunun geliştirilmesinde kullandığım R kodları bütünleşik olarak paylaşılarak konu hakkında farkındalık oluşturulması amaçlanmıştır. Simülasyonda ayrıca üretilen veriyi csv formatında indirebilirsiniz de.
Geliştirdiğim uygulamaya aşağıdaki linkten ulaşabilirsiniz.
https://buluttevfik.shinyapps.io/bdagilim/
Faydalı olması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Not:
- Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
- It can not be cited or copied without referencing.
Kütüphaneler ve R Kodları
library(shinydashboard)
library(shinydashboardPlus)
library(shiny)
library(ggthemes)
library(tibble)
library(ggplot2)
library(pastecs)
library(psych)
library(shinyWidgets)
library(shinyjs)
library(ggpubr)
library(shinyFeedback)
library(shinyalert)
library(shinyvalidate)
library(dplyr)
ui <- dashboardPage(
dashboardHeader(title = "Gösterge Paneli"),
dashboardSidebar(),
dashboardBody(
tags$head(tags$style(HTML(
'.myClass {
font-size: 24px;
line-height: 50px;
text-align: center;
font-family: "Georgia", Times, "Times New Roman", serif;
padding: 0 15px;
overflow: hidden;
color: white;
font-weight: bold;
}
'))),
tags$script(HTML('
$(document).ready(function() {
$("header").find("nav").append(\'<span class="myClass"> Binom Olasılık Dağılım Simülasyonu </span>\');
})
')),
helpText(em(strong("Developed by Tevfik Bulut")), align = "left", style = "color:red; font-size: 12pt;font-family: Charm"),
helpText("Olasılık teorisinde adını İsviçreli matematikçi Jacob Bernoulli’den alan Bernoulli dağılımı, bir denemenin iki sonucu (başarılı- başarısız, evet-hayır) olması durumunda kullanılan kesikli bir olasılık dağılımıdır.", strong("Binom dağılımı ise n kez tekrarlanan Bernoulli deneylerinden oluşmaktadır."), "Bernoulli dağılımında deney bir kez yapılarak başarılı olma/olmama durumu ile ilgilenirken binom dağılımı rastgele deney aynı koşullar altında n kez tekrarlanır. Diğer bir ifadeyle, eğer deney birden fazla ve bağımsız olarak tekrarlanılıp ve başarılı olma durumu ile ilgilenilirse o zaman Bernoulli dağılımının özel bir durumu olan Binom dağılımının kullanılması gerekmektedir. Eğer binom dağılımında denemelerin sayısı sonsuzsa Poisson dağılımına evrilir. Binom dağılımında kullanılan parametreler Tablo 1’de verilmiştir. Binom dağılımında n denemelerin sayısı göstermek üzere n>1’den büyük iken Bernoulli dağılımında n=1’dir.",style = "font-size: 14pt;font-family: Charm"),
fluidRow(
box(title = strong("Grafik"),status = "primary", solidHeader = TRUE,
collapsible = TRUE,plotOutput("plot1", height = 475)),
box(
title = strong("Kontrol Parametreleri"),status = "primary", solidHeader = TRUE,
collapsible = TRUE,
sliderInput(inputId="s", label="Değerler sabiti (set.seed)",min=0, max=1000, value = 0),
sliderInput("n", "Gözlemlerin sayısı (n):", 1, 1000, 50),
sliderInput("size", "Denemelerin sayısı (s)", 1, 1000, 50),
sliderInput("prob", "Başarı olasılığı (p)", 0.01, 1, 0.01),
useShinyalert(),
actionButton(inputId = "cal" ,width =270 ,label = helpText(strong("Uygula"),style = "color:white;font-family: Georgia"),style='padding:6px; font-size:110%', class="btn-primary btn-lg active"),
downloadBttn("veri", label=helpText(strong("İndir"),style = "color:white;font-family: Georgia"),style="stretch",block = F, color="primary", size="sm")),
)
)
)
server <- shinyServer(function(input, output, session) {
iv <- InputValidator$new()
iv$add_rule("prob", sv_gt(0, message_fmt = "Başarı olasılığını 0'dan büyük olarak belirleyiniz!"))
iv$enable()
cast <- eventReactive(input$cal,{
set.seed(input$s)
n=input$n
size = input$size
prob =input$prob
y=tibble(Sayi=rbinom(n,size,prob))
y
})
output$plot1 <- renderPlot({
m=ggplot(cast(), aes(x=Sayi)) +
geom_histogram(aes(y=..density..),bins=100,binwidth=.3, fill="red")+
theme_hc()+
ggtitle(paste("Binom Olasılık Dağılımı"," (p=",round(input$prob,2),", ","n=",input$n,", ","s=",input$size,")", sep=""))+
xlab("Denemelerin Sayısı")+
ylab("Olasılık")+
theme(plot.title = element_text(hjust = 0.5, size=25, face="bold"))+
theme(axis.text=element_text(size=15))+
theme(axis.title.x = element_text(size=18, colour="black", face="bold"))+
theme(axis.title.y = element_text(size=18, colour="black", face="bold"))
m
})
observeEvent(input$cal, {
shinyalert(title = "Her şey yolunda gözüküyor", type = "success")
})
output$veri <- downloadHandler(
filename = function() {
paste("veri", ".csv", sep = "")
},
content = function(file) {
write.csv(cast(), file, row.names = FALSE)
}
)
})
shinyApp(ui, server)