Senin, 25 Mei 2020

Kapan Puncak Covid19 di Indonesia ?

Prediksi Covid19, kapan mencapai puncaknya?

Selamat Idhul Fitri from Home, menjawab pertanyaan kapan covid19 mencapai puncaknya? Atau kapan grafiknya melandai? Kalau ada pejabat yang mengatakan, kita sudah mulai lega karena R0(RNol) sudah mendekati 1(satu). Apa artinya? Dan benarkah itu?

Mbak Mona waspada Covid19


Apa itu R0?
Grafik covid19 akan melandai atau mencapai puncaknya, jika factor R0 mendekati satu atau kurang dari satu. Sebagai contoh mudahnya jika factor R0 =3, artinya satu orang pertama akan menulari 3 orang lain, dan seterusnya berantai.  Begitu juga jika R0=2, nah jika R0 lebih kecil dari satu atau negative  itu artinya covid19 berhenti.
Grafik Prediksi Covid19, 150 hr ke depan

Rabu, 15 April 2020

Gejala utama infeksi Covid19

Gejala utama infeksi Covid19

Gejala apa yang paling dominan menentukan bahwa seseorang terjangkit covid19? apakah demam?mual?pusing?. untuk menjawab pertanyaan ini, saya coba menganalisa
data  yang dikumpulkan dari sekitar 1.700 respondent dari sebuah aplikasi Covid Tracker.

Diagram Venn

Data dalam file excel "symptoms.xlsx". Dengan metode klustering biasa tentu akan susah melihatnya meskipun bisa digambarkan dengan diagram VEN. Dengan coding R dihasilkan  grafik yang lebih mudah dilihat dan dianalisa.
Ranking gejala Covid19



library(tidyverse)
library(here)
library(janitor)
library(socviz)
library(ggrepel)

## --------------------------------------------------------------------
## Custom font and theme, omit if you don't have the myriad library
## (https://github.com/kjhealy/myriad) and associated Adobe fonts.
## --------------------------------------------------------------------
library(showtext)
showtext_auto()
library(myriad)

#import_myriad_semi()
#theme_set(theme_myriad_semi())
symptoms <- c("Anosmia", "Cough", "Fatigue", "Diarrhea", "Breath", "Fever")
names(symptoms) <- symptoms

dat <- readxl::read_xlsx("D:/R-BLOGGER/covid_symptoms-master/data/symptoms.xlsx")
dat %>% print(n = nrow(dat))

##head(dat)
## A tibble: 6 x 2
##  combination count
##  <chr>       <dbl>
##1 Anosmia       140
##2 Cough          57
##3 Fatigue       198
##4 Diarrhea       12
##5 Breath          5
##6 Fever          11

subsets <- dat$combination
##subsets
## [1] "Anosmia"                                     "Cough"                                   
## [3] "Fatigue"                                     "Diarrhea"                                 
## [5] "Breath"                                      "Fever"                                   
## [7] "Cough&Fatigue"                               "Fatigue&Fever"                           
## [9] "Breath&Fatigue"                              "Diarrhea&Fatigue"                         
##[11] "Anosmia&Fatigue"                             "Breath&Cough"
##............................
##[31] "Anosmia&Breath&Cough&Diarrhea&Fatigue&Fever" ##"Anosmia&Cough&Diarrhea&Fatigue&Fever" 

symptom_mat <- map_dfc(subsets, str_detect, symptoms) %>%
    data.frame() %>%
    t() %>%
    as_tibble()

##symptom_mat
##A tibble: 32 x 6
##   V1    V2    V3    V4    V5    V6 
##   <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
## 1 TRUE  FALSE FALSE FALSE FALSE FALSE
## 2 FALSE TRUE  FALSE FALSE FALSE FALSE
## 3 FALSE FALSE TRUE  FALSE FALSE FALSE
## 4 FALSE FALSE FALSE TRUE  FALSE FALSE
## 5 FALSE FALSE FALSE FALSE TRUE  FALSE

colnames(symptom_mat)  <- symptoms
symptom_mat$count <- dat$count
symptom_mat %>% print(n = nrow(symptom_mat))

indvs <- symptom_mat %>%
    uncount(count)

##head(indvs)
## A tibble: 1,764 x 6
##   Anosmia Cough Fatigue Diarrhea Breath Fever
##   <lgl>   <lgl> <lgl>   <lgl>    <lgl>  <lgl>
## 1 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
## 2 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
##3 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
##4 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
##5 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
## 6 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
## 7 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
## 8 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
## 9 TRUE    FALSE FALSE   FALSE    FALSE  FALSE
##10 TRUE    FALSE FALSE   FALSE    FALSE  FALSE

library(ComplexUpset)
upset(indvs, symptoms,
      name="Frekuensi Gejala Utama COVID19. Data total 1,764 individuals.",
      min_size = 0,
      width_ratio = 0.100) +
    labs(title = "Kombinasi COVID-19 Symptoms",
         caption = "File data: covid.joinzoe.com/us, recrafted by Bambangpe" )

Kesimpulan:
Mengamati grafik batang di atas, dengan mudah disimpulkan bahwa gejala utama terjangkit covid19 dpt dirangking sbb:
1. Kehilangan indera penciuman (atau "Anosmia") + fatigue(lemah) tampaknya menjadi gejala umum Covid19 total ada 281
2. Gejala fatigue(lemah)+Anosmia+Cough(batuk2) menempati urutan kedua dengan total 259
3. Gejala tubuh lemah juga sudah mengindikasi terkena covid19 dengan total 198
4. Dst

link:
https://rpubs.com/bambangpe/601238
https://bambangpe.shinyapps.io/covid19-prediction/

Minggu, 05 Januari 2020

Dampak saham Boeing akibat jatuhnya Lion Air JT610

Dampak saham Boeing akibat jatuhnya Lion Air JT610.

Setelah Lion Air JT610 jatuh di perairan Krawang sekitar Jakarta hari Senin 29 Oktober 2018
, saya mencoba menengok saham Boeing, apa dampaknya?.

Lion Air JT 610 crash

Selanjutnya saya mencoba membandingkan dengan Saham Airbus sebagai saingannya, berikut saya tuliskan R scriptnya dalam file RMarkdown dan saya upload di web Rpubs.
Chart Sham Boeing



Senin, 04 November 2019

R Gadget

R programming mudah di aplikasikan di gadget, di sini akan diberikan contoh sederhana aplikasi  R programming untuk gadget.


Berikut script R nya:


Script ui.R
library(shiny)
library(miniUI)
library(leaflet)
library(ggplot2)

ui <- miniPage(
  gadgetTitleBar("Example R in Gadget"),
  miniTabstripPanel(
    miniTabPanel("Parameters", icon = icon("sliders"),
      miniContentPanel(
        sliderInput("year", "Year", 1978, 2010, c(2000, 2010), sep = "")
      )
    ),
    miniTabPanel("Visualize", icon = icon("area-chart"),
      miniContentPanel(
        plotOutput("cars", height = "100%")
      )
    ),
    miniTabPanel("Map", icon = icon("map-o"),
      miniContentPanel(padding = 0,
        leafletOutput("map", height = "100%")
      ),
      miniButtonBlock(
        actionButton("resetMap", "Reset")
      )
    ),
    miniTabPanel("Data", icon = icon("table"),
      miniContentPanel(
        DT::dataTableOutput("table")
      )
    )
  )
)

Script server.R


library(shiny)
library(miniUI)
library(leaflet)
library(ggplot2)

server <- function(input, output, session) {
  output$cars <- renderPlot({
    require(ggplot2)
    ggplot(cars, aes(speed, dist)) + geom_point()
  })

  output$map <- renderLeaflet({
    force(input$resetMap)

    leaflet(quakes, height = "100%") %>% addTiles() %>%
      addMarkers(lng = ~long, lat = ~lat)
  })

  output$table <- DT::renderDataTable({
    diamonds
  })

  observeEvent(input$done, {
    stopApp(TRUE)
  })
}

Setelah di upload di server shiny.io, maka hasilnya dapat dilihat di gadget


Referensi:
Health prediction
Education
Rstudio
Kursus R

Kamis, 17 Oktober 2019

Gadged dan Machine Learning


Melanjutkan R gadget sebelumnya, kali ini akan diberikan contoh Analisa Modeling menggunakan R programming yang mudah dibaca lewat smartphone, analisa menggunakan data  'Housing Values in Suburbs of Boston' menentukan variable yang paling berpengaruh(Variable Important) terhadap nilai perumahan.

Sebuah contoh penggunaan Machine Learning dengan R programming yang mudah dipelajari dan mudah di aplikasi. 




Seperti biasa file terdiri dari file ui dan file server, scriptnya sbb:

