تحلیل داده‌های زلزله با R-بخش اول

تحلیل داده‌های زلزله با R - بخش اول

در این بخش از سری آموزش‌های تحلیل داده‌های زلزله، قصد داریم تا به معرفی تجزیه و تحلیل اکتشافی یک مجموعه داده بپردازیم. همچنین به گزارش وقوع زلزله و حوادث مشابه در یک پنجره زمانی خاص را نشان می‌دهیم همچنین یک تحلیل اکتشافی اساسی و برخی از اصول و ابزار‌های اصلی را در این مورد بررسی می‌کنیم. سپس نحوه نشان دادن محتوای مجموعه داده‌های زمین لرزه‌ها را بروی نقشه جغرافیایی به همراه وضعیت و نمودار‌های تعاملی و متحرک نشان خواهیم داد. سرانجام، تجزیه و تحلیل خوشه‌ای از زمین لرزه واقع در مناطق جغرافیایی خاص ارائه خواهد شد.

  • بخش اول : تحلیل اکتشافی متغیرهای کمی
  • بخش دوم :‌ تحلیل اکتشافی متغیرهای طبقه‌بندی شده
  • بخش سوم : نقشه‌های استاتیک، تعاملی و متحرک
  • بخش چهارم : تجزیه و تحلیل خوشه‌ای 

همه انالیزهای گفته شده با پکیج‌های زیر قابل انجام هست.

library(ggplot2)
library(ggmap)
library(dplyr)
library(factoextra)
library(Hmisc)
library(gridExtra)
library(lubridate)
library(corrplot)
library(vcd)
library(gmodels)
install.packages(c("ggplot2",
                          "ggmap",
                          "dplyr",
                          "factoextra",
                          "Hmisc",
                          "gridExtra",
                          "lubridate",
                          "corrplot", 
                          "vcd", 
                          "gmodels"))

دریافت داده:

داده‌های زمین لرزه را از سایت لرزه نگاری usgs دریافت میکنیم مخصوصا داده‌های ۳۰ روز اخیر. توجه داشته باشید که بعضی مجموعه داده‌ها روز به روز ذخیره شده و در مجموع بازه ۳۰ روزه را پوشش می‌دهد. که در حال حاضر با این نوع داده‌ها کار نمی‌کنیم. داده‌ها را دانلود می‌کنیم و برای استفاده بارگذاری می‌نماییم. توجه کنید که داده‌های زمین لرزه متغیرهای محلی هستند.

با استفاده از دستور زیر داده‌ها را مستقیما از طریق نرم افزار دانلود و در نرم افزار لود میکند توجه کنید که قبل از انجام این کار ابتدا پکیج‌های بالا نصب و فراخوانی کنید.

 if("all_week.csv" %in% dir(".") == FALSE) { 
url="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv" 
download.file(url = url, destfile = "all_week.csv")
 } 
quakes = read.csv("all_week.csv", header=TRUE, sep=',', stringsAsFactors = FALSE)
 

با استفاده از دستور زیر میتوان ساختار dataframe‌ را برحسب متغیرهای factor و time تغییر داد تا در ادامه دچار مشکل نشویم.

quakes$time = ymd_hms(quakes$time)
quakes$updated = ymd_hms(quakes$updated)
quakes$magType = as.factor(quakes$magType)
quakes$net = as.factor(quakes$net)
quakes$type = as.factor(quakes$type)
quakes$status = as.factor(quakes$status)
quakes$locationSource = as.factor(quakes$locationSource)
quakes$magSource = as.factor(quakes$magSource)

با استفاده از دستور زیر می‌توانید تعداد سطر و ستون مجموعه داده خود را مشاهده کنید (ابعاد داده را نشان می‌دهد)

dim(quakes)
## [1] 8407   22

با دستور زیر می‌توانیم داده ها را طوری بازچینی بکنیم که ترتیب سطر ها به شکل نزولی باشد.

quakes =  arrange(quakes, -row_number())

با دستور زیر می‌توانیم تعداد سطرهایی که داده کامل دارند(داده گمشده در بین آنها نیست) را مشاهده کنیم. توجه کنید که داده‌های شما ممکن هست تعداد متفاوتی را نمایش بدهد بدلیل اینکه تعداد زلزله ها هر لحظه بروزرسانی می‌شود.

sum(complete.cases(quakes))
## [1] 3957

