Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.25 KB | None | 0 0
  1. ---
  2. output:
  3. html_document:
  4. number_sections: yes
  5. word_document: default
  6. editor_options:
  7. chunk_output_type: console
  8. ---
  9. ************************************************************************************************************
  10. Week : 13
  11. Title : Text Mining
  12. Nama : Vinson Phoan
  13. NIM : 00000029963
  14. Date : 2019-10
  15. Asisten : tan thing heng
  16. Waktu : Max 200 menit
  17. ***************************************************************************************************************
  18.  
  19. ***************************************************************************************************************
  20.  
  21.  
  22. SOAL 1 Analisis News
  23. --------------------------------------------
  24.  
  25. a. Dapatkan data dari asisten anda 20news-bydate.tar. Extract di direktori d:\datatest
  26.  
  27. b. baca seluruh file berita, tampilkan dalam bentuk grafik
  28. c. cleansing newsgroup untuk artikel 1 sd 100 saja
  29. Hasil setelah cleansing kata yang paling tinggi adalah base
  30. d. buat tf_idf temukan kata terbanyak pada kelompok berita
  31. d1. sci.crypt adalah encryption
  32. d2. sci.space adalah orbit
  33. e. cari korelasi newsgroup item1= rec.sport.baseball dan korelasi dibawah 0.1
  34. jawab snack
  35.  
  36.  
  37. **Jawaban**
  38.  
  39. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  40.  
  41. #---------------------a-----------------------------
  42. library(lubridate)
  43. library(ggplot2)
  44. library(dplyr)
  45. library(readr)
  46. library(tidyr)
  47. library(tidytext)
  48. library(stringr)
  49. library(purrr)
  50. library(broom)
  51. library(scales)
  52. library(widyr)
  53. library(ggraph)
  54. library(igraph)
  55.  
  56. training_folder <- "20news-bydate-train/"
  57. # Define a function to read all files from a folder into a data frame
  58. read_folder <- function(infolder) {
  59. tibble(file = dir(infolder, full.names = TRUE)) %>%
  60. mutate(text = map(file, read_lines)) %>%
  61. transmute(id = basename(file), text) %>%
  62. unnest(text)
  63. }
  64.  
  65. #------------------------b-----------------------------
  66. raw_text <- tibble(folder = dir(training_folder, full.names = TRUE)) %>% mutate(folder_out = map(folder, read_folder)) %>% unnest(cols = c(folder_out)) %>% transmute(newsgroup = basename(folder), id, text)
  67. raw_text
  68.  
  69. raw_text %>%
  70. group_by(newsgroup) %>%
  71. summarize(messages = n_distinct(id)) %>%
  72. ggplot(aes(newsgroup, messages)) +
  73. geom_col() +
  74. coord_flip()
  75.  
  76. #---------------------c-----------------------------
  77.  
  78. cleaned_text <- raw_text %>%
  79. group_by(newsgroup, id) %>%
  80. filter(cumsum(text == "") > 0,
  81. cumsum(str_detect(text, "^--")) == 0) %>%
  82. ungroup()
  83. cleaned_text <- cleaned_text %>%
  84. filter(str_detect(text, "^[^>]+[A-Za-z\\d]") | text == "",
  85. !str_detect(text, "writes(:|\\.\\.\\.)$"),
  86. !str_detect(text, "^In article <"),
  87. !id %in% c(9704, 9985))
  88. #membersihkan stopword
  89.  
  90. usenet_words <- cleaned_text %>%
  91. unnest_tokens(word, text) %>%
  92. filter(str_detect(word, "[a-z']$"),
  93. !word %in% stop_words$word)
  94.  
  95. usenet_words <- cleaned_text %>%
  96. unnest_tokens(word, text) %>%
  97. filter(str_detect(word, "[a-z']$"),
  98. !word %in% stop_words$word)
  99. usenet_words %>%
  100. count(word, sort = TRUE)
  101. #------------------------d-----------------------------
  102. tf_idf <- words_by_newsgroup %>%
  103. bind_tf_idf(word, newsgroup, n) %>%
  104. arrange(desc(tf_idf))
  105. tf_idf
  106.  
  107. tf_idf %>%
  108. filter(str_detect(newsgroup, "^sci\\.")) %>%
  109. group_by(newsgroup) %>%
  110. top_n(12, tf_idf) %>%
  111. ungroup() %>%
  112. mutate(word = reorder(word, tf_idf)) %>%
  113. ggplot(aes(word, tf_idf, fill = newsgroup)) +
  114. geom_col(show.legend = FALSE) +
  115. facet_wrap(~ newsgroup, scales = "free") +
  116. ylab("tf-idf") +
  117. coord_flip()
  118.  
  119. #encryption
  120. #orbit
  121. #----------------------------e----------------------------
  122.  
  123. newsgroup_cors <- words_by_newsgroup %>%
  124. pairwise_cor(newsgroup, word, n, sort = TRUE)
  125. newsgroup_cors
  126.  
  127. set.seed(2017)
  128. newsgroup_cors %>%
  129. filter(correlation < .1) %>%
  130. graph_from_data_frame() %>%
  131. ggraph(layout = "fr") +
  132. geom_edge_link(aes(alpha = correlation, width = correlation)) +
  133. geom_node_point(size = 6, color = "lightblue") +
  134. geom_node_text(aes(label = name), repel = TRUE) +
  135. theme_void()
  136.  
  137. ```
  138.  
  139. Soal 2. Twitters
  140. ----
  141.  
  142. a. baca data tweet Julia dan Dave
  143. b. tampilkan grafik distribusi twwets mereka berdua.
  144. siapa yang menggunakan kata-kata lebih tidak bervariasi
  145. jawab: david
  146. c. cleansing data
  147. d. cari kata yang paling sering digunakan
  148. d1. David saja adalah @hadleywickham
  149. d2. Julia saja adalah @selkie1970
  150. d3. David dan Julia adalah @accidentalart
  151. e. batasin data dari 1/1/16 sd 1/6/2016 kemudian buat grafik perbandingan
  152. tweets Julia melawan David
  153. Julia paling unggul pada kata base
  154. David paling unggul pada kata utan
  155.  
  156. ```{R}
  157.  
  158. #---------------------a-----------------------------
  159.  
  160. tweets_julia <- read_csv("tweets_julia.csv")
  161. tweets_dave <- read_csv("tweets_dave.csv")
  162. #------------------------b-----------------------------
  163. tweets <- bind_rows(tweets_julia %>%
  164. mutate(person = "Julia"),
  165. tweets_dave %>%
  166. mutate(person = "David")) %>%
  167. mutate(timestamp = ymd_hms(timestamp))
  168.  
  169. ggplot(tweets, aes(x = timestamp, fill = person)) +
  170. geom_histogram(position = "identity", bins = 20, show.legend = FALSE) +
  171. facet_wrap(~person, ncol = 1)
  172.  
  173. #---------------------c-----------------------------
  174. remove_reg <- "&amp;|&lt;|&gt;"
  175. tidy_tweets <- tweets %>%
  176. filter(!str_detect(text, "^RT")) %>%
  177. mutate(text = str_remove_all(text, remove_reg)) %>%
  178. unnest_tokens(word, text, token = "tweets") %>%
  179. filter(!word %in% stop_words$word,
  180. !word %in% str_remove_all(stop_words$word, "'"),
  181. str_detect(word, "[a-z]"))
  182. #------------------------d-----------------------------
  183.  
  184. frequency <- tidy_tweets %>%
  185. group_by(person) %>%
  186. count(word, sort = TRUE) %>%
  187. left_join(tidy_tweets %>%
  188. group_by(person) %>%
  189. summarise(total = n())) %>%
  190. mutate(freq = n/total)
  191. frequency
  192. #@hadleywickham
  193. #@selkie1970
  194.  
  195. frequency <- frequency %>%
  196. select(person, word, freq) %>%
  197. spread(person, freq) %>%
  198. arrange(Julia, David)
  199. frequency
  200. #@accidentalart
  201.  
  202. ggplot(frequency, aes(Julia, David)) +
  203. geom_jitter(alpha = 0.1, size = 2.5, width = 0.25, height = 0.25) +
  204. geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  205. scale_x_log10(labels = percent_format()) + scale_y_log10(labels = percent_format()) +
  206. geom_abline(color = "red")
  207.  
  208. #----------------------------e----------------------------
  209. tidy_tweets <- tidy_tweets %>%
  210. filter(timestamp >= as.Date("2016-01-01"),
  211. timestamp < as.Date("2016-06-01"))
  212.  
  213. word_ratios <- tidy_tweets %>%
  214. filter(!str_detect(word, "^@")) %>%
  215. count(word, person) %>%
  216. group_by(word) %>%
  217. filter(sum(n) >= 10) %>%
  218. ungroup() %>%
  219. spread(person, n, fill = 0) %>%
  220. mutate_if(is.numeric, list(~(. + 1) / (sum(.) + 1))) %>%
  221. mutate(logratio = log(David / Julia)) %>%
  222. arrange(desc(logratio))
  223. word_ratios %>%
  224. arrange(abs(logratio))
  225.  
  226. word_ratios %>%
  227. group_by(logratio < 0) %>%
  228. top_n(15, abs(logratio)) %>%
  229. ungroup() %>%
  230. mutate(word = reorder(word, logratio)) %>%
  231. ggplot(aes(word, logratio, fill = logratio < 0)) +
  232. geom_col(show.legend = FALSE) +
  233. coord_flip() +
  234. ylab("log odds ratio (David/Julia)") +
  235. scale_fill_discrete(name = "", labels = c("David", "Julia"))
  236. #utan
  237. #base
  238.  
  239. ```
  240.  
  241. ***************************************************************************************************************
  242. Good luck
  243. ***************************************************************************
  244.  
  245. ---
  246. output:
  247. html_document:
  248. number_sections: yes
  249. word_document: default
  250. editor_options:
  251. chunk_output_type: console
  252. ---
  253. ************************************************************************************************************
  254. Week : 12
  255. Title : Text Mining
  256. Nama : Vinson Phoan
  257. NIM : 00000029963
  258. Date : 2019-10
  259. Asisten : tan thing heng
  260. Waktu : Max 200 menit
  261. ***************************************************************************************************************
  262. FILE UNTUK Mahasiswa SAJA.
  263. FILE INI BOLEH DIBAGIKAN KEPADA MAHASISWA.
  264. ***************************************************************************************************************
  265.  
  266. ============================================================================
  267.  
  268. SOAL 1 Membandingkan 2 buku
  269. --------------------------------------------
  270.  
  271. a.Buatlah words frequencies analisis (>200words) tentang buku H.G. Wells
  272. b. buatlah words frequencies analisis (>500words) tentang buku Brontë sisters
  273. c. Analisis tingkat kemiripan (similarity) antara kedua buku
  274. Sebutkan/cari:
  275. c1. satu kata yang sering dipakai dengan jumlah yang kira-kira sama adalah txxx (jwb: time)
  276. c2. satu kata yang lebih sering dipakai Wells adalah inXXXXXXX (jawab:
  277. invisible)
  278. c3. satu nama yang lebih sering dipakai Bronte adalah jxxx (jawab: john)
  279. c4. korelasi antara keduanya adalah .....
  280. **Jawaban**
  281.  
  282. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  283. library(gutenbergr) #library
  284. library(dplyr)
  285. library(tidytext)
  286. library(ggplot2)
  287. library(stringr)
  288. library(tidyr)
  289. library(scales)
  290. library(tm)
  291.  
  292. #------------A. analisis word freq HG Wells--------------------
  293.  
  294. hgwells <- gutenberg_download(c(35, 36, 5230, 159)) #download data
  295. tidy_hgwells <- hgwells %>% unnest_tokens(word, text) %>% anti_join(stop_words,by="word")
  296. tidy_hgwells %>% count(word, sort = TRUE)
  297. tidy_hgwells %>% count(word, sort = TRUE) %>% filter(n > 200) %>% mutate(word = reorder(word, n)) %>% ggplot(aes(word, n)) + geom_col() + xlab(NULL) + coord_flip()
  298. #kata time lebih banyak di pakai, jadi buku ini membahas tentang waktu,manusia,pintu
  299. #dan bisa disimpulkan kalau ini membahas tentang ruang waktu
  300. #------------B. analisis word freq Bronte--------------------
  301. bronte <- gutenberg_download(c(1260, 768, 969, 9182, 767))
  302. tidy_bronte <- bronte %>% unnest_tokens(word, text) %>% anti_join(stop_words,by="word")
  303. tidy_bronte %>% count(word, sort = TRUE)
  304. tidy_bronte %>% count(word, sort = TRUE) %>% filter(n > 500) %>% mutate(word = reorder(word, n)) %>% ggplot(aes(word, n)) + geom_col() + xlab(NULL) + coord_flip()
  305. #ada 10 kata yang sama yang ada di dalam nover tersebut
  306.  
  307. #------------c perbandingan
  308.  
  309. #c1. satu kata yang sering dipakai dengan jumlah yang kira-kira sama adalah time
  310. #c2. satu kata yang lebih sering dipakai Wells adalah in.......
  311. #c3. satu nama yang lebih sering dipakai Bronte adalah j...
  312.  
  313. tidy_hgwells %>% count(word, sort = TRUE)
  314. tidy_bronte %>% count(word, sort = TRUE)
  315. tidy_books <- tidy_bronte %>% group_by(word) %>% mutate(linenumber = row_number(), chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]", ignore_case = TRUE)))) %>% ungroup() %>% unnest_tokens(word, text)
  316.  
  317. frequency <- bind_rows(mutate(tidy_bronte, author = "Brontë Sisters"), mutate(tidy_hgwells, author = "Jane Austen")) %>% mutate(word = str_extract(word, "[a-z']+")) %>% count(author, word) %>% group_by(author) %>% mutate(proportion = n / sum(n)) %>% select(-n) %>% spread(author, proportion) %>% gather(author, proportion, `Brontë Sisters`)
  318.  
  319. cor.test(data = frequency[frequency$author == "Brontë Sisters",], ~ proportion + `Jane Austen`)
  320. #korelasi mereka 64%
  321.  
  322. ```
  323.  
  324. Soal 2. Sentimen Analisis
  325. a. Buatlah sentiment analisis pada buku karangan H.G. Wells
  326. b. Buatlah sentiment analisis pada buku karangan Brontë sisters
  327. c. Buatlah perbadingan kata-kata sentimen positif dan negatif yang digunakan dengan lexicon bing! kemudian cari kata-kata berikut ini:
  328. c1. paling positif yg digunakan Wells adalah .... jawab marvel
  329. c2. paling negatif yg digunakan Wells adalah .....jawab invisible
  330. c3. paling positif yg digunakan Bronte adalah ..... jawab love
  331. c4. paling negatif yg digunakan Bronte adalah ..... jawab miss
  332. c5. kata negatif yang paling banyak digunakan oleh kedua penulis adl .....
  333. jawab dark
  334. Jwb
  335.  
  336. ```{R}
  337. #-------------A
  338. #install.packages("textdata") #kalau belum instal
  339. library(textdata)
  340. get_sentiments("bing")
  341.  
  342. library(janeaustenr)
  343. tidy_books <- austen_books() %>%
  344. group_by(book) %>%
  345. mutate(linenumber = row_number(),
  346. chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
  347. ignore_case = TRUE)))) %>%
  348. ungroup() %>%
  349. unnest_tokens(word, text)
  350. jane_austen_sentiment <- tidy_books %>% inner_join(get_sentiments("bing"),by="word") %>%count(book, index = linenumber %/% 80, sentiment) %>% spread(sentiment, n, fill = 0) %>% mutate(sentiment = positive - negative)
  351.  
  352. ggplot(jane_austen_sentiment, aes(index, sentiment, fill = book)) + geom_col(show.legend = FALSE) + facet_wrap(~book, ncol = 2, scales = "free_x")
  353. #-------------B
  354. tidy_books <- austen_books() %>%
  355. group_by(book) %>%
  356. mutate(linenumber = row_number(),
  357. chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
  358. ignore_case = TRUE)))) %>%
  359. ungroup() %>%
  360. unnest_tokens(word, text)
  361. bronte <- tidy_bronte %>% inner_join(get_sentiments("bing"),by="word") %>%count(word, sentiment) %>% spread(sentiment, n, fill = 0) %>% mutate(sentiment = positive - negative)
  362.  
  363.  
  364. #-------------C
  365. #c1. paling positif yg digunakan Wells adalah marvel
  366. #c2. paling negatif yg digunakan Wells adalah invisible
  367. #c3. paling positif yg digunakan Bronte adalah love
  368. #c4. paling negatif yg digunakan Bronte adalah miss
  369. #c5. kata negatif yang paling banyak digunakan oleh kedua penulis adl dark
  370.  
  371. bing_word_counts <- tidy_books %>% inner_join(get_sentiments("bing")) %>% count(word, sentiment, sort = TRUE) %>% ungroup()
  372. bing_word_counts
  373.  
  374. bing_word_counts %>% group_by(sentiment) %>% top_n(10) %>% ungroup() %>% mutate(word = reorder(word, n)) %>% ggplot(aes(word, n, fill = sentiment)) + geom_col(show.legend = FALSE) + facet_wrap(~sentiment, scales = "free_y") + labs(y = "Contribution to sentiment", x = NULL) + coord_flip()
  375.  
  376. ```
  377.  
  378. ***************************************************************************************************************
  379. Good luck
  380. ***************************************************************************
  381.  
  382. ---
  383. editor_options:
  384. chunk_output_type: console
  385. output:
  386. html_document:
  387. number_sections: yes
  388. word_document:
  389. number_sections: yes
  390. pdf_document:
  391. number_sections: yes
  392. ---
  393. ************************************************************************************************************
  394. Week : 11
  395. Title : Time Series Lab
  396. Nama : Vinson Phoan
  397. NIM : 00000029963
  398. Date : 2019-10
  399. Asisten : tan thing heng
  400. Waktu : Max 200 menit
  401. ***************************************************************************************************************
  402. FILE UNTUK MAHASISWA.
  403. ***************************************************************************************************************
  404.  
  405.  
  406. EXPLORATORY DATA ANALYSIS SAHAM BBCA.JK
  407. ===
  408.  
  409. Data: BBCA_JK.csv
  410. Package yang digunakan:
  411.  
  412. * forecast
  413. * tseries
  414. * tidyverse
  415. * nortest
  416. * ggfortify
  417. * readr
  418.  
  419. Perintah:
  420. ---
  421.  
  422. a. Load semua library yang diperlukan.
  423. b. Baca file data **BBCA_JK.csv** dengan **readr::read_csv()** dan save dengan nama obyek **dat**.
  424. c. Tampilkan struktur data, 3 baris pertama data dan 3 baris terakhir data.
  425. d. Buatlah data frame baru bernama **stock** yang diisi dengan data dari kolom Price dan AdjClose. Namakan kolom-kolom ini **date** dan **price**.
  426. e. Split data sehingga data sebesplit(df, as.Date(df$date))lum tahun 2018 menjadi training set dan data mulai tahun 2018 menjadi testing set.
  427. f. Ubahlah data kolom price menjadi tipe time series dari training set data dengan fungsi **stats::ts()** dan save hasilnya dengan nama obyek **train_ts**. Periksalah apakah class obyek yang terbentuk sudah berbentuk time series object.
  428. g. Lakukan eksplorasi data dengan menampilkan plot data. Beri label "Tahun" pada sumbu X, label "Harga per lembar saham" pada sumbu Y dan judul "Harga Saham BCA/ lembar tahun 2011-2017". chron(dates = "02/27/92"
  429. h. Tampilkan summary data. Lakukan pemeriksaan apakah ada missing value. Lakukan pemeriksaan cycle.
  430. i. Lakukan pemeriksaan seasonality dengan menggambarkan boxplot untuk setiap bulan. Berikan judul dan label sumbu yang informatif.
  431. j. Tuliskan kesimpulan dari proses **Exploratory Data Analysis** ini.
  432.  
  433.  
  434.  
  435. **Jawaban**
  436. ---
  437.  
  438. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  439.  
  440. #a---------
  441. library(forecast)
  442. library(tseries)
  443. library(tidyverse)
  444. library(nortest)
  445. library(ggfortify)
  446. library(readr)
  447. library(chron)
  448. library(lmtest)
  449. library(fUnitRoots)
  450. library(fpp2)
  451.  
  452. #b----
  453. dat <- readr::read_csv("BBCA.JK.csv")
  454. #c----
  455. str(dat)
  456. head(dat,3)
  457. tail(dat,3)
  458. #d----
  459. date <- dat$Date
  460. price <- dat$AdjClose
  461. stock <- data.frame(date,price)
  462. #e----
  463.  
  464. stock_train <- stock %>% filter(date < "2018-01-01")
  465. stock_train %>% tail(3)
  466. stock_test <- stock %>% filter(date >= "2018-01-01")
  467. stock_test %>% head(3)
  468.  
  469. #f---
  470.  
  471. train_ts <- stats::ts(stock_train[,2],frequency = 12,start=c(2011, 1))
  472. test_ts <- stats::ts(stock_test[,2],frequency = 12,start=c(2018, 1))
  473.  
  474. class(train_ts) #tipe data adalah ts
  475. class(test_ts) #tipe data adalah ts
  476. str(train_ts)
  477. #train_ts dan test_ts sudah berubah menjadi tipe time series
  478.  
  479. #g------
  480. plot(train_ts, xlab = "Tahun", ylab = "Harga per lembar saham", main = "Harga Saham BCA/ lembar tahun 2011-2017")
  481. #pada plot tersebut setiap tahun harga saham bca naik dan terjadi penurun harga dengan drastis pada tahun 2018
  482. chron(dates = "02/27/92")
  483.  
  484. #h----
  485. summary(train_ts)
  486. cycle(train_ts)
  487. sum(is.na(train_ts))
  488. sum(is.na(test_ts))
  489. #tidak terdapat adanya missing values di data train_ts dan test_ts
  490.  
  491. #i----
  492. boxplot(train_ts~cycle(train_ts),xlab = "Frequency", ylab = "Price", main = "Saham BCA Dalam 12 frekuensi")
  493.  
  494. #j---
  495.  
  496.  
  497. ```
  498.  
  499.  
  500. **TIME SERIES MODELING SAHAM BBCA.JK DENGAN ARIMA**
  501. ============================================================================
  502.  
  503. Data: BBCA_JK.csv
  504. Package yang digunakan:
  505.  
  506. * forecast
  507. * tseries
  508. * tidyverse
  509. * nortest
  510. * ggfortify
  511.  
  512.  
  513. Perintah
  514. ---
  515.  
  516. a. Cek apakah series sudah stasioner. Ingat series yang anda gunakan adalah training set (time series object **train_ts**).
  517. b. Bila series belum stasioner, lakukan langkah-langkah agar series menjadi stasioner.
  518. c. Carilah model ARIMA yang tepat dari langkah (a) dan (b). Gunakan cara manual (plot, uji hipotesa).
  519. d. Buatlah forecast untuk 12 bulan ke depan.
  520. e. Hitung akurasi dengan menggunakan testing set (time series object **test_ts**).
  521.  
  522. **Jawaban**
  523. ---
  524.  
  525. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  526. #a-----------------
  527. adf.test(train_ts)
  528. #data train_ts adalah stationary
  529.  
  530. #b-----------------
  531. #c--------------------------------
  532. components.ts = decompose(train_ts)
  533. plot(components.ts)
  534.  
  535.  
  536. urkpssTest(train_ts, type = c("tau"), lags = c("short"),use.lag = NULL, doplot = TRUE)
  537. tsstationary = diff(train_ts, differences=1)
  538. plot(tsstationary)
  539. acf(train_ts,lag.max=34)
  540. acf(tsstationary, lag.max=34)
  541. pacf(tsstationary, lag.max=34)
  542. fitARIMA <- arima(train_ts, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")
  543.  
  544. coeftest(fitARIMA)
  545. confint(fitARIMA)
  546.  
  547. #box ljung test
  548. acf(fitARIMA$residuals)
  549. library(FitAR)
  550. boxresult = LjungBoxTest(fitARIMA$residuals,k=2,StartLag=1)
  551. plot(boxresult[,3],main= "Ljung-Box Q Test", ylab= "P-values", xlab= "Lag")
  552. qqnorm(fitARIMA$residuals)
  553. qqline(fitARIMA$residuals)
  554. #d----
  555. predict(fitARIMA,n.ahead = 12)
  556. plot(forecast(fitARIMA))
  557.  
  558. #e----
  559.  
  560. arimaMod <- auto.arima(train_ts, stepwise=FALSE, approximation=FALSE)
  561. arimaMod.Fr <-forecast(arimaMod,h=12)
  562.  
  563. plot(arimaMod.Fr)
  564. lines(test_ts, col="red")
  565. legend("topleft",lty=1,bty = "n",col=c("red","blue"),c("testData","ARIMAPred"))
  566.  
  567. ```
  568.  
  569.  
  570. **TIME SERIES FORECASTING SEASONAL AND NON SEASONAL DATA**
  571. ============================================================================
  572. Gunakan package **fpp2** untuk mendapatkan beberapa dataset berikut ini:
  573.  
  574. a. marathon: Winning times (in minutes) for the Boston Marathon Men's Open Division. 1897-2016.
  575. b. qauselec: Total quarterly gas production in Australia (in petajoules) from 1956:Q1 to 2010:Q2.
  576. c. usmelec: Electricity net generation measured in billions of kilowatt hours (kWh).
  577.  
  578. Instruksi:
  579. buatlah prediksi 20 periode berikutnya untuk masing-masing dataset di atas.
  580.  
  581. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  582.  
  583. #------------marathon-------------------------
  584. class(marathon)
  585. fitARIMA2 <- arima(marathon, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")
  586. predict(fitARIMA2,n.ahead = 20)
  587. plot(forecast(fitARIMA2))
  588. #prediksi dalam 20 periode akan terjadi stabil
  589.  
  590. #------------qauselec--------------------------
  591. class(qauselec)
  592. fitARIMA3 <- arima(qauselec, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")
  593. predict(fitARIMA3,n.ahead = 20)
  594. plot(forecast(fitARIMA3))
  595. #dalam 20 periode akan tetap naik
  596.  
  597. #------------usmelec--------------------------
  598.  
  599. class(usmelec)
  600. fitARIMA4 <- arima(usmelec, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")
  601. predict(fitARIMA4,n.ahead = 20)
  602. plot(forecast(fitARIMA4))
  603. #akan naik turun
  604. ```
  605.  
  606.  
  607. ***************************************************************************************************************
  608. Good luck
  609. ***************************************************************************
  610. #Axeeh Maxkx, lni!
  611.  
  612. ---
  613. editor_options:
  614. chunk_output_type: console
  615. output:
  616. pdf_document: default
  617. html_document:
  618. number_sections: yes
  619. word_document: default
  620. ---
  621. ************************************************************************************************************
  622. Week : 10
  623. Title : Time Series Analysis
  624. Nama : Vinson Phoan
  625. NIM : 00000029963
  626. Date : 2019-10
  627. Asisten : tan thing heng
  628. Waktu : Max 200 menit
  629. ***************************************************************************************************************
  630. FILE UNTUK MAHASISWA
  631. ***************************************************************************************************************
  632.  
  633.  
  634. # SOAL 1 Latihan Dasar Pemeriksaan data
  635.  
  636.  
  637. tempdub berisi data Average Monthly Temperatures, Dubuque, Iowa
  638. 1a. Periksa apakah data ini memiliki format time series? Jawab .....Ya
  639. 1b. Kalau ya, berapa frekuensinya? .....12 bulan
  640. 1c. Berapa suhu maximum rata-rata di Iowa per bulannya? ..... 74
  641. 1d. Kapan terjadi suhu minimum rata-rata di Iowa per bulannya? ..... Jan 1970
  642. 1e. Buat boxplot. Tentukan bulan dengan suhu rata-rata tertinggi .....Juli
  643. judul="Average Monthly Temperatures", sumbuX=Periode, sumbuY=Suhu.
  644.  
  645.  
  646. # Jawaban
  647.  
  648. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  649. #load library dan data yang diperlukan di sini
  650. library(TSA)
  651. #1a---------
  652. data(tempdub)
  653. class(tempdub)
  654. #ya jawabannya ts jadi data ini time series
  655.  
  656. #1b--------
  657. frequency(tempdub)
  658. #frekuensinya adalah 12
  659.  
  660. #1c---------
  661. summary(tempdub)
  662. # maximumnya kita bisa lihat adalah 74
  663. #1d---------
  664.  
  665. min(tempdub)
  666. #tempdub nya adalah 8.4 dan kita view data tempdub nya 8.4 berada di tahun 1970
  667. #jadi tahun 1970
  668.  
  669. #1e---------
  670. boxplot(tempdub~cycle(tempdub),main = "Average Monthly Temperatures", xlab = "Periode", ylab = "Suhu")
  671. #kita bisa melihat bawha trend grapfiknya seperti gunung
  672. ```
  673.  
  674. # Soal 2. Stasioner or Non stasioner
  675.  
  676.  
  677. 2a. gunakan library TSA kemudian uji apakah dataset-dataset ini merupakan time series? apakah stationer?
  678. 2a. dataset tempdub dari package TSA
  679. 2b. dataset color dari package TSA
  680. 2c. Membuat Model ARIMA dengan nama arima hanya untuk dataset diatas yang stationary saja. Tentukan a) fungsi Y(y1,y2) b) parameter ARIMA
  681. 2d. Periksa apakah model arima di atas fit? Jawab: .......fit
  682. 2e. forecast() dengan 95% confidence interval untuk 1 tahun (12 bulan) kedepan.
  683.  
  684. # Jawaban
  685.  
  686. ```{r, warning = FALSE, message = FALSE}
  687. #load library dan data yang diperlukan di sini
  688. library(tseries)
  689. library(forecast)
  690. #2a---------------------------------
  691. acf(diff(log(tempdub)))
  692. ats <- ts(tempdub,frequency = 12,start =1)
  693. plot(ats)
  694. auto.arima(ts)
  695. #2b---------------------------------
  696. data(color)
  697. acf(diff(log(color)))
  698. #2c----------------------------------
  699. arima <- arima(log(tempdub),c(0,1,1))
  700.  
  701.  
  702. #2d----------------------------------
  703. predict(arima,n.ahead = 10*12)
  704. #2e----------------------------------
  705. forecast(ats,h=12)
  706. ```
  707.  
  708. # Soal 3
  709.  
  710.  
  711. 3a. gunakan dataset larain (Los Angeles Annual Rainfall). Periksa apakah dataset ini stationary?
  712. 3b. Periksa apakah ada missing value?
  713. 3c. Plot larain sumbu y='Curah Hujan', sumbu x='Tahun'
  714. 3d. Bila tidak stasionary, lakukan proses deferensiasi +1
  715. Uji lagi stationary untuk hasil deferensiasi!
  716. Apakah sudah stationary? ya
  717. 3e. Buat model arima dari hasil deferensiasi.periksa apakah model ini fit? ya
  718. Jawab: model ARIMA(4,0,0).
  719. 3f. Buat forecast dari model ARIMA kemudian plot!
  720.  
  721. # Jawaban
  722.  
  723. ```{r, warning = FALSE, message = FALSE}
  724. #load library dan data yang diperlukan di sini
  725.  
  726.  
  727. #3a----
  728. data(larain)
  729.  
  730. #3b----
  731. sum(is.na(larain))
  732. #tidak ada missing value di data larain
  733.  
  734. #3c-----------------------
  735. plot(larain,xlab = "Tahun",ylab = "Curah Hujan")
  736.  
  737. #3d--------------------------
  738. diff <- diff(larain,1)
  739.  
  740.  
  741. adf.test(diff)
  742. # p-value kurang dari 5%, H0 di tolak
  743. #H0 di tolak jadi itu adalah data stationer
  744.  
  745. #3e--------------------------
  746. arimalarain <- auto.arima(diff)
  747.  
  748. #modelnya adalah ARIMA(4,0,0)
  749. plot(arimalarain)
  750. #Residual terlihat tersebar di sekitar 0 sebagai noise.
  751. #Model Arima ini secara fair dikatakan fit
  752.  
  753. #3f-------------------------
  754. forecasts <-forecast(arimalarain, h = 12)
  755.  
  756. plot(forecasts)
  757.  
  758.  
  759.  
  760. ```
  761.  
  762.  
  763.  
  764. ***************************************************************************************************************
  765. Good luck
  766. ***************************************************************************
  767.  
  768. ---
  769. editor_options:
  770. chunk_output_type: console
  771. output:
  772. html_document:
  773. number_sections: yes
  774. pdf_document: default
  775. word_document: default
  776. ---
  777. ************************************************************************************************************
  778. Week : 9
  779. Title : Clustering
  780. Nama : Vinson Phoan
  781. NIM : 00000029963
  782. Date : 2019-10
  783. Asisten : tan thing heng
  784. Waktu : Max 200 menit
  785. ***************************************************************************************************************
  786.  
  787. ***************************************************************************************************************
  788.  
  789.  
  790. **Soal K-means**
  791. ============================================================================
  792.  
  793. SOAL 1
  794. ---
  795.  
  796. Data: w9customers.csv
  797. Package yang digunakan:
  798.  
  799. * NbClust
  800. * factoextra
  801. * ggplot2
  802. * purrr
  803.  
  804. a. Baca data **w9customers.csv** dan save dengan nama obyek **dat**.
  805. b. Tampilkan struktur data dan 5 baris pertama data frame.
  806. c. Tampilkan summary statistics untuk setiap variabel kecuali CustomersID.
  807. d. Buatlah density plot untuk variabel Age, AnnualIncome dan Spending Score. Apakah ada perbedaan Age, AnnualIncome dan SpendingScore pada Gender yang berbeda?
  808. e. Lakukan scale pada data bila diperlukan. Hitunglah banyaknya klaster optimum dengan menggunakan metode Elbow dan Average Silhouette. Gunakan fungsi factoextra::fviz_nbclust dari package factoextra untuk Average Silhouette.
  809. f. Set seed dengan NIM anda. Lakukan kmeans dengan center sesuai dengan hasil perhitungan klaster optimum.
  810. g. Gambarkan cluster yang terbentuk dengan menggunakan warna yang berbeda. Gunakan AnnualIncome sebagai sumbu X dan SpendingScore sebagai sumbu Y.
  811. h. Jelaskan karakteristik klaster yang terbentuk. Hint: gunakan variabel AnnualIncome, SpendingScore.
  812.  
  813.  
  814.  
  815. **Jawaban**
  816.  
  817. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  818. #a---------
  819. #knit to html
  820. #pakai itu bu
  821. library(tinytex)
  822. dat <- read.csv("C:/Users/labc705-36/Downloads/w9customers.csv")
  823.  
  824. #b----
  825. str(dat)
  826. head(dat,5)
  827.  
  828. #c----
  829. summary(dat$Gender)
  830. summary(dat$Age)
  831. summary(dat$AnnualIncomeThou)
  832. summary(dat$SpendingScore)
  833.  
  834. #d----
  835. d <- density(dat$Age)
  836. plot(d)
  837.  
  838. d <- density(dat$AnnualIncomeThou)
  839. plot(d)
  840.  
  841. d <- density(dat$SpendingScore)
  842. plot(d)
  843. #e----
  844.  
  845.  
  846. #Elbow method
  847. ### Use map_dbl to run many models with varying value of k (centers)
  848. tot_withinss <- purrr::map_dbl(1:10, function(k){
  849. # model <- kmeans(x = scaled_dat, centers = k)
  850. model <- kmeans(x = dat[,3:5], centers = k)
  851. model$tot.withinss
  852. })
  853.  
  854. ### Generate a data frame containing both k and tot_withinss
  855. elbow_df <- data.frame(
  856. k = 1:10,
  857. tot_withinss <- tot_withinss
  858. )
  859.  
  860. plot(elbow_df$k, elbow_df$tot_withinss, type = "b", main = "Jumlah klaster optimal")
  861. library(ggplot2)
  862. ggplot2::ggplot(elbow_df, aes(k, tot_withinss)) + geom_line() + scale_x_continuous(breaks = 1:10)
  863.  
  864. library(factoextra)
  865. library(NbClust)
  866. #k = menurut elbow method
  867. fviz_nbclust(dat[3:5], kmeans, method = "wss") +
  868. geom_vline(xintercept = 4, linetype = 2)+
  869. labs(subtitle = "Elbow method")
  870. #optimal k adalah 4
  871.  
  872. #k = menurut average silhouette method
  873. fviz_nbclust(dat[3:5], kmeans, method = "silhouette")+
  874. labs(subtitle = "Silhouette method")
  875. #optimal k adalah 6
  876.  
  877.  
  878. #f kmeans---------
  879.  
  880. set.seed(29963)
  881. km <- kmeans(dat[3:5],4,nstart = 25)
  882.  
  883. #g------
  884. kc1 <- kmeans(dat[3:5], 3)
  885. plot(dat[c("AnnualIncomeThou", "SpendingScore")], col=kc1$cluster)
  886. #h----
  887. #cluster merah spending scorenya mulai dari 0 -100 dan annual income nya kecil yaitu 0-70
  888. #cluster hitam mempunyai spending score yang rendah tetapi annual incomenya mulai dari 80 sampai 140
  889. #cluster hijau mempunyai spending score tinggi dan annualincome juga tinggi
  890.  
  891.  
  892. ```
  893.  
  894.  
  895.  
  896.  
  897. **Soal Hierarchical**
  898. ============================================================================
  899. Disini kita belajar analisis cluster hierarchy menggunakan R
  900. Packages: factoextra
  901. Library:factoextra
  902. Data: iris dataset in R
  903.  
  904. SOAL 2
  905. ---
  906. a ambil data iris pada kolom ketiga namakan mydata
  907. b. Buat dan bandingkan HC dari mydata dengan metode jarak ward dan complete dan buat denderodramnya. Untuk metode complete tandai cluster untuk k=3
  908. c. Buat HC dendrodram top-down dan bottop-up dengan method ward dari mydata di atas.
  909.  
  910. **Jawaban**
  911.  
  912. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  913. #a-----------------
  914. mydata <- iris
  915. #b-----------------
  916.  
  917.  
  918.  
  919. d1 <- dist(mydata[1:4], method = "euclidean")
  920. res.d1 <- hclust(d1, method = "ward.D" )
  921.  
  922. d2 <- dist(mydata[1:4], method = "euclidean")
  923. res.d2 <- hclust(d2, method = "complete" )
  924. # Plot the obtained dendrogram
  925. plot(res.d1, cex = 0.6, hang = -1)
  926. #dendogram ward mempunyai cluster height yang kecil, cluster kiri lebih kecil dari cluster kanan
  927. #ada 5 cluster
  928. plot(res.d2, cex = 0.6, hang = -1)
  929. #dendogram complete kanannya lebih tinggi dari kiri, cluster kanan lebih tinggi dari cluster kiri
  930. #complete ada 6 cluster
  931.  
  932.  
  933. #c--------------------------------
  934. # ------------------------Model AGNES (bottom-up) Agglomerative Nesting (Hierarchical Clustering)
  935. library("cluster")
  936. res.agnes <- agnes(mydata, method = "ward")
  937. res.agnes$ac
  938. # 9913289
  939.  
  940. plot(as.hclust(res.agnes), cex = 0.6, hang = -1)
  941.  
  942. plot(as.dendrogram(res.agnes), cex = 0.6,
  943. horiz = TRUE)
  944.  
  945. #dendogram ini kanannya mempunyai 2 cluster dan paling tinggi
  946. #lebih sedikit cluster
  947.  
  948. # -------------------------MODEL DIANA (top-down) DIvisive ANAlysis Clustering
  949. # Compute diana()
  950.  
  951. res.diana <- diana(mydata)
  952. # Plot the tree
  953. plot(as.hclust(res.diana), cex = 0.6, hang = -1)
  954. # plot.dendrogram()
  955. plot(as.dendrogram(res.diana), cex = 0.6,
  956. horiz = TRUE)
  957.  
  958. #dendogram ini kanannya height nya lebih tinggi
  959. #dan lebih banyak cluster
  960. ```
  961. ***************************************************************************************************************
  962. Good luck
  963. ***************************************************************************
  964. ---
  965. output:
  966. pdf_document:
  967. number_sections: yes
  968. word_document: default
  969. html_document: default
  970. ---
  971. ************************************************************************************************************
  972. Week : 8
  973. Title : Clustering
  974. Nama : Vinson Phoan
  975. NIM : 00000029963
  976. Date : 2019-10
  977. Asisten : tan thing heng
  978. Waktu : Max 200 menit
  979. ***************************************************************************************************************
  980. FILE UNTUK MAHASISWA.
  981. ***************************************************************************************************************
  982.  
  983.  
  984. **Soal K-means**
  985. ============================================================================
  986.  
  987. SOAL 1
  988. ---
  989.  
  990. a. Kopi data *iris* dari package **datasets** ke dalam data frame dengan nama *dat*.
  991. b. Lakukan eksplorasi data dengan menampilkan struktur data.
  992. c. Tampilkan 5 baris pertama data frame.
  993. d. Tampilkan summary statistics.
  994. e. Buatlah boxplot Petal.Width untuk semua Species. Teruskan untuk 3 variabel numerik berikutnya.
  995. f. Pada boxplot manakah spesies tampak terpisah ke dalam klaster yang jelas?
  996. g. Buatlah scatter plot variabel Sepal.Length vs Sepal.Width dan scatter plot Petal.Length vs Petal.Width. Gunakan warna yang berbeda untuk msing-masing species pada kedua scatter plot tersebut.
  997. h. Pada scatter plot manakah pengelompokan spesies terlihat dengan jelas?
  998.  
  999. **Jawaban**
  1000.  
  1001. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  1002. #a---------
  1003.  
  1004. dat <- iris
  1005. #b-----------
  1006. str(dat)
  1007.  
  1008. #c------
  1009. head(dat,5)
  1010. #d----
  1011. summary(dat)
  1012. #e----
  1013. boxplot(dat$Petal.Width~dat$Species,xlab = "species",ylab = "Petal.Width")
  1014. boxplot(dat$Petal.Length~dat$Species,xlab = "species",ylab = "Petal.Length")
  1015. boxplot(dat$Sepal.Width~dat$Species,xlab = "species",ylab = "Sepal.Width")
  1016. boxplot(dat$Sepal.Length~dat$Species,xlab = "species",ylab = "Sepal.Length")
  1017.  
  1018. #f----
  1019. #yang paling mendekati adalah petal length dan width
  1020.  
  1021. #g----
  1022. plot(dat[c("Sepal.Length","Sepal.Width")],col = output$cluster,main ="Sepal.Length vs Sepal.Width")
  1023. plot(dat[c("Petal.Length","Petal.Width")],col = output$cluster,main = "plot Petal.Length vs Petal.Width")
  1024. #h----
  1025. #Petal.Length vs Petal.Width, mereka keliatan terbagi menjadi 3 dan lebih jelas kalau sepal cluster yang gabung dengan cluster lainnya
  1026. ```
  1027.  
  1028. SOAL 2
  1029. ---
  1030.  
  1031. a. Gunakan NIM anda sebagai seed untuk fungsi *set.seed()*.
  1032. b. Gunakan fungsi **stats::kmeans** untuk menerapkan algoritma kmeans dengan 3 klaster dan nstart = 25. Save output dengan nama *output*.
  1033. b. Tampilkan komponen obyek kmeans dengan fungsi *names()*.
  1034. c. Gambarkan scatter plot Petal.Width vs Petal.Length. Gunakan warna yang berbeda untuk masing-masing species hasil klastering. Tampilkan center cluster pada gambar tersebut dengan menggunakan simbol yang berbeda dan warna yang sesuai dengan species.
  1035. d. Ulangi bagian c untuk scatter plot Sepal.Width vs Sepal.Length.
  1036. e. Buatlah confusion matrix untuk membandingkan prediksi klaster dan klaster riilnya.
  1037. f. Algoritma k-means memerlukan input klaster $k$. Berapa jumlah klaster optimum menurut elbow plot di bawah ini? Klaster optimum adalah angka $k$ di mana nilai **total within sum of square** mengalami penurunan drastis lalu melandai. Perlambatan penurunan total within sum of square ini menunjukkan penambahan jumlah klaster tidak banyak membantu mengurangi error.
  1038. g. Jumlah klaster optimum dapat juga ditentukan dari angka $k$ yang memberikan nilai **average silhoutte width** tertinggi. Gunakan fungsi **factoextra::fviz_nbclust()** dari package **factoextra**.
  1039.  
  1040.  
  1041. **Jawaban**
  1042.  
  1043. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  1044. #a---------
  1045. set.seed(29963)
  1046. #b-----------
  1047. output <- stats::kmeans(dat[,1:4], 3, nstart = 25)
  1048. names(output)
  1049. #c-----------
  1050. plot(dat[c("Petal.Length","Petal.Width")],col = output$cluster,pch =output$cluster)
  1051. #d-----------
  1052.  
  1053.  
  1054. plot(dat[c("Sepal.Length","Sepal.Width")],col = output$cluster,pch =output$cluster)
  1055.  
  1056. #e-----
  1057. table(dat$Species,output$cluster)
  1058. #f----
  1059. factoextra::fviz_nbclust(dat[1:4],kmeans,method = "wss")
  1060. #g----
  1061. factoextra::fviz_nbclust(dat[1:4],kmeans,method = "silhouette")
  1062. ```
  1063.  
  1064.  
  1065.  
  1066.  
  1067. **Soal Hierarchical**
  1068. ============================================================================
  1069. Disini kita belajar analisis cluster hierarchy menggunakan R
  1070. Packages: factoextra
  1071. Library:factoextra
  1072. Data:Women dataset in R
  1073.  
  1074. SOAL 3
  1075. ---
  1076. a show 6 baris pertama dari women dataset
  1077. catatan:
  1078. Perhatikan ada dua kolom yaitu kolom height (tinggi badan) dan kolom weight (berat badan). Apakah data bisa langsung dibandingkan? Tidak bisa, karena berbeda satuan, tinggi badan dalam inch dan berat badan dalam lbs.
  1079. Supaya bisa dibandingkan, kita membuat skala dalam R digunakan fungsi scale() gunanya untuk mendapatkan jarak yang seimbang antara dua dimensi atau lebih dengan beda satuan.
  1080. b. gunakan fungsi scale() untuk membat skala. show 6 baris pertama hasil skala
  1081. c. hitung jarak eucledian dari df.
  1082. Disini kita gunakan fungsi dist() hasilnya disimpan dalam variabel women.dist.
  1083. Tampikan hasil matrix 3x3
  1084. Berapa jarak wanita kedua dan ketiga? Jawab: .............
  1085. Berapa jarak wanita kedua dan kedua? Jawab: ............. karena ....................
  1086. d. Buatlah Hierarchy Clustering dengan metode jarak single, average, complete dan centroid.
  1087. e. Tampilkan dendrodramnya masing-masing.
  1088. Bandingkan dendrodram tsb. Method mana yang berbeda sendiri? Jawab: .................
  1089. Kesimpulan bisa ditarik dari kesamaan hasil beberapa method yang sama.
  1090. Kesimpulan, kalau dibagi menjaid 2 klaster, apa hasilnya?
  1091. f. Buatlah Hierarchy Clustering dengan metode jarak Ward, mc Quitty, dan median.
  1092. g. Tampilkan ketiga dendrodram masing-masing.
  1093.  
  1094.  
  1095.  
  1096.  
  1097. **Jawaban**
  1098.  
  1099. ```{r, echo = TRUE, message = FALSE, warning = FALSE}
  1100. #a--------------
  1101. head(women)
  1102. #b-------------
  1103. womens <- scale(women)
  1104. #c--------------
  1105. women.dist <-dist(womens,method = "euclidean")
  1106. #d--------------
  1107. hclust_s <- hclust(women.dist, method = 'single')
  1108. hclust_avg <- hclust(women.dist, method = 'average')
  1109. hclust_com <- hclust(women.dist, method = 'complete')
  1110. hclust_cent <- hclust(women.dist, method = 'centroid')
  1111. #jarak kedua lebih pendek dari ketiga
  1112. #jarak kedua sama, karena sama2 2
  1113. #e--------------
  1114. plot(hclust_s)
  1115. plot(hclust_avg)
  1116. plot(hclust_com)
  1117. plot(hclust_cent)
  1118. #hierarchy dengan method single yang berbeda sendiri dengan method lainnya
  1119. #f--------------
  1120. hclust_w <- hclust(women.dist, method = 'ward')
  1121. hclust_mcq <- hclust(women.dist, method = 'mcquitty')
  1122. hclust_med <- hclust(women.dist, method = 'median')
  1123. #g--------------
  1124. plot(hclust_w)
  1125. plot(hclust_mcq)
  1126. plot(hclust_med)
  1127.  
  1128. ```
  1129.  
  1130.  
  1131.  
  1132. ***************************************************************************************************************
  1133. Good luck
  1134. ***************************************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement