. Giới thiệu
Trong khi đi tìm phân phối khả dĩ cho một biến số chúng ta có thể cậy nhờ đến một vài công cụ, đó là những hàm (R functions) có thể giúp chỉ ra những phân phối khả dĩ cho biến số mà ta đang khảo sát.
Các hàm như fitDist() trong Gamlss, descdistr() trong fitdistrplus đều có những mặt hữu ích nhưng cũng có những hạn chế, đôi khi làm chúng ta nhầm lẫn những kết quả và khó có lời giải thích hợp lí.
Chúng ta lần lượt đi qua các hàm này để xem có những vấn đề gì cần làm sáng tỏ.
. fitDist() của Gamlss
Để minh họa, tôi lấy dataset WDBC.data để phân tích.
library(readr)
df<-read.table(url("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data"),header = FALSE, sep = ",")
df1<-df[,c(1,2,4,7,10,14)]
Tôi chọn V10 làm response variable (biến số Y) cho một mô hình regression từ các biến số V4, V7 và V14. Như vậy trước hết tôi sẽ tìm một phân phối khả dĩ cho V10.
Trong phần dưới đây, sẽ có thử phân tích V10 với phân phối Gamma (chỉ nhận những giá trị dương: lớn hơn 0). Vì thế, để chạy được Gamma tôi thay các giá trị V10 = 0 bằng V10 = 0.0001, tức là rất nhỏ để không làm thay đổi V10, nhưng đủ để V10 chạy trong phân phối Gamma.
library(gamlss)
library(MASS)
df1$V10[df1$V10==0]<-0.0001
m0 <- fitDist(V10, data=df1, type="realline")
m0$fits
## SHASH SHASHo SHASHo2 SN2 exGAUS EGB2 SEP3
## -2333.057 -2330.291 -2330.291 -2326.165 -2317.881 -2316.819 -2311.261
## ST2 ST1 SN1 JSUo JSU SEP4 SST
## -2308.943 -2308.878 -2307.068 -2306.747 -2306.747 -2304.786 -2304.230
## ST3 ST5 RG ST4 SEP1 LO TF
## -2304.230 -2291.493 -2250.227 -2162.998 -2111.418 -2095.586 -2095.347
## TF2 SEP2 PE PE2 NO GT GU
## -2095.347 -2092.622 -2080.633 -2080.633 -2079.993 -1943.216 -1814.237
Kết quả cho ra 28 phân phối có thể có cho V10 được sắp xếp theo thứ tự từ tốt nhất đến xấu nhất dựa trên chỉ số AIC ở bên dưới mỗi loại phân phối. Ở trên đây, phân phối SHASH (Sinh-Arshinh) là tốt nhất với AIC = - 2332.432 (thấp nhất).
Tuy nhiên theo các Tác giả của cuốn sách “Flexible Regression and Smoothing Using GAMLSS in R” thì các phân phối trên được gọi là marginal distributions, phù hợp khi phân tích V10 đứng riêng một mình. Khi có hiện diện của các biến số khác trong một mô hình hồi qui (như V4, V7 và V14 ở trên) thì đôi khi cho thấy một phân phối khác phù hợp hơn, được gọi là conditional distributions.
Để chứng minh cho điều này tôi lập một mô hình hồi qui và phân tích xem mô hình đó tốt nhất trong dạng phân phối nào của V10. Câu trả lời có còn là phân phối SHASH nữa hay không.
library(gamlss)
df1$V10[df1$V10==0]<-0.0001
m_norm <- gamlss(V10 ~ V4+V7+V14, family=NO, data=df1, trace=FALSE)
m_gamma <- gamlss(V10 ~ V4+V7+V14, family=GA, data=df1, trace=FALSE)
m_SHASH <- gamlss(V10 ~ V4+V7+V14, family=SHASH, data=df1, trace=FALSE)
m_exGAU <- gamlss(V10 ~ V4+V7+V14, family=exGAUS, data=df1, trace=FALSE)
GAIC(m_norm,m_gamma,m_SHASH,m_exGAU)
## df AIC
## m_gamma 5 -2559.335
## m_exGAU 6 -2476.131
## m_SHASH 7 -2469.193
## m_norm 5 -2386.096
Kết quả cho thấy mô hình tốt nhất là m_gamma với giá trị AIC thấp nhất (-2559.335). Phù hợp với V10 là phân phối gamma chứ không phải là SHASH như từ kết quả của FitDist() trong package Gamlss. Gamma (GA) thậm chí còn không nằm trong các phân phối tốt nhất mà fitDist() gợi ý cho chúng ta.
Nói cách khác, FitDist() cho ta những marginal distributions tốt nhất cho V10 khi nó được phân tích riêng một mình. Nhưng khi đưa vào mô hình hồi qui với sự hiện diện của các biến số khác, V4, V7 và V14, thì đã có những thay đổi. Lúc này gamma là phân phối phù hợp nhất (conditrional distribution) cho V10 trong mô hình hồi qui trên.
. descdist() của fitdistrplus
library(fitdistrplus)
descdist(df1$V10,discrete = FALSE,boot = 1000)