کسر زیر درصد تعداد سطرهای کامل و بدون داده گمشده را نشان می‌دهد.

sum(complete.cases(quakes))/nrow(quakes)
## [1] 0.4706792

برای مشاهده نگاه کلی به مجموعه داده‌ها از دستورات زیر می‌توانید استفاده کنید

head(quakes)
##                  time latitude longitude depth  mag magType nst gap
## 1 2019-02-14 16:35:36  53.1050 -164.7006 20.20 2.30      ml  NA  NA
## 2 2019-02-14 16:42:10  33.5345 -116.7100  2.46 1.52      ml  37  35
## 3 2019-02-14 16:52:34  19.2010 -155.5120 34.29 2.34      ml  57  81
## 4 2019-02-14 17:00:44  60.5937 -147.8132 13.20 2.10      ml  NA  NA
## 5 2019-02-14 17:02:05  64.3332 -148.4033 11.50 0.90      ml  NA  NA
## 6 2019-02-14 17:06:09  65.4253 -153.3378 14.10 1.00      ml  NA  NA
##      dmin  rms net           id             updated
## 1      NA 0.30  ak ak01922ox4si 2019-03-01 21:51:59
## 2 0.03833 0.20  ci   ci37531042 2019-02-14 17:00:40
## 3 0.03755 0.09  hv   hv70811146 2019-02-14 19:21:24
## 4      NA 0.42  ak ak01922pb2w7 2019-03-01 21:51:36
## 5      NA 0.65  ak ak01922pbfay 2019-03-01 21:51:37
## 6      NA 0.83  ak ak01922pcak4 2019-03-01 21:52:00
##                             place       type horizontalError depthError
## 1     134km SSE of Akutan, Alaska earthquake              NA      27.00
## 2              4km SW of Anza, CA earthquake            0.22       0.26
## 3         3km W of Pahala, Hawaii earthquake            0.42       0.53
## 4    51km ESE of Whittier, Alaska earthquake              NA       0.20
## 5 43km SE of North Nenana, Alaska earthquake              NA       0.40
## 6      65km WNW of Tanana, Alaska earthquake              NA       0.10
##   magError magNst   status locationSource magSource
## 1       NA     NA reviewed             ak        ak
## 2    0.159     27 reviewed             ci        ci
## 3    0.177     21 reviewed             hv        hv
## 4       NA     NA reviewed             ak        ak
## 5       NA     NA reviewed             ak        ak
## 6       NA     NA reviewed             ak        ak
tail(quakes) # run it to show results

برای مشاهده ساختار هر متغیر تشکیل دهنده مجموعه داده و اینکه این متغیرها از چه نوعی هستند وسایر اطلاعات کلی از دستور زیر استفاده کنید.

str(quakes)
## 'data.frame':    8407 obs. of  22 variables:
##  $ time           : POSIXct, format: "2019-02-14 16:35:36" "2019-02-14 16:42:10" ...
##  $ latitude       : num  53.1 33.5 19.2 60.6 64.3 ...
##  $ longitude      : num  -165 -117 -156 -148 -148 ...
##  $ depth          : num  20.2 2.46 34.29 13.2 11.5 ...
##  $ mag            : num  2.3 1.52 2.34 2.1 0.9 1 0.3 0.4 2.4 1.82 ...
##  $ magType        : Factor w/ 10 levels "","mb","mb_lg",..: 6 6 6 6 6 6 6 6 6 4 ...
##  $ nst            : int  NA 37 57 NA NA NA NA NA NA 5 ...
##  $ gap            : num  NA 35 81 NA NA NA NA NA NA 141 ...
##  $ dmin           : num  NA 0.0383 0.0376 NA NA ...
##  $ rms            : num  0.3 0.2 0.09 0.42 0.65 0.83 0.48 0.7 0.55 0.09 ...
##  $ net            : Factor w/ 14 levels "ak","ci","hv",..: 1 2 3 1 1 1 1 1 1 13 ...
##  $ id             : chr  "ak01922ox4si" "ci37531042" "hv70811146" "ak01922pb2w7" ...
##  $ updated        : POSIXct, format: "2019-03-01 21:51:59" "2019-02-14 17:00:40" ...
##  $ place          : chr  "134km SSE of Akutan, Alaska" "4km SW of Anza, CA" "3km W of Pahala, Hawaii" "51km ESE of Whittier, Alaska" ...
##  $ type           : Factor w/ 7 levels "chemical explosion",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ horizontalError: num  NA 0.22 0.42 NA NA NA NA NA NA 1.06 ...
##  $ depthError     : num  27 0.26 0.53 0.2 0.4 0.1 0.4 0.5 0.6 3.08 ...
##  $ magError       : num  NA 0.159 0.177 NA NA NA NA NA NA 0.244 ...
##  $ magNst         : int  NA 27 21 NA NA NA NA NA NA 4 ...
##  $ status         : Factor w/ 2 levels "automatic","reviewed": 2 2 2 2 2 2 2 2 2 2 ...
##  $ locationSource : Factor w/ 15 levels "ak","ci","hv",..: 1 2 3 1 1 1 1 1 1 14 ...
##  $ magSource      : Factor w/ 15 levels "ak","ci","hv",..: 1 2 3 1 1 1 1 1 1 14 ...

