jh191002-NWJ 財務ビッグデータの 可視化と統計モ …...Hardware: FENNEL (東京大学...
Transcript of jh191002-NWJ 財務ビッグデータの 可視化と統計モ …...Hardware: FENNEL (東京大学...
-
財務ビッグデータの 可視化と統計モデリング
地道 正行*, 宮本大輔**, 阪 智香*, 永田 修一* * 関西学院大学 商学部, **東京大学大学院情報理工学系研究科
[email protected] 第12回 JHPCN シンポジウム
2020年7月9日(木) オンライン開催
jh191002-NWJ
-
Preprocessing, Data Wrangling, Exploratory Data Analysis, and Reproducibility
Raw Data Set File
Importable Data Set
FilePreprocessing
Statistical Inference
and Decision
Exploratory Data Analysis
J. W. Tukey (1977)
Analyzable Object
Data Wrangling
Reproducibility
-
Computational Environments
-
Hardware: Local
• macOS • Mac Pro • iMac • MacBook Pro
• Ubuntu • Dell Precision T7910
-
Hardware: FENNEL (東京大学 専有利用型リアルタイムデータ解析ノード)
node name OS node num.
cores memory disk GPU memoryGPU node Ubuntu16.04 2 8 16GB 1TB 8GB
CPU node Ubuntu16.04 2 8 12GB 1TB -total 4 32 56GB 4TB 16GB
-
Setup / Software• OS: macOS, Ubuntu
• UNIX shell: bash, zsh
• UNIX command: make, GNU parallel, (g)sed, grep, dos2unix,sftp,etc
• Apache Spark
• R, RStudio
• R Packages: tidyverse, SparkR, GGally, rgl, sn, xtable
• Reproducibility: Sweave
-
2019 Articles and Presentations
-
学術論文 (2019年度)(1) , , –
– , 79 , 2 , pp. 118–128, , 2019 7 .
(2) , –
– , , 2019 8 13 , .
(3) – – , , 67 , 1 , pp. 27 –
46, , 2019 10 .
(4) C. Saka, T. Oshika, and M. Jimichi, Visualization of Tax Avoidance and Tax Rate Convergence:
Exploratory Analysis of World-scale Accounting Data, Meditari Accountancy Research, Vol. 27 No.
5, 2019, pp. 695–724, Emerald Publishing Limited.
(5) , , ,
, 2019-28, pp. 1–35, 2020 1 .
(6) , , , ,
, 72 , 1 , pp. 74–80, , 2020 1 .
(7) – – , 67 , 3 , pp. 1–19,
, 2020 3 .
1
-
国際会議発表 (2019年度)(1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.
(2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:
Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,
August 14th, 2019.
(1) , , , – , ,
– , , , 2018 11 11
( ).
(2) ∗, , , ,
41 ( 61 ) , , 2019 6 1 ( ).
(3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale
accounting data,
, , 2019 7 6 ( ).
(4) ∗, , ∗, ,
(JHPCN) 11 , THE GRAND HALL( , 2019
7 11 ( ).
(5) ∗, , , – – ,
, 2019 ,
, 2019 8 24 ( ).
(6) ∗, R GIS , 2019
, , 2019 8 24 ( ).
(7) ∗, , – – , ,
78 , , 2019 9 9 ( ).
(8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, 2019 , , 2019 9 10
( ).
(9) ∗, , ∗, , RIMS
, , 2019 10 17 ( ).
(10) ∗, , , – – ,
33 , , 2019 11 30 ( ).
(11) ∗ – – ,
, 7 , , 2019 12 5
( ).
(12) ∗, , , – – , 2019
, , 2019 12 7 ( ).
(13) ∗, , , –
– , 2019 R , ,
2019 12 21 ( ).
2
-
国内会議発表(1) (2019年度)
(1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.
(2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:
Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,
August 14th, 2019.
(1) , , , – , ,
– , , , 2018 11 11
( ).
(2) ∗, , , ,
41 ( 61 ) , , 2019 6 1 ( ).
(3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale
accounting data,
, , 2019 7 6 ( ).
(4) ∗, , ∗, ,
(JHPCN) 11 , THE GRAND HALL( , 2019
7 11 ( ).
(5) ∗, , , – – ,
, 2019 ,
, 2019 8 24 ( ).
(6) ∗, R GIS , 2019
, , 2019 8 24 ( ).
(7) ∗, , – – , ,
78 , , 2019 9 9 ( ).
(8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, 2019 , , 2019 9 10
( ).
(9) ∗, , ∗, , RIMS
, , 2019 10 17 ( ).
(10) ∗, , , – – ,
33 , , 2019 11 30 ( ).
(11) ∗ – – ,
, 7 , , 2019 12 5
( ).
(12) ∗, , , – – , 2019
, , 2019 12 7 ( ).
(13) ∗, , , –
– , 2019 R , ,
2019 12 21 ( ).
2
-
国内会議発表(2) (2019年度)
(1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.
(2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:
Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,
August 14th, 2019.
(1) , , , – , ,
– , , , 2018 11 11
( ).
(2) ∗, , , ,
41 ( 61 ) , , 2019 6 1 ( ).
(3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale
accounting data,
, , 2019 7 6 ( ).
(4) ∗, , ∗, ,
(JHPCN) 11 , THE GRAND HALL( , 2019
7 11 ( ).
(5) ∗, , , – – ,
, 2019 ,
, 2019 8 24 ( ).
(6) ∗, R GIS , 2019
, , 2019 8 24 ( ).
(7) ∗, , – – , ,
78 , , 2019 9 9 ( ).
(8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and
Reproducible Research, 2019 , , 2019 9 10
( ).
(9) ∗, , ∗, , RIMS
, , 2019 10 17 ( ).
(10) ∗, , , – – ,
33 , , 2019 11 30 ( ).
(11) ∗ – – ,
, 7 , , 2019 12 5
( ).
(12) ∗, , , – – , 2019
, , 2019 12 7 ( ).
(13) ∗, , , –
– , 2019 R , ,
2019 12 21 ( ).
2
-
Database, Preprocessing of Osiris2018 Data Set (Consolidate Version)
-
Database• Bureau van Dijk (ビューロー・ヴァン・ダイク)社 (以下 BvD と略) 全世界上場・上場廃止企業データベース Osiris (オシリス)
• 世界の全上場企業90,000社強の情報を 国際比較可能な統一のフォームで収録
【収録情報】 世界の上場企業・一般事業会社の以下のデータ
• 財務情報(BS/PL/CF)- 平均15年(最長30年)
• 株主/関連会社情報 - 出資比率・種別・アーカイブ
• 株価情報 - 時価総額、β値、EPS、インデックス
• 企業概要 - 事業内容、業種分類、創業年、IPO Date 統一のフォームで収録
-
Data Set Information: Osiris2018•世界160カ国の上場企業 (93,836社) の主要財務情報 (売上高, 営業利益, 総資産など84項目) を33年分 (最長30年分) 抽出 →パネルデータ(経時観測データ)
•前処理後のデータセットは社名, 社名+BvD ID, 決算年を新たに変数として加えたため, 87項目になっている.
No_ VariableName(data7) R Variable name 変数説明
1 year(USD) year_USD 年(通貨単位)
2 BvD ID number ID 企業コード
3 Address of incorp_ - Country country 国
4 US SIC, Primary code(s) (M) SIC_code 業種コード
5 US SIC, primary code(s) description
SIC_name 業種名
6 Main exchange exchange 主取引所
7 Consolidation code cons 連結・単独
8 Closing date date 決算日
9 Number of months month 月数
10 Audit Status audit 監査
11 Accounting standard practice 会計基準
12 Source source データの出所
13 Statement unit units 単位(価格)
14 : : :
: Market price - July market_price7 市場価格7月末分
78 Market price - August market_price8 市場価格8月末分
79 Market price - September market_price9 市場価格9月末分
80 Market price - October market_price10 市場価格10月末分
81 Market price - November market_price11 市場価格11月末分
82 Market price - December market_price12 市場価格12月末分
83 Market Cap market_cap 時価総額
84 Dividend dividend 配当金
-
Data File Informations by Unix Commands
$ ls -l dataC.txt -rwxr-xr-x 1 masa staff 1548270085 4 9 20:56 dataC.txt
$ wc -l dataC.txt 3190424 dataC.txt
-
Raw Data FileCOURTAULDS PLC BvD ID number Address of incorp. - Country US SIC, Primary code(s) (M) US SIC, primary code(s) description Main exchange Consolidation code Closing date Number of months Audit Status Accounting standard Source Statement unit Currency of the statement Exchange Rate from Local Currency Fixed Assets Intangible Fixed Assets Tangible Fixed Assets Other Fixed Assets Current Assets Stock Debtors Others Cash & Cash Equivalent Total Assets Shareholders Funds Capital Other Non Current Liabilities Long Term Debt Other Non Current Liabilities Provisions Current Liabilities Loans Creditors Other Total Shareh. Funds & Liab. Working Capital Net Current Assets Enterprise Value Number of Employees Operating Revenue / Turnover Sales Costs of Goods Sold Gross Profit Other Operating Items Operating P/L Financial Revenue Financial P/L Other non Oper./Financial Items P/L before Tax Taxation P/L after Tax Extraord. & Oth. Items P/L for Period Material Costs Costs of Employees Depreciation/Amortization Financial Expenses Research & Development expenses (memo) Cash Flow Added Value EBITDA Income taxes Income Tax Payable Deferred Taxes Def. Inc. Taxes & Invest. Tax Credit Date of current Market capitalisation Current market capitalisation Market price - Year Market price - January Market price - February Market price - March Market price - April Market price - May Market price - June Market price - July Market price - August Market price - September Market price - October Market price - November Market price - December Market Cap. Cash Dividends Paid - Total 1985 (th USD) GB01605EX UNITED KINGDOM 2899 Chemicals and chemical preparations, not elsewhere specified manufacturing Unlisted C1 31/03/1986 12 Qualif n.a. Acc. Std na AR th GBP 1.48531 640,317 n.a. 595,164 45,153 1,429,166 583,281 492,083 353,801 313,400 2,069,483 844,547 146,006 698,541 387,369 276,862 110,507 n.a. 837,566 90,307 508,719 238,541 2,069,483 566,646 591,599 n.a. 68,000 3,227,134 3,227,134 -2,411,104 816,029 -510,353 229,480 n.a. -17,081 n.a. 212,399 -39,064 173,336 -18,715 154,621 n.a. -778,006 -76,196 -17,081 0 230,817 1,064,967 305,677 -39,064 28,369 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. 1986 (th USD) GB01605EX UNITED KINGDOM Unlisted C1 31/03/1987 12 Qualif n.a. Acc. Std na AR th GBP 1.60501 842,148 n.a. 795,281 46,866 1,636,947 637,188 558,864 440,896 396,918 2,479,095 1,058,663 160,982 897,681 434,315 301,420 132,895 n.a. 986,117 70,620 611,508 303,988 2,479,095 584,544 650,831 n.a. 65,400 3,630,367 3,630,367 -2,564,963 1,065,404 -628,200 342,830 n.a. -20,063 n.a. 322,767 -74,793 247,974 -33,224 214,750 n.a. -879,063 -94,374 -20,063 0 309,124 1,283,043 437,204 -74,793 59,867 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. 1987 (th USD) GB01605EX UNITED KINGDOM Unlisted C1 31/03/1988 12 Qualif n.a. Acc. Std na AR th GBP 1.87981 1,149,877 n.a. 1,089,723 60,154 1,897,287 790,458 713,386 393,443 347,388 3,047,164 1,154,388 190,048 964,340 648,533 515,443 133,090 33,461 1,244,243 113,540 517,510 613,192 3,047,164 986,334 653,044 n.a. n.a. 4,551,384 4,551,384 -3,211,083 1,340,301 -774,292 437,619 40,416 -22,934 n.a. 414,685 -95,682 319,003 -49,627 269,376 n.a. -1,128,823 -128,391 -63,349 0 397,767 1,685,621 566,009 -95,682 91,171 11,091 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.
-
Problems• 粗データセット(raw dataset)をそのままソフトウェア環境で解析することが難しい. ★ Byte Order Mark (BOM) コードの存在 ★ OS間での行末コードの相違 ★ 欠測値の存在 (NA記号が存在しない欠測値の存在) ★ レイアウトの不統一 ★ 金額に関するフォーマット(カンマ区切り) ★ 特殊記号の存在 (#など) ★ ファイルはある程度の規模があるので通常のエディタでは整形が難しい.
-
Solutions1.UNIX コマンドやインタプリター (grep,dos2unix, |, >, (g)sed など) を利用してファイルを整形
2. データ解析環境Rを用いてデータファイルをRに読み込むことができる形式(CSV, RDSファイル)に変換
-
Preprocessing
dataC.txt
Unix Shell ScriptsdataC.rda
nameC.rda
firmfinC2018.csv
firmfinC2018.frame.rds
-
Parallelization of Preprocessing of Osiris2018 (Consolidate Version)
Data Set
-
ビッグデータの前処理に関する経験則
•「前処理には, 分析・解析を行う全工程の50%~90%の時間を費やす」(e.g. Patil(2012))
-
GNU parallel https://www.gnu.org/software/parallel/• GNU parallel is a shell tool for executing jobs in parallel using one or
more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU parallel can then split the input and pipe it into commands in parallel
-
Makefileall: date > start.txt /bin/bash ./script.sh Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" date > end.txt all-p: date > start-p.txt /bin/bash ./script-p.sh Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" date > end-p.txt rda: date > start-rda.txt /bin/bash ./script.sh date > end-rda.txt rda-p: date > start-rda-p.txt /bin/bash ./script-p.sh date > end-rda-p.txt csv: Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" clean-data: rm *.rda *.rda-e *.part clean-csv: rm firmfinC2018.csv
-
script.sh$ cat script.sh #!/bin/bash # #echo "Remove BOM codes" gsed -i -s -e '1s/^\xef\xbb\xbf//' dataC.txt #echo "dos2unix" dos2unix dataC.txt echo "separate data file" grep -E "th\sUSD\)" dataC.txt > dataC.part grep -v -E "th\sUSD\)" dataC.txt > nameC.part echo "replacement special character" sed -f sedscr dataC.part > dataC.rda sed -i -e s/^$'\t'//g dataC.rda sed -e s/#//g nameC.part > nameC.rda
-
script-p.sh$ cat script-p.sh #!/bin/bash #echo "Remove BOM codes" gsed -i -s -e '1s/^\xef\xbb\xbf//' dataC.txt echo "dos2unix" parallel --pipepart -k --block 100M -a dataC.txt "dos2unix" > tmp echo "separate data file" echo "separate data file" parallel --pipepart -k --block 100M -a tmp 'grep -E "th\sUSD\)"' > dataC.part parallel --pipepart -k --block 100M -a tmp 'grep -v -E "th\sUSD\)"' > nameC.part echo "replacement special character" parallel --pipepart -k --block 100M -a dataC.part "sed -f sedscr" > tmp parallel --pipepart -k --block 100M -a tmp "sed s/^$'\t'//g" > dataC.rda parallel --pipepart -k --block 100M -a nameC.part "sed s/#//g" > nameC.rda rm tmp
-
Parallelized Preprocessing
dataC.txt
Unix Shell ScriptsdataC.rda
nameC.rda
firmfinC2018.csv
firmfinC2018.frame.rds
-
Apache Spark and R Packages
-
Apache Spark• Apache Spark is a fast and general-purpose cluster computing system. • It provides high-level APIs in Java, Scala, Python and R, and an
optimized engine that supports general execution graphs. • It also supports a rich set of higher-level tools including Spark SQL for
SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.
Quotation: http://spark.apache.org/docs/latest/index.html
-
SparkR (R on Spark)• SparkR is an R package that provides a light-weight frontend to use
Apache Spark from R. • In Spark 2.1.0, SparkR provides a distributed data frame
implementation that supports operations like selection, filtering, aggregation etc. (similar to R data frames, dplyr) but on large datasets.
• SparkR also supports distributed machine learning using MLlib. • Quotation: http://spark.apache.org/docs/latest/sparkr.html#overview
-
Connect to Spark from R by SparkR on RStudio
> Sys.setenv(SPARK_HOME = "/usr/local/Cellar/apache-spark/2.4.1/libexec") > library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"))) > sparkR.session(master = "local[*]", sparkConfig = list(spark.driver.memory =
"2g"))
SparkR
-
Data Wrangling and Transformation
-
Comparison of Data Manipulations by SparkR, dplyr, R
Manipulations Spark Style dplyr Style R Style
Selection of Columns select select df[,"colName"]
Filtering of Rows filter filter df[condition,]
Addition of Columns withColumn mutate df$colName
-
Data Wrangling of Financial Data by Spark Environments
-
Data Set: firmfinC2018.csv
-
Data File Information$ head -n 2 firmfinC2018.csv firm,year_USD,ID,country,SIC_code,SIC_name,exchange,cons,date,month,audit,practice,source,units,currncy,exchange_rate,assets_fix,assets_int,assets_tang,assets_other_fix,assets_cur,stock,debtors,assets_other_cur,cash,assets_total,shareholders,capital,shareholders_other,liabilities_non_cur,debt_long,liabilities_other_non_cur,provisions,liabilities_cur,loans,creditors,liabilities_other_cur,total_s_l,capital_working,assets_net_cur,enterprise_value,employees,operating_revenue,sales,costs_goods,profit_gross,expenses_other,EBIT,revenue_fin,PL_fin,PL_other,PL_before_tax,tax,PL_after_tax,PL_extr,net_income,costs_material,costs_employees,depr_amor,interest_paid,R_D,cash_flow,add_value,EBITDA,tax_income,tax_pay_income,tax_deferred,tax_credit,date_cur_market_cap,market_cap_cur,year_mp,market_price1,market_price2,market_price3,market_price4,market_price5,market_price6,market_price7,market_price8,market_price9,market_price10,market_price11,market_price12,market_cap,dividend,firmID,year COURTAULDS PLC,1985 (th USD),GB01605EX,UNITED KINGDOM,2899,Chemicals and chemical preparations not elsewhere specified manufacturing,Unlisted,C1,1986-03-31,12,Qualif NA,Acc. Std na,AR,th,GBP,1.48531,640317,NA,595164,45153,1429166,583281,492083,353801,313400,2069483,844547,146006,698541,387369,276862,110507,NA,837566,90307,508719,238541,2069483,566646,591599,NA,68000,3227134,3227134,2411104,816029,510353,229480,NA,-17081,NA,212399,39064,173336,-18715,154621,NA,778006,76196,17081,-0,230817,1064967,305677,39064,28369,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,COURTAULDS PLC GB01605EX,1985
-
SparkR on RStudio
-
Data Wrangling as SparkDataFrame and Transform SparkDataFrame to R data.frame:
SparkR on R and RStudio
RStudio
firmfinC2018.csv
SparkR read.df
firmfin.sdf
SparkDataFrameSpark
filter,select, collect firmfin2015
R data.frame
-
Preprocessing and Data Wrangling
dataC.txt
Unix Shell Scripts dataC.rda
nameC.rda
firmfinC2018.csv
firmfinC2018.frame.rds
SparkR read.df firmfin
.sdf
SparkDataFrame
Spark filter,select,
collectfirmfin2015
R data.frame
-
Parallelized Preprocessing and Data Wrangling
firmfinC2018.csv
firmfinC2018.frame.rds
SparkR read.df firmfin
.sdf
SparkDataFrame
Spark filter,select,
collectfirmfin2015
R data.frame
dataC.txt
Unix Shell ScriptsdataC.rda
nameC.rda
-
Statistical Modeling with Osiris2018 Data: Verification of Reproducibility
-
Modeling of Distribution of log(sales)
-
Skew-Normal Distribution and Related Families
• Azzalini (1985) generalized the normal distribution to have non-zero skewness.
• It is called the skew-normal distribution. • It has been used for modeling and analyzing skewed data. • Additionally, some related families of distributions included the skew-t
distribution are also studied in Azzalini and Capitanio (2014).
-
Skew-Normal DistributionSkew-normal DistributionNotation of Distribution: If the distribution of the random variable (r.v.) X is the
skew-normal, then we write as follows:
X ∼ SN(ξ,ω2,α)
where (ξ,ω2,α) are called direct parameters (DP).
Probability Density Function:
fSN(x | ξ,ω,α) :=2
ωφ
(x− ξω
)Φ
(αx− ξω
)(4.1)
where x ∈ R := (−∞,∞), ξ ∈ R, ω ∈ R+ := (0,∞), α ∈ R, and
φ(x) :=1√2π
exp
(−x
2
2
); p.d.f. of Standard Normal Distribution,
Φ(x) :=
∫ x
−∞φ(z)dz; c.d.f. of Standard Normal Distribution.
15 / 77
-
Fitting Skew-Normal Distribution to log(sales)Fitting Skew-normal Distribution to Log of Sales
! Maximum Likelihood Estimates:(ξ̂, ω̂, α̂) = (13.01, 3.29,−1.15)
! Statistical Model:
fSN(log(sales) | ξ̂, ω̂, α̂) :=2
ω̂φ
(log(sales)− ξ̂
ω̂
)Φ
(α̂log(sales)− ξ̂
ω̂
)
! Histogram with Statistical Model and Q-Q Plot:
Figure: Histogram of log(sales) withStatistical Model fSN(log(sales) | ξ̂, ω̂, α̂) Figure: Q-Q Plot of log(sales)
17 / 77
-
Skew-t DistributionSkew-t DistributionNotation of Distribution: If the distribution of X is the skew-t, then we write as
follows:X ∼ ST(ξ,ω2,α, ν)
where (ξ,ω2,α, ν) are called the direct parameters.
Probability Density Function:
fST(x | ξ,ω,α, ν) =2
ωft
(x− ξiω
∣∣∣∣ ν)Ft
αx− ξω
√√√√ν + 1
(x−ξω
)2+ ν
∣∣∣∣∣∣∣ν + 1
(4.2)where x ∈ R := (−∞,∞), ξ ∈ R, ω ∈ R+ := (0,∞), α ∈ R, ν ∈ R+, and
ft(x | ν) :=Γ(ν+12
)
Γ(ν2
)√πν
(1 +
x2
ν
)− ν+12; p.d.f. of t distribution,
Ft(x | ν) :=∫ x
−∞ft(u | ν)du; c.d.f. of t distribution
18 / 77
-
Fitting Skew-t Distribution to log(sales)Fitting Skew-t Distribution to Log of Sales! Maximum Likelihood Estimates:
(ξ̂, ω̂, α̂, ν̂) = (12.57, 2.9,−0.83, 22.42)! Statistical Model:
fST(log(sales) | ξ̂, ω̂, α̂, ν̂) =2
ω̂ft
(log(sales) − ξ̂
ω̂| ν̂)
Ft
α̂
log(sales) − ξ̂
ω̂
√√√√√√
ν̂ + 1(
log(sales)−ξ̂ω̂
)2+ ν̂
| ν̂ + 1
! Histogram with Statistical Model and Q-Q Plot:
Figure: Histogram of log(sales) withStatistical ModelfST(log(sales) | ξ̂, ω̂, α̂, ν̂)
Figure: Q-Q Plot of log(sales)20 / 77
-
Box-Cox Transformation of log(sales)and Maximum Log-likelihood
Box-Cox
Box and Cox (1964):
X (λ) :=
Xλ − 1λ
, λ "= 0,log(X ), λ = 0
(3)
! Box-Cox , (power normal transformation)! Box-Cox : Carroll and Ruppert (1988),
Draper and Smith (1998), Fox and Weisberg (2019)
! :X (λ) ∼ N(µ,σ2) (; µ, σ2 ) (4)
Box-Cox
Box and Cox (1964):
X (λ) :=
Xλ − 1λ
, λ "= 0,log(X ), λ = 0
(3)
! Box-Cox , (power normal transformation)! Box-Cox : Carroll and Ruppert (1988),
Draper and Smith (1998), Fox and Weisberg (2019)
! :X (λ) ∼ N(µ,σ2) (; µ, σ2 ) (4)
! λ; (transformation parameter)! (Maximum Likelihood: ML) ;
(profile log-likelihood function) λ
"profile(λ) := −n
2log(2πσ̂2(λ))−
n∑
i=1
(x (λ)i − µ̂(λ))2
2σ̂2(λ)+ (λ− 1)
n∑
i=1
log xi
= c − n2log(σ̂2(λ)) + (λ− 1)
n∑
i=1
log xi (5)
,
µ̂(λ) :=1
n
n∑
i=1
x (λ)i (6)
σ̂2(λ) :=1
n
n∑
i=1
(x (λ)i − µ̂(λ))2 (7)
-
Histogram and Normal Q-Q Plot for Box-Cox Transformation of log(sales)( ) Q-Q
Figure: Box-Cox ( )Q-Q
-
Web Application for Box-Cox Transformation
-
Double-log Modeling for log(sales)
-
Double-log Model• Cobb-Daglas Type Model:
• Log-linear Model:
• Assumptions of Error Distributions:
0 5 10 15 20
0.00
0.05
0.10
0.15
observed variable
probability density
Empirical values and fitted distribution
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●