ui.R
 ui <-
    miniPage(
    gadgetTitleBar("Boston Analytic, simple way finding Variable Importance"),
  miniTabstripPanel(
    miniTabPanel("Data", icon = icon("table"),
      miniContentPanel(     
       dataTableOutput("data"))),
    #---keterangan
    miniTabPanel("About Boston Data", icon = icon("list-alt"),
      miniContentPanel(     
       dataTableOutput("About"),
         h3(strong('Housing Values in Suburbs of Boston')),
               # p('Housing Values in Suburbs of Boston',align = 'Justify'),
p('Description : The Boston data frame has 506 rows and 14 columns.',align = 'Justify'),
p('Usage : Boston',align = 'Justify'),
p('Format : This data frame contains the following columns:',align = 'Justify'),
p('1. crim : per capita crime rate by town.',align = 'Justify'),
p('2. zn : proportion of residential land zoned for lots over 25,000 sq.ft.',align = 'Justify'),
p('3. indus : proportion of non-retail business acres per town.',align = 'Justify'),
p('4. chas : Charles River dummy variable (= 1 if tract bounds river; 0 otherwise).',align = 'Justify'),
p('5. nox : nitrogen oxides concentration (parts per 10 million).',align = 'Justify'),
p('6. rm : average number of rooms per dwelling.',align = 'Justify'),
p('7. age : proportion of owner-occupied units built prior to 1940.',align = 'Justify'),
p('8. dis : weighted mean of distances to five Boston employment centres.',align = 'Justify'),
p('9. rad : index of accessibility to radial highways.',align = 'Justify'),
p('10. tax : full-value property-tax rate per 10,000 dollar.',align = 'Justify'),
p('11. ptratio : pupil-teacher ratio by town.',align = 'Justify'),
p('12. black : 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town.',align = 'Justify'),
p('13. lstat : lower status of the population (percent).',align = 'Justify'),
p('14. medv : median value of owner-occupied homes per 1000s dollar.',align = 'Justify'))),

    #
     miniTabPanel("Plot Model",icon = icon("area-chart"),
    miniContentPanel(
       plotOutput("model"))),

    miniTabPanel("Variable Important",icon = icon("area-chart"),
       miniContentPanel(     
        verbatimTextOutput(("var_importance")))),
   
    miniTabPanel("Variable imp",icon = icon("table"),
       miniContentPanel(     
    plotOutput("pg")))
  ))


server.R

library(shiny)
library(miniUI)
library(ggplot2)
library(dplyr)
library(MASS)
library(randomForest)

data <- Boston
data
dt1 <- data[ ,-4]
dt1
spl <- sample(nrow(dt1),nrow(dt1)*0.7)
train <- dt1[spl, ]
test <- dt1[-spl, ]

model <- randomForest(medv~., data = train)

pmod <- plot(model)
pmod+theme_linedraw()
pmod

pm <- summary(model)
pm

pv <- varImpPlot(model)
pv

var_importance <- data_frame(variable = setdiff(colnames(train), "medv"),
                             importance = as.vector(importance(model)))
var_importance <- arrange(var_importance, desc(importance))
#var_importance
var_importance$variable <- factor(var_importance$variable, levels=var_importance$variable)
pg <- ggplot(data = var_importance, aes(x = variable, y = importance))+
  geom_bar(stat = "identity")+ggtitle("Varible Importance")+theme_linedraw()
pg

server <- function(input, output, session) {
   
  output$data <- renderDataTable({
    data
  })
     output$model <- renderPlot({
    plot(model)
  })
    output$var_importance<- renderPrint({
    var_importance
  })
   output$pg <- renderPlot({
    pg
  })
    observeEvent(input$done, {
    stopApp(TRUE)
  })
}

Selanjutnya tinggal di upload di server shiny, file dibuat untuk versi gadget.

Referensi:
Kursus R programming


Senin, 26 Agustus 2019

R programming dalam dunia kedokteran

R programming mempermudah dunia kedokteran




Dari yang paling sederhana seperti perhitungan BMI(Body Mass Index) sampai tindakan medis yang menggunakan lengan robot. Semua itu berangkat dari analisa dataset yang hanya terdiri dari beberapa variable sampai tidak terbatas jumlahnya. 
Contoh script BMI dengan R programming:

Kamis, 16 Mei 2019

Model H2O untuk analisa fraud

Melanjutkan postingan sebelumnya, di sini akan digunakan model H2O.