توضیحات مختصری درباره متغیرهای تشکیل دهنده این مجموعه داده در زیر بیان میکنیم که هر متغیر بیانگر چه ویژگی می‌باشد.

time
latitude
longitude
depth
mag
magType
nst
gap
dmin
rms
net
id
update
place
type
horizontalError
depthError
magError
magNst
status
locationSource
magSource

 

– زمانی که حادثه (زلزله) رخداده است.
– بیانگر عرض جغرافیایی می‌باشد که دامنه تغییر ان از -90 درجه تا +90 درجه می‌باشد.
– بیانگر طول جغرافیایی می‌باشد که دامنه تغییر ان از -180 درجه تا +180 درجه می‌باشد.
– عمق رخداد زمین لرزه برحسب کیلومتر.
– بزرگای زلزله از دامنه 1.0- تا 10.0 می‌باشد.
– روش و یا الگوریتم مورد استفاده برای محاسبه بزرگای هر رخداد.
– تعداد ایستگاه‌های لرزه شناسی برای تعیین مکان زلزله
– بزرگترین زاویه در بین زوایای ایستگاه‌های گیرنده زلزله
– فاصله افقی از مرکز زلزله را به نزدیکترین ایستگاه
– مربع میانگین ریشه (RMS) باقی‌مانده زمان پیمودن، برحسب ثانیه، با استفاده از تمام وزن‌ها
– شناسه کمک کننده داده، مشخصه شبکه‌ای که با استفاده از داده‌های آن این زمین لرزه و اطلاعات آن به ثبت رسیده است.
– یک مشخصه یکتا برای رخداد، این شناسه مورد نظر در حال حاضر برای این ویژگی هست که ممکن است در طول زمان تغییر کند.
– زمانی که رویداد اخیرا به روز شده است.
– توضیحات متنی از نام منطقه جغرافیایی نزدیک به رخداد. که ممکن هست اسم شهر باشد.
– نوع رخداد لرزه‌ای.
– عدم اطمینان از محل گزارش شده از این رویداد برحسب کیلومتر.
– عدم اطمینان از عمق گزارش شده از این رویداد برحسب کیلومتر.
– عدم اطمینان از بزرگای گزارش شده از این رویداد .
– مجموع ایستگاه‌های لرزه‌نگاری مورد استفاده شده برای محاسبه بزرگای این رخداد زلزله.
– مشخص کننده اینکه آیا این رویداد به‌وسیله نیروی انسانی بازبینی شده است.
– شبکه ای که در اصل نویسنده محل گزارش شده از این رویداد است.
– شبکه ای که در اصل نویسنده بزرگای گزارش شده از این رویداد است.

با دستورات زیر می‌توانید فاکتورهای ذخیره شده در متغیر type را مشاهده کنید و سطح‌بندی نوع زلزله را تعیین کنید.

sort(unique(quakes$type))
## [1] chemical explosion earthquake         explosion         
## [4] ice quake          other event        quarry blast      
## [7] rock burst        
## 7 Levels: chemical explosion earthquake explosion ... rock burst

برای مشاهده مدت زمان مجموعه داده خود می‌توانید از دستورات زیر استفاده کنید. بدین منظور ابتدا تعداد سطرهای مجموعه داده خود را در یک متغیر ذخیره کرده و سپس از طریق فراخوانی داده متغیر زمان را ایندکس اخرین سطر که قبلا در متغیر nr ذخیره کرده بودیم را چاپ میکنیم.