## summary statistics
## ------
## min: 1e-04 max: 0.2012
## median: 0.0335
## mean: 0.04892143
## estimated sd: 0.03879996
## estimated skewness: 1.171546
## estimated kurtosis: 4.067015
Nhìn vào biểu đồ trên với các chú thích như sau:
*: là vị trí tương đương kurtosis ~3, skewness = 0, đó là phân phối normal
Tam giác: là phân phối gần normal
+: là phân phối logistic
Dãi bôi xám là phân phối beta
Dấu tròn màu xanh chỉ v10 nằm trong vùng của phân phối beta và gần với gamma (đường vạch rời thô). Tuy nhiên vì phân phối beta nhận các giá trị trong khoảng (0-1), cho nên nhiều khả năng V10 của chúng ta gần với gamma.
Sau khi xác định V10 có nhiều khả năng có phân phối Gamma, chúng ta kiểm tra lại các thông số của V10 trong mô hình Gamma.
df1$V10[df1$V10==0]<-0.0001
library(fitdistrplus)
library(logspline)
f1gam <- fitdist(df1$V10, "gamma")
plot(f1gam)

summary(f1gam)
## Fitting of the distribution ' gamma ' by maximum likelihood
## Parameters :
## estimate Std. Error
## shape 1.302095 0.06950869
## rate 26.615079 1.72472738
## Loglikelihood: 1159.361 AIC: -2314.722 BIC: -2306.035
## Correlation matrix:
## shape rate
## shape 1.0000000 0.8237657
## rate 0.8237657 1.0000000
Biểu đồ so sánh các giá trị thật của V10 so với phân phối Gamma trên lí thuyết. Ngoại trừ biểu đồ Q-Q Plot có sai biệt ở phần cuối, thì ba biểu đồ về density, probability và CDF đều khá tương đồng với lí thuyết.
Vì thế chúng ta chấp nhận gamma là phân phối phù hợp của biến số V10 để đưa vào các mô hình phân tích.
Tuy nhiên, hạn chế của hàm descdidt() là chỉ cho ta biết V10 có thể là một vài phân phối cơ bản ở trên, không có nhiều phân phối phù hợp với rất nhiều kiểu data khác thường trong thực tế.
. Tóm lại
Như một người bạn nhiều kinh nghiệm của tôi đã nói: “Trên thực tế chẳng bao giờ tìm được một biến số nào phân phối chuẩn cả”.
Vì thế việc xác định phân phối của một biến số trong data thực tế chúng ta cần có cái nhìn hoài nghi về kết quả của các công cụ máy tính. Phải dựa vào các đặc tính cơ bàn của biến số như liên tục, số đếm, rời rạc, factor, hay nhị phân, cũng như các biểu đồ histogram, density để có sự cảm nhận, phán đoán ban đầu về biến số.
Cám ơn các bạn đã đọc bài viết này. Có điều gì chưa đúng xin vui lòng chỉ giúp.
LS0tDQp0aXRsZTogIlZBUklBQkxFIERJU1RSSUJVVElPTlMiDQpzdWJ0aXRsZTogIkZJVFRJTkcgQSBESVNUUklCVVRJT046IE5o4buvbmcgSOG6oW4gQ2jhur8iDQphdXRob3I6ICJOZ3V5ZW4gTmdvYyBUaGlldSINCmRhdGU6ICIyNiBKdWx5IDIwMTciDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiAiZGVmYXVsdCINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQoNCiMgLiBHaeG7m2kgdGhp4buHdQ0KDQpUcm9uZyBraGkgxJFpIHTDrG0gcGjDom4gcGjhu5FpIGto4bqjIGTEqSBjaG8gbeG7mXQgYmnhur9uIHPhu5EgY2jDum5nIHRhIGPDsyB0aOG7gyBj4bqteSBuaOG7nSDEkeG6v24gbeG7mXQgdsOgaSBjw7RuZyBj4bulLCDEkcOzIGzDoCBuaOG7r25nIGjDoG0gKFIgZnVuY3Rpb25zKSBjw7MgdGjhu4MgZ2nDunAgY2jhu4kgcmEgbmjhu69uZyBwaMOibiBwaOG7kWkga2jhuqMgZMSpIGNobyBiaeG6v24gc+G7kSBtw6AgdGEgxJFhbmcga2jhuqNvIHPDoXQuIA0KDQpDw6FjIGjDoG0gbmjGsCBmaXREaXN0KCkgdHJvbmcgR2FtbHNzLCBkZXNjZGlzdHIoKSB0cm9uZyBmaXRkaXN0cnBsdXMgxJHhu4F1IGPDsyBuaOG7r25nIG3hurd0IGjhu691IMOtY2ggbmjGsG5nIGPFqW5nIGPDsyBuaOG7r25nIGjhuqFuIGNo4bq/LCDEkcO0aSBraGkgbMOgbSBjaMO6bmcgdGEgbmjhuqdtIGzhuqtuIG5o4buvbmcga+G6v3QgcXXhuqMgdsOgIGtow7MgY8OzIGzhu51pIGdp4bqjaSB0aMOtY2ggaOG7o3AgbMOtLg0KDQpDaMO6bmcgdGEgbOG6p24gbMaw4bujdCDEkWkgcXVhIGPDoWMgaMOgbSBuw6B5IMSR4buDIHhlbSBjw7Mgbmjhu69uZyB24bqlbiDEkeG7gSBnw6wgY+G6p24gbMOgbSBzw6FuZyB04buPLg0KDQojIC4gZml0RGlzdCgpIGPhu6dhIEdhbWxzcw0KDQrEkOG7gyBtaW5oIGjhu41hLCB0w7RpIGzhuqV5IGRhdGFzZXQgV0RCQy5kYXRhIMSR4buDIHBow6JuIHTDrWNoLg0KDQpgYGB7cixtZXNzYWdlID0gRkFMU0Usd2FybmluZz1GQUxTRX0NCg0KbGlicmFyeShyZWFkcikNCmRmPC1yZWFkLnRhYmxlKHVybCgiaHR0cHM6Ly9hcmNoaXZlLmljcy51Y2kuZWR1L21sL21hY2hpbmUtbGVhcm5pbmctZGF0YWJhc2VzL2JyZWFzdC1jYW5jZXItd2lzY29uc2luL3dkYmMuZGF0YSIpLGhlYWRlciA9IEZBTFNFLCBzZXAgPSAiLCIpDQpkZjE8LWRmWyxjKDEsMiw0LDcsMTAsMTQpXQ0KYGBgDQoNClTDtGkgY2jhu41uIFYxMCBsw6BtIHJlc3BvbnNlIHZhcmlhYmxlIChiaeG6v24gc+G7kSBZKSBjaG8gbeG7mXQgbcO0IGjDrG5oIHJlZ3Jlc3Npb24gdOG7qyBjw6FjIGJp4bq/biBz4buRIFY0LCBWNyB2w6AgVjE0LiBOaMawIHbhuq15IHRyxrDhu5tjIGjhur90IHTDtGkgc+G6vSB0w6xtIG3hu5l0IHBow6JuIHBo4buRaSBraOG6oyBkxKkgY2hvIFYxMC4NCg0KVHJvbmcgcGjhuqduIGTGsOG7m2kgxJHDonksIHPhur0gY8OzIHRo4butIHBow6JuIHTDrWNoIFYxMCB24bubaSBwaMOibiBwaOG7kWkgR2FtbWEgKGNo4buJIG5o4bqtbiBuaOG7r25nIGdpw6EgdHLhu4sgZMawxqFuZzogbOG7m24gaMahbiAwKS4gVsOsIHRo4bq/LCDEkeG7gyBjaOG6oXkgxJHGsOG7o2MgR2FtbWEgdMO0aSB0aGF5IGPDoWMgZ2nDoSB0cuG7iyBWMTAgPSAwIGLhurFuZyBWMTAgPSAwLjAwMDEsIHThu6ljIGzDoCBy4bqldCBuaOG7jyDEkeG7gyBraMO0bmcgbMOgbSB0aGF5IMSR4buVaSBWMTAsIG5oxrBuZyDEkeG7pyDEkeG7gyBWMTAgY2jhuqF5IHRyb25nIHBow6JuIHBo4buRaSBHYW1tYS4NCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGdhbWxzcykNCmxpYnJhcnkoTUFTUykNCmRmMSRWMTBbZGYxJFYxMD09MF08LTAuMDAwMQ0KbTAgPC0gZml0RGlzdChWMTAsIGRhdGE9ZGYxLCB0eXBlPSJyZWFsbGluZSIpDQptMCRmaXRzDQpgYGANCg0KS+G6v3QgcXXhuqMgY2hvIHJhIDI4IHBow6JuIHBo4buRaSBjw7MgdGjhu4MgY8OzIGNobyBWMTAgxJHGsOG7o2Mgc+G6r3AgeOG6v3AgdGhlbyB0aOG7qSB04buxIHThu6sgdOG7kXQgbmjhuqV0IMSR4bq/biB44bqldSBuaOG6pXQgZOG7sWEgdHLDqm4gY2jhu4kgc+G7kSBBSUMg4bufIGLDqm4gZMaw4bubaSBt4buXaSBsb+G6oWkgcGjDom4gcGjhu5FpLiDhu54gdHLDqm4gxJHDonksIHBow6JuIHBo4buRaSBTSEFTSCAoU2luaC1BcnNoaW5oKSBsw6AgdOG7kXQgbmjhuqV0IHbhu5tpIEFJQyA9IC0gMjMzMi40MzIgKHRo4bqlcCBuaOG6pXQpLg0KDQpUdXkgbmhpw6puIHRoZW8gY8OhYyBUw6FjIGdp4bqjIGPhu6dhIGN14buRbiBzw6FjaCAiRmxleGlibGUgUmVncmVzc2lvbiBhbmQgU21vb3RoaW5nIFVzaW5nIEdBTUxTUyBpbiBSIiB0aMOsIGPDoWMgcGjDom4gcGjhu5FpIHRyw6puIMSRxrDhu6NjIGfhu41pIGzDoCBtYXJnaW5hbCBkaXN0cmlidXRpb25zLCBwaMO5IGjhu6NwIGtoaSBwaMOibiB0w61jaCBWMTAgxJHhu6luZyByacOqbmcgbeG7mXQgbcOsbmguIEtoaSBjw7MgaGnhu4duIGRp4buHbiBj4bunYSBjw6FjIGJp4bq/biBz4buRIGtow6FjIHRyb25nIG3hu5l0IG3DtCBow6xuaCBo4buTaSBxdWkgKG5oxrAgVjQsIFY3IHbDoCBWMTQg4bufIHRyw6puKSB0aMOsIMSRw7RpIGtoaSBjaG8gdGjhuqV5IG3hu5l0IHBow6JuIHBo4buRaSBraMOhYyBwaMO5IGjhu6NwIGjGoW4sIMSRxrDhu6NjIGfhu41pIGzDoCBjb25kaXRpb25hbCBkaXN0cmlidXRpb25zLg0KDQrEkOG7gyBjaOG7qW5nIG1pbmggY2hvIMSRaeG7gXUgbsOgeSB0w7RpIGzhuq1wIG3hu5l0IG3DtCBow6xuaCBo4buTaSBxdWkgdsOgIHBow6JuIHTDrWNoIHhlbSBtw7QgaMOsbmggxJHDsyB04buRdCBuaOG6pXQgdHJvbmcgZOG6oW5nIHBow6JuIHBo4buRaSBuw6BvIGPhu6dhIFYxMC4gQ8OidSB0cuG6oyBs4budaSBjw7MgY8OybiBsw6AgcGjDom4gcGjhu5FpIFNIQVNIIG7hu69hIGhheSBraMO0bmcuDQoNCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGdhbWxzcykNCmRmMSRWMTBbZGYxJFYxMD09MF08LTAuMDAwMQ0KbV9ub3JtIDwtIGdhbWxzcyhWMTAgfiBWNCtWNytWMTQsIGZhbWlseT1OTywgZGF0YT1kZjEsIHRyYWNlPUZBTFNFKQ0KbV9nYW1tYSA8LSBnYW1sc3MoVjEwIH4gVjQrVjcrVjE0LCBmYW1pbHk9R0EsIGRhdGE9ZGYxLCB0cmFjZT1GQUxTRSkNCm1fU0hBU0ggPC0gZ2FtbHNzKFYxMCB+IFY0K1Y3K1YxNCwgZmFtaWx5PVNIQVNILCBkYXRhPWRmMSwgdHJhY2U9RkFMU0UpDQptX2V4R0FVIDwtIGdhbWxzcyhWMTAgfiBWNCtWNytWMTQsIGZhbWlseT1leEdBVVMsIGRhdGE9ZGYxLCB0cmFjZT1GQUxTRSkNCkdBSUMobV9ub3JtLG1fZ2FtbWEsbV9TSEFTSCxtX2V4R0FVKQ0KDQpgYGANCkvhur90IHF14bqjIGNobyB0aOG6pXkgbcO0IGjDrG5oIHThu5F0IG5o4bqldCBsw6AgbV9nYW1tYSB24bubaSBnacOhIHRy4buLIEFJQyB0aOG6pXAgbmjhuqV0ICgtMjU1OS4zMzUpLiBQaMO5IGjhu6NwIHbhu5tpIFYxMCBsw6AgcGjDom4gcGjhu5FpIGdhbW1hIGNo4bupIGtow7RuZyBwaOG6o2kgbMOgIFNIQVNIIG5oxrAgdOG7qyBr4bq/dCBxdeG6oyBj4bunYSBGaXREaXN0KCkgdHJvbmcgcGFja2FnZSBHYW1sc3MuIEdhbW1hIChHQSkgdGjhuq1tIGNow60gY8OybiBraMO0bmcgbuG6sW0gdHJvbmcgY8OhYyBwaMOibiBwaOG7kWkgdOG7kXQgbmjhuqV0IG3DoCBmaXREaXN0KCkgZ+G7o2kgw70gY2hvIGNow7puZyB0YS4NCg0KTsOzaSBjw6FjaCBraMOhYywgRml0RGlzdCgpIGNobyB0YSBuaOG7r25nIG1hcmdpbmFsIGRpc3RyaWJ1dGlvbnMgdOG7kXQgbmjhuqV0IGNobyBWMTAga2hpIG7DsyDEkcaw4bujYyBwaMOibiB0w61jaCByacOqbmcgbeG7mXQgbcOsbmguIE5oxrBuZyBraGkgxJHGsGEgdsOgbyBtw7QgaMOsbmggaOG7k2kgcXVpIHbhu5tpIHPhu7EgaGnhu4duIGRp4buHbiBj4bunYSBjw6FjIGJp4bq/biBz4buRIGtow6FjLCBWNCwgVjcgdsOgIFYxNCwgdGjDrCDEkcOjIGPDsyBuaOG7r25nIHRoYXkgxJHhu5VpLiBMw7pjIG7DoHkgZ2FtbWEgbMOgIHBow6JuIHBo4buRaSBwaMO5IGjhu6NwIG5o4bqldCAoY29uZGl0cmlvbmFsIGRpc3RyaWJ1dGlvbikgY2hvIFYxMCB0cm9uZyBtw7QgaMOsbmggaOG7k2kgcXVpIHRyw6puLg0KDQojIC4gZGVzY2Rpc3QoKSBj4bunYSBmaXRkaXN0cnBsdXMNCg0KYGBge3IsbWVzc2FnZSA9IEZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGZpdGRpc3RycGx1cykNCmRlc2NkaXN0KGRmMSRWMTAsZGlzY3JldGUgPSBGQUxTRSxib290ID0gMTAwMCkNCmBgYA0KDQpOaMOsbiB2w6BvIGJp4buDdSDEkeG7kyB0csOqbiB24bubaSBjw6FjIGNow7ogdGjDrWNoIG5oxrAgc2F1Og0KDQoqOiBsw6AgduG7iyB0csOtIHTGsMahbmcgxJHGsMahbmcga3VydG9zaXMgfjMsIHNrZXduZXNzID0gMCwgxJHDsyBsw6AgcGjDom4gcGjhu5FpIG5vcm1hbA0KDQpUYW0gZ2nDoWM6IGzDoCBwaMOibiBwaOG7kWkgZ+G6p24gbm9ybWFsDQoNCis6IGzDoCBwaMOibiBwaOG7kWkgbG9naXN0aWMNCg0KRMOjaSBiw7RpIHjDoW0gbMOgIHBow6JuIHBo4buRaSBiZXRhDQoNCkThuqV1IHRyw7JuIG3DoHUgeGFuaCBjaOG7iSB2MTAgbuG6sW0gdHJvbmcgdsO5bmcgY+G7p2EgcGjDom4gcGjhu5FpIGJldGEgdsOgIGfhuqduIHbhu5tpIGdhbW1hICjEkcaw4budbmcgduG6oWNoIHLhu51pIHRow7QpLiBUdXkgbmhpw6puIHbDrCBwaMOibiBwaOG7kWkgYmV0YSBuaOG6rW4gY8OhYyBnacOhIHRy4buLIHRyb25nIGtob+G6o25nICgwLTEpLCBjaG8gbsOqbiBuaGnhu4F1IGto4bqjIG7Eg25nIFYxMCBj4bunYSBjaMO6bmcgdGEgZ+G6p24gduG7m2kgZ2FtbWEuDQoNClNhdSBraGkgeMOhYyDEkeG7i25oIFYxMCBjw7Mgbmhp4buBdSBraOG6oyBuxINuZyBjw7MgcGjDom4gcGjhu5FpIEdhbW1hLCBjaMO6bmcgdGEga2nhu4NtIHRyYSBs4bqhaSBjw6FjIHRow7RuZyBz4buRIGPhu6dhIFYxMCB0cm9uZyBtw7QgaMOsbmggR2FtbWEuDQoNCmBgYHtyLG1lc3NhZ2UgPSBGQUxTRSx3YXJuaW5nPUZBTFNFfQ0KZGYxJFYxMFtkZjEkVjEwPT0wXTwtMC4wMDAxDQpsaWJyYXJ5KGZpdGRpc3RycGx1cykNCmxpYnJhcnkobG9nc3BsaW5lKQ0KZjFnYW0gPC0gZml0ZGlzdChkZjEkVjEwLCAiZ2FtbWEiKQ0KcGxvdChmMWdhbSkNCnN1bW1hcnkoZjFnYW0pDQpgYGANCg0KQmnhu4N1IMSR4buTIHNvIHPDoW5oIGPDoWMgZ2nDoSB0cuG7iyB0aOG6rXQgY+G7p2EgVjEwIHNvIHbhu5tpIHBow6JuIHBo4buRaSBHYW1tYSB0csOqbiBsw60gdGh1eeG6v3QuIE5nb+G6oWkgdHLhu6sgYmnhu4N1IMSR4buTIFEtUSBQbG90IGPDsyBzYWkgYmnhu4d0IOG7nyBwaOG6p24gY3Xhu5FpLCB0aMOsIGJhIGJp4buDdSDEkeG7kyB24buBIGRlbnNpdHksIHByb2JhYmlsaXR5IHbDoCBDREYgxJHhu4F1IGtow6EgdMawxqFuZyDEkeG7k25nIHbhu5tpIGzDrSB0aHV54bq/dC4NCg0KVsOsIHRo4bq/IGNow7puZyB0YSBjaOG6pXAgbmjhuq1uIGdhbW1hIGzDoCBwaMOibiBwaOG7kWkgcGjDuSBo4bujcCBj4bunYSBiaeG6v24gc+G7kSBWMTAgxJHhu4MgxJHGsGEgdsOgbyBjw6FjIG3DtCBow6xuaCBwaMOibiB0w61jaC4NCg0KVHV5IG5oacOqbiwgaOG6oW4gY2jhur8gY+G7p2EgaMOgbSBkZXNjZGlkdCgpIGzDoCBjaOG7iSBjaG8gdGEgYmnhur90IFYxMCBjw7MgdGjhu4MgbMOgIG3hu5l0IHbDoGkgcGjDom4gcGjhu5FpIGPGoSBi4bqjbiDhu58gdHLDqm4sIGtow7RuZyBjw7Mgbmhp4buBdSBwaMOibiBwaOG7kWkgcGjDuSBo4bujcCB24bubaSBy4bqldCBuaGnhu4F1IGtp4buDdSBkYXRhIGtow6FjIHRoxrDhu51uZyB0cm9uZyB0aOG7sWMgdOG6vy4NCg0KIyAuIFTDs20gbOG6oWkNCg0KTmjGsCBt4buZdCBuZ8aw4budaSBi4bqhbiBuaGnhu4F1IGtpbmggbmdoaeG7h20gY+G7p2EgdMO0aSDEkcOjIG7Ds2k6ICJUcsOqbiB0aOG7sWMgdOG6vyBjaOG6s25nIGJhbyBnaeG7nSB0w6xtIMSRxrDhu6NjIG3hu5l0IGJp4bq/biBz4buRIG7DoG8gcGjDom4gcGjhu5FpIGNodeG6qW4gY+G6oyIuIA0KDQpWw6wgdGjhur8gdmnhu4djIHjDoWMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY+G7p2EgbeG7mXQgYmnhur9uIHPhu5EgdHJvbmcgZGF0YSB0aOG7sWMgdOG6vyBjaMO6bmcgdGEgY+G6p24gY8OzIGPDoWkgbmjDrG4gaG/DoGkgbmdoaSB24buBIGvhur90IHF14bqjIGPhu6dhIGPDoWMgY8O0bmcgY+G7pSBtw6F5IHTDrW5oLiBQaOG6o2kgZOG7sWEgdsOgbyBjw6FjIMSR4bq3YyB0w61uaCBjxqEgYsOgbiBj4bunYSBiaeG6v24gc+G7kSBuaMawIGxpw6puIHThu6VjLCBz4buRIMSR4bq/bSwgcuG7nWkgcuG6oWMsIGZhY3RvciwgaGF5IG5o4buLIHBow6JuLCBjxaluZyBuaMawIGPDoWMgYmnhu4N1IMSR4buTIGhpc3RvZ3JhbSwgZGVuc2l0eSDEkeG7gyBjw7Mgc+G7sSBj4bqjbSBuaOG6rW4sIHBow6FuIMSRb8OhbiBiYW4gxJHhuqd1IHbhu4EgYmnhur9uIHPhu5EuDQoNCkPDoW0gxqFuIGPDoWMgYuG6oW4gxJHDoyDEkeG7jWMgYsOgaSB2aeG6v3QgbsOgeS4gQ8OzIMSRaeG7gXUgZ8OsIGNoxrBhIMSRw7puZyB4aW4gdnVpIGzDsm5nIGNo4buJIGdpw7pwLg0KDQo=