Apa yang membuat H2O lebih cepat?
H2O memiliki fitur yang bersih dan jelas untuk langsung menghubungkan tool baik R atau Python, dengan CPU yang ada di mesin anda. Dengan cara ini kita dapat menyalurkan lebih banyak memori, memproses dengan tool yang ada di R atau Python untuk membuat perhitungan lebih cepat.  Package H2O memungkinkan perhitungan berlangsung pada kapasitas CPU 100% . Di samping itu H2O juga dapat dihubungkan dengan cluster di platform cloud untuk melakukan perhitungan. H2O dapat mengkompresi data yang besar, juga melakukan proses secara paralel.
Fraud illustration


Split data
Data displit menjadi 3 bagian, 2 bagian train data dan 1 bagian test data.

splits <- h2o.splitFrame(creditcard_hf,
                         ratios = c(0.4, 0.4),
                         seed = 42)
train_unsupervised  <- splits[[1]]
train_supervised  <- splits[[2]]
test <- splits[[3]]
response <- "Class"
features <- setdiff(colnames(train_unsupervised), response)

Autoencoder
Pertama, menggunakan deep leatning autoencouder pada train_unsupervised  kita cukup mengatur autoencoder = TRUE.
Di sini, dipakai teknik "bottleneck", di mana lapisan tersembunyi di tengah sangat kecil. Ini berarti bahwa model harus dikurangi  dimensinay(dalam hal ini, hingga 2 node / dimensi).
Model autoencoder kemudian akan mempelajari pola input data terlepas dari label kelas yang diberikan. Akan dilihat transaksi credit card  mana yang serupa dan transaksi mana yang outlier atau anomali.

model_nn <- h2o.deeplearning(x = features,
                             training_frame = train_unsupervised,
                             model_id = "model_nn",
                             autoencoder = TRUE,
                             reproducible = TRUE, 
                             #slow - turn off for real problems
                             ignore_const_cols = FALSE,
                             seed = 42,
                             hidden = c(10, 2, 10),
                             epochs = 100,
                             activation = "Tanh")

Simpan model
h2o.saveModel(model_nn, path="model_nn", force = TRUE)
model_nn <- h2o.loadModel("model_nn")
model_nn
## Model Details:
## H2OAutoEncoderModel: deeplearning
## Model ID:  model_nn
## Status of Neuron Layers: auto-encoder, gaussian distribution, Quadratic loss, 776 weights/biases, 16.0 KB, 2,622,851 training samples, mini-batch size 1
##   layer units  type dropout       l1       l2 mean_rate rate_rms momentum
## 1     1    34 Input  0.00 %                                             
## 2     2    10  Tanh  0.00 % 0.000000 0.000000  0.709865 0.320108 0.000000
## 3     3     2  Tanh  0.00 % 0.000000 0.000000  0.048458 0.109033 0.000000
## 4     4    10  Tanh  0.00 % 0.000000 0.000000  0.164717 0.192053 0.000000
## 5     5    34  Tanh         0.000000 0.000000  0.369681 0.425672 0.000000
##   mean_weight weight_rms mean_bias bias_rms
## 1                                         
## 2   -0.039307   0.691302  0.008052 0.965178
## 3   -0.097383   0.314106  0.226376 0.067917
## 4    0.227664   1.089589  0.112032 0.672444
## 5    0.011072   0.605586  0.091124 0.722602
##
## H2OAutoEncoderMetrics: deeplearning
## ** Reported on training data. **
##
## Training Set Metrics:
## MSE: (Extract with `h2o.mse`) 0.001472071
## RMSE: (Extract with `h2o.rmse`) 0.03836757
#Convert to autoencoded representation

test_autoenc <- h2o.predict(model_nn, test)

Reduce hidden layers dimension
Karena saya telah menggunakan model bottleneck dengan dua node di lapisan tersembunyi di tengah, kita dapat menggunakan pengurangan dimensi ini untuk menjelajahi ruang fitur kami (mirip dengan apa yang bisa kami lakukan dengan analisis komponen utama). Kami dapat mengekstrak fitur tersembunyi ini dengan fungsi h2o.deepfeatures () dan memplotnya untuk menunjukkan representasi data input yang berkurang.


Kapan Puncak Covid19 di Indonesia ?

Prediksi Covid19, kapan mencapai puncaknya? Selamat Idhul Fitri from Home, menjawab pertanyaan kapan covid19 mencapai puncaknya? ...