nr = nrow(quakes)
c(quakes$time[1], quakes$time[nr])
## [1] "2019-02-14 16:35:36 UTC" "2019-03-16 16:06:56 UTC"

تجزیه و تحلیل اکتشافی

در این بخش به آنالیز آماری تک تک متغیرها می‌پردازیم و استباط‌ های آماری را انجام می‌دهیم. در زیر نگاه مختصری به نوع متغیر‌های می‌اندازیم.

(numeric_vars = names(which(sapply(quakes, class) == "numeric")))
##  [1] "latitude"        "longitude"       "depth"          
##  [4] "mag"             "gap"             "dmin"           
##  [7] "rms"             "horizontalError" "depthError"     
## [10] "magError"
(integer_vars = names(which(sapply(quakes, class) == "integer")))
## [1] "nst"    "magNst"
(factor_vars = names(which(sapply(quakes, class) == "factor")))
## [1] "magType"        "net"            "type"           "status"        
## [5] "locationSource" "magSource"
(character_vars = names(which(sapply(quakes, class) == "character")))
## [1] "id"    "place"
setdiff(names(quakes), c(numeric_vars, integer_vars, factor_vars, character_vars))
## [1] "time"    "updated"
متغیر‌های کمی

متغیرهای کمی شامل عددی (پیوسته) و عدد صحیح ( گسسته) می‌باشند که قبلا معرفی کرده‌ایم. خلاصه کوتاهی را برای هر یک در زیر نشان می‌دهیم

quantitative_vars = c(numeric_vars, integer_vars)
sapply(quakes[, quantitative_vars], summary)
## $latitude
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -59.96   33.84   38.82   40.94   60.03   72.32 
## 
## $longitude
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -180.0  -149.3  -120.6  -113.1  -115.7   180.0 
## 
## $depth
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   -3.45    3.00    8.58   23.21   20.10  619.21 
## 
## $mag
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -0.710   0.900   1.400   1.651   2.000   7.500       2 
## 
## $gap
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    12.0    69.0   103.0   122.3   158.6   353.0    2472 
## 
## $dmin
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0003  0.0219  0.0638  0.5698  0.2102 32.4620    2659 
## 
## $rms
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0000  0.1000  0.2000  0.3386  0.5500  1.8400       2 
## 
## $horizontalError
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.080   0.250   0.440   1.865   1.290  27.650    3073 
## 
## $depthError
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.380   0.700   2.934   1.900 745.500 
## 
## $magError
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0000  0.0960  0.1500  0.1835  0.2280  5.3600    2793 
## 
## $nst
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    3.00    8.00   14.00   18.85   24.00  199.00    3368 
## 
## $magNst
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    0.00    4.00    8.00   15.35   17.00  415.00    2488

تابع describe()  در پکیج Hmisc توضیحات خوبی را در این زمینه ارائه می‌دهد.

describe(quakes[, quantitative_vars])
## quakes[, quantitative_vars] 
## 
##  12  Variables      8407  Observations
## ---------------------------------------------------------------------------
## latitude 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8407        0     7416        1    40.94    19.67    13.49    19.16 
##      .25      .50      .75      .90      .95 
##    33.84    38.82    60.03    63.08    64.98 
## 
## lowest : -59.9641 -59.9052 -59.8885 -59.8790 -59.8610
## highest:  71.7325  71.7340  71.7684  71.8899  72.3184
## ---------------------------------------------------------------------------
## longitude 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8407        0     7617        1   -113.1    47.68  -156.15  -152.83 
##      .25      .50      .75      .90      .95 
##  -149.33  -120.56  -115.67   -67.39    22.34 
## 
## lowest : -179.9963 -179.8762 -179.8751 -179.8321 -179.7528
## highest:  179.0796  179.1853  179.3115  179.8629  179.9946
## ---------------------------------------------------------------------------
## depth 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8407        0     2755        1    23.21    32.26     0.00     0.97 
##      .25      .50      .75      .90      .95 
##     3.00     8.58    20.10    59.00    98.84 
## 
## lowest :  -3.45  -3.44  -3.41  -3.40  -3.39, highest: 610.04 612.77 614.79 616.79 619.21
## ---------------------------------------------------------------------------
## mag 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8405        2      412        1    1.651    1.225    0.270    0.470 
##      .25      .50      .75      .90      .95 
##    0.900    1.400    2.000    3.216    4.500 
## 
## lowest : -0.71 -0.64 -0.50 -0.40 -0.37, highest:  6.20  6.30  6.40  7.00  7.50
## ---------------------------------------------------------------------------
## gap 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5935     2472      919        1    122.3    77.88     38.0     48.0 
##      .25      .50      .75      .90      .95 
##     69.0    103.0    158.6    224.9    285.9 
## 
## lowest :  12.00  13.00  14.00  15.00  16.00, highest: 349.33 349.73 350.00 352.00 353.00
## ---------------------------------------------------------------------------
## dmin 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5748     2659     4519        1   0.5698   0.9607 0.005299 0.008580 
##      .25      .50      .75      .90      .95 
## 0.021943 0.063785 0.210200 1.449100 3.035300 
## 
## lowest :  0.0002619  0.0003986  0.0004850  0.0007119  0.0007695
## highest: 24.2990000 26.6220000 30.2310000 31.8220000 32.4620000
## ---------------------------------------------------------------------------
## rms 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8405        2      676        1   0.3386   0.3293     0.03     0.04 
##      .25      .50      .75      .90      .95 
##     0.10     0.20     0.55     0.79     0.95 
## 
## lowest : 0.0000 0.0032 0.0046 0.0090 0.0098, highest: 1.6000 1.7700 1.7800 1.8200 1.8400
## ---------------------------------------------------------------------------
## horizontalError 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5334     3073      529        1    1.865    2.616     0.15     0.18 
##      .25      .50      .75      .90      .95 
##     0.25     0.44     1.29     7.10     9.40 
## 
## lowest :  0.08  0.09  0.10  0.11  0.12, highest: 23.60 24.76 26.58 27.60 27.65
## ---------------------------------------------------------------------------
## depthError 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8407        0      756    0.999    2.934    4.387    0.180    0.200 
##      .25      .50      .75      .90      .95 
##    0.380    0.700    1.900    6.894   12.470 
##                                                                       
## Value          0    10    20    30    40    80    90   120   180   260
## Frequency   7304   751   105   234     6     1     1     1     1     1
## Proportion 0.869 0.089 0.012 0.028 0.001 0.000 0.000 0.000 0.000 0.000
##                       
## Value        660   750
## Frequency      1     1
## Proportion 0.000 0.000
## ---------------------------------------------------------------------------
## magError 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5614     2793      664        1   0.1835   0.1391    0.037    0.056 
##      .25      .50      .75      .90      .95 
##    0.096    0.150    0.228    0.350    0.430 
## 
## lowest : 0.000000000 0.001000000 0.002000000 0.003000000 0.004180669
## highest: 3.670000000 3.950000000 4.140000000 4.990000000 5.360000000
## ---------------------------------------------------------------------------
## nst 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5039     3368      104    0.999    18.85    15.39        4        6 
##      .25      .50      .75      .90      .95 
##        8       14       24       39       49 
## 
## lowest :   3   4   5   6   7, highest: 126 129 144 145 199
## ---------------------------------------------------------------------------
## magNst 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     5919     2488      171    0.997    15.35    18.02        1        2 
##      .25      .50      .75      .90      .95 
##        4        8       17       30       49 
## 
## lowest :   0   1   2   3   4, highest: 355 367 370 371 415
## ---------------------------------------------------------------------------

یک تابع کمکی برای قطعه‌بندی با استفاده از پکیج Kmisc که در CRAN نگهداری می‌شود را در زیر آورده‌ایم

## from Kmisc
chunk = function(min, max, size, by=1) {
  if( missing(max) ) {
    max = min
    min = 1
  }
  n = ceiling( (max-min) / (size*by) )
  out = vector("list", n)
  lower = min
  upper = by * (min + size - 1)
  for( i in 1:length(out) ) {
    out[[i]] = seq(lower, min(upper, max), by=by)
    lower = lower + size * by
    upper = upper + size * by
  }
  names(out) = paste(sep="", "chunk", 1:length(out))
  return(out)
}

نمودار جعبه‌ای برای هر متغیر کمی در زیر نشان داده شده است. 

gp = invisible(lapply(quantitative_vars, function(x) { 
  ggplot(data = quakes, aes(y=eval(parse(text=x)))) + geom_boxplot(fill = "palegreen4") + ylab(x) + ggtitle(x) + theme(legend.position="none") + coord_flip()}))
grob_plots = invisible(lapply(chunk(1, length(gp), 4), function(x) {
  marrangeGrob(grobs=lapply(gp[x], ggplotGrob), nrow=2, ncol=2)}))
grob_plots$chunk1
grob_plots$chunk2
grob_plots$chunk3

نمودار چگالی برای تصویر سازی اینکه تراکم داده در کدام نقطه بیشتر هست کمک می‌کند. با استفاده کد زیر می‌توانید نمودار‌های مشابه را رسم کنید که ما فقط یک نمونه را می‌آوریم.

gp = invisible(lapply(quantitative_vars, function(x) { 
  ggplot(data = quakes, aes(x=eval(parse(text=x)))) + geom_density(fill = "palegreen4") + ylab(x) + xlab("") + ggtitle(x) + theme(legend.position="none")}))
grob_plots = invisible(lapply(chunk(1, length(gp), 4), function(x) {
  marrangeGrob(grobs=lapply(gp[x], ggplotGrob), nrow=2, ncol=2)}))
grob_plots$chunk1
grob_plots$chunk2
grob_plots$chunk3

حال نمودار جعبه‌ای که در بالا رسم شد را برحسب نوع رخداد هرکدام رسم میکنیم 

فقط یک نمونه از نمودار را به عنوان نمونه می‌آوریم 

gp = invisible(lapply(quantitative_vars, function(x) { 
  ggplot(data = quakes, aes(x = type, y = eval(parse(text=x)))) + geom_boxplot(fill = "palegreen4") + ylab(x) + ggtitle(x) + theme(legend.position="none") + coord_flip()}))
grob_plots = invisible(lapply(chunk(1, length(gp), 4), function(x) {
  marrangeGrob(grobs=lapply(gp[x], ggplotGrob), nrow=2, ncol=2)}))
grob_plots$chunk1
grob_plots$chunk1
grob_plots$chunk2
grob_plots$chunk3

به‌همین ترتیب می‌توانید تابع چگالی را نیز برحسب نوع رخداد رسم کنید

فقط یک نمونه از نمودار را به عنوان نمونه می‌آوریم 

gp = invisible(lapply(quantitative_vars, function(x) { 
  ggplot(data = quakes, aes(x=eval(parse(text=x)))) + geom_density(fill = "palegreen4") + ylab(x) + xlab("") + ggtitle(x) + theme(legend.position="none") + facet_wrap( ~ type)}))
grob_plots = invisible(lapply(chunk(1, length(gp), 4), function(x) {
  marrangeGrob(grobs=lapply(gp[x], ggplotGrob), nrow=2, ncol=2)}))
grob_plots$chunk1
grob_plots$chunk1
grob_plots$chunk2
grob_plots$chunk3

برای تحقیقات بهتر و نمایش کامل اطلاعات می‌توان از نمودار پراکنش استفاده کرد. 

با استفاده از کد زیر این نمودار را می‌کشیم.

 

earthquakes = quakes %>% filter(type == "earthquake")
pairs(earthquakes %>% select(quantitative_vars))
hist_data = earthquakes %>% select(mag, depth)
hist_data = hist_data[complete.cases(hist_data),] 

p = ggplot(data = hist_data, aes(x = depth, y = mag)) + geom_point() + guides(fill=FALSE)
p

بالای ۳۰۰ کیلومتر از این داده‌ها در بزرگای بیشتر از ۴ اتفاق افتاده‌اند، برای مشاهده روابط بین کیلومتر و بزرگای زلزله از مدل خطی زیر استفاده می‌کنیم.

با استفاده از کد زیر این نمودار را می‌کشیم.

mag_depth_lr = lm(mag ~ poly(depth, 3), data = hist_data)
summary(mag_depth_lr)
## 
## Call:
## lm(formula = mag ~ poly(depth, 3), data = hist_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.1845 -0.7333 -0.2310  0.4361  4.7112 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       1.65543    0.01177 140.625  < 2e-16 ***
## poly(depth, 3)1  40.93311    1.06794  38.329  < 2e-16 ***
## poly(depth, 3)2 -18.69337    1.06794 -17.504  < 2e-16 ***
## poly(depth, 3)3   6.64030    1.06794   6.218 5.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.068 on 8226 degrees of freedom
## Multiple R-squared:  0.1807, Adjusted R-squared:  0.1804 
## F-statistic: 604.7 on 3 and 8226 DF,  p-value: less than 2.2e-16

تمامی ضرایب رگرسیونی معنی‌دار هستند در زیر نمودار مقادیر اصلی در مقابل مدل برازش داده شده را رسم میکنیم.

تحلیل همبستگی

با استفاده از کد زیر همبستگی محاسبه شده و در جدول زیر آورده شده است.

(cor_mat = cor(quakes[, quantitative_vars], use = "pairwise.complete.obs"))
##                    latitude   longitude       depth         mag
## latitude         1.00000000 -0.52875417 -0.14867697 -0.38540388
## longitude       -0.52875417  1.00000000  0.14551789  0.55605921
## depth           -0.14867697  0.14551789  1.00000000  0.38277138
## mag             -0.38540388  0.55605921  0.38277138  1.00000000
## gap             -0.03794518  0.02975063  0.05196967  0.02808442
## dmin            -0.47773533  0.44108043  0.30279438  0.57339025
## rms              0.13784391  0.19709935  0.33147665  0.60872325
## horizontalError -0.53481018  0.61381314  0.54880413  0.76651963
## depthError      -0.06707420  0.06460787  0.03415940  0.08011669
## magError         0.02470576 -0.09122383 -0.06033724 -0.10270236
## nst             -0.11490376 -0.27741899 -0.04172062  0.28344750
## magNst          -0.19571866  0.26728165  0.26750233  0.46199100
##                         gap        dmin         rms horizontalError
## latitude        -0.03794518 -0.47773533  0.13784391     -0.53481018
## longitude        0.02975063  0.44108043  0.19709935      0.61381314
## depth            0.05196967  0.30279438  0.33147665      0.54880413
## mag              0.02808442  0.57339025  0.60872325      0.76651963
## gap              1.00000000  0.02719460  0.01882822      0.24321328
## dmin             0.02719460  1.00000000  0.53628845      0.65243264
## rms              0.01882822  0.53628845  1.00000000      0.75539036
## horizontalError  0.24321328  0.65243264  0.75539036      1.00000000
## depthError       0.32860091  0.08272005  0.03538935      0.26089694
## magError         0.10447472 -0.10511159 -0.12456313     -0.09591121
## nst             -0.49361171 -0.19298946  0.06461759     -0.24813050
## magNst          -0.18564633  0.28321115  0.42430650      0.29769313
##                  depthError    magError         nst      magNst
## latitude        -0.06707420  0.02470576 -0.11490376 -0.19571866
## longitude        0.06460787 -0.09122383 -0.27741899  0.26728165
## depth            0.03415940 -0.06033724 -0.04172062  0.26750233
## mag              0.08011669 -0.10270236  0.28344750  0.46199100
## gap              0.32860091  0.10447472 -0.49361171 -0.18564633
## dmin             0.08272005 -0.10511159 -0.19298946  0.28321115
## rms              0.03538935 -0.12456313  0.06461759  0.42430650
## horizontalError  0.26089694 -0.09591121 -0.24813050  0.29769313
## depthError       1.00000000 -0.01048942 -0.20439173 -0.01479938
## magError        -0.01048942  1.00000000 -0.07789094 -0.14474547
## nst             -0.20439173 -0.07789094  1.00000000  0.72021297
## magNst          -0.01479938 -0.14474547  0.72021297  1.00000000

با استفاده از نمودارهای زیر همبستگی بین داده ها به‌طور قابل فهم تری نمایش داده می‌شود.

نقشه

با استفاده از دستور زیر نقشه زلزله های رخداده در فاصله زمانی داده های برداشت شده را می‌توانیم رسم کنیم.

world = map_data('world')

title = paste("Earthquake map from ", paste(earthquakes$time[1], earthquakes$time[nrow(earthquakes)], sep = " to "))

p = ggplot() + geom_map(data = world, map = world, aes(x = long, y=lat, group=group, map_id=region), fill="white", colour="#7f7f7f", size=0.5)
p = p + geom_point(data = earthquakes, aes(x=longitude, y = latitude, colour = mag)) + scale_colour_gradient(low = "#00AA00",high = "#FF00AA") + ggtitle(title)
p