1. Data Profile

This section summarizes each clean table in data/: row count, date range, number of distinct tickers, and the highest share of missing values in any column.

Table 0: Profile of each clean table
table rows date_from date_to n_tickers max_pct_missing
company 141 NA NA 141 1e+02
universe_q 2000 2020-12-31 2025-09-30 141 0e+00
price_daily 169286 2021-01-04 2025-12-31 141 0e+00
financials_q 2943 2020-12-31 2025-12-31 141 3e-02
index_daily 1214 2021-01-04 2025-12-31 NA 0e+00

Comment. All five required tables are loaded from data/. The last column shows the worst column in each table for missing values; column-level missing values and the decisions made are documented in cleaning_log.md.

2. Query Results

Q1. Stocks with at least 12 months of price data, by industry

Table 1: Stocks with >= 12 months of price data, by industry
Industry Number of stocks
M23G 22
M23A 13
M23D 13
M28L 12
M23B 7
M17C 5
M26A 5
M15B 4
M23C 4
M23K 4
M28A 4
M13A 3
M20A 3
M23T 3
M11A 2
M14C 2
M15A 2
M22X 2
M23H 2
M23U 2
M25A 2
M26D 2
M28K 2
M29A 2
M99K 2
M99Z 2
M12B 1
M12C 1
M12Z 1
M13C 1
M14A 1
M16 1
M17G 1
M18 1
M19A 1
M20B 1
M21A 1
M22A 1
M23E 1
M26B 1
M99B 1

Comment. In total, 141 stocks have at least 12 months of price data. The largest industry is M23G with 22 stocks, and 15 industries contain only one stock, so industry-level results should be read with care.

Q2. Top-100 universe turnover

Table 2: Top-100 universe turnover by quarter-end
quarter_end prev_quarter_end n_entered n_left turnover_rate
2021-03-31 2020-12-31 5 5 0.05
2021-06-30 2021-03-31 9 9 0.09
2021-09-30 2021-06-30 6 6 0.06
2021-12-30 2021-09-30 4 4 0.04
2022-03-31 2021-12-30 6 6 0.06
2022-06-30 2022-03-31 7 7 0.07
2022-09-30 2022-06-30 5 5 0.05
2022-12-30 2022-09-30 4 4 0.04
2023-03-31 2022-12-30 4 4 0.04
2023-06-30 2023-03-31 6 6 0.06
2023-09-28 2023-06-30 5 5 0.05
2023-12-29 2023-09-28 3 3 0.03
2024-03-29 2023-12-29 6 6 0.06
2024-06-28 2024-03-29 3 3 0.03
2024-09-30 2024-06-28 3 3 0.03
2024-12-31 2024-09-30 5 5 0.05
2025-03-31 2024-12-31 5 5 0.05
2025-06-30 2025-03-31 3 3 0.03
2025-09-30 2025-06-30 5 5 0.05

Comment. On average 4.9 stocks enter and the same number leave each quarter, because the universe always has exactly 100 members. Mean turnover is 4.9% per quarter and the maximum is 9%, so the universe is fairly stable.

Q3. Monthly returns (stock-month)

Table 3a: Summary of monthly returns
Statistic Value
Stock-months 8369.0000
With a return 8228.0000
NA returns 141.0000
|Return| > 100% 5.0000
Min -0.4478
Median 0.0068
Mean 0.0174
Max 1.8661

Comment. Returns are computed from month-end adjusted closes within each ticker. A ticker’s first month has no return (NA), and so does any month whose previous month-end is missing. There are 5 monthly returns beyond +/-100%; these are checked for split or adjustment errors in cleaning_log.md.

Q4. Average monthly return and volatility by industry

Table 3b: Average monthly return and volatility by industry
Industry Stocks Observations Mean return SD of return
M17G 1 13 0.0963 0.3641
M20B 1 59 0.0538 0.1394
M17C 5 272 0.0414 0.1997
M26A 5 295 0.0410 0.2065
M15B 4 236 0.0349 0.1384
M23H 2 118 0.0347 0.1222
M23B 7 413 0.0297 0.1320
M18 1 59 0.0254 0.1594
M26D 2 118 0.0227 0.1155
M16 1 59 0.0223 0.1382
M23D 13 765 0.0222 0.1159
M23A 13 767 0.0204 0.1062
M23T 3 177 0.0183 0.0883
M23G 22 1278 0.0181 0.1368
M28L 12 708 0.0164 0.0511
M23K 4 236 0.0139 0.0581
M20A 3 177 0.0138 0.1436
M12B 1 59 0.0125 0.0613
M28A 4 236 0.0122 0.0403
M25A 2 118 0.0120 0.0845
M14C 2 118 0.0108 0.0904
M19A 1 59 0.0086 0.0860
M23C 4 236 0.0085 0.1027
M28K 2 118 0.0069 0.0843
M23U 2 118 0.0066 0.1100
M12C 1 59 0.0059 0.0313
M99B 1 59 0.0058 0.0846
M14A 1 59 0.0058 0.0420
M29A 2 118 0.0049 0.0712
M22A 1 59 0.0032 0.0961
M99K 2 118 0.0026 0.0617
M26B 1 59 0.0024 0.0253
M11A 2 118 0.0013 0.0576
M21A 1 59 0.0011 0.0790
M15A 2 118 0.0003 0.1039
M23E 1 59 -0.0013 0.1340
M13A 3 177 -0.0037 0.0842
M13C 1 59 -0.0063 0.0693
M12Z 1 59 -0.0067 0.0319
M22X 2 118 -0.0072 0.0672
M99Z 2 118 -0.0122 0.0911

Comment. The industry with the highest mean return is M17G (9.63% per month), but it rests on only 13 observations, so it is not reliable. Industries with few stocks and few observations also show the highest volatility, which is a sign that small samples and possible outliers drive the extremes.

Q5. Price gaps longer than 10 trading days

No gap longer than 10 trading days was found.

Comment. Gaps are measured against the TAIEX trading calendar, and days with zero volume are treated as no-price days because TEJ carries the last price forward during suspensions. The query found 0 gaps affecting 0 stocks. A test that deletes 11 consecutive days of one stock and confirms the query detects it is included in queries.R.

Q6. Analysis table (one row per stock-month)

The table has 6000 rows, 141 stocks and 60 months. Each row is a stock that was in the top 100 at the previous quarter-end, with accounting data taken only from statements whose statutory deadline had already passed at the end of month t.

Table 5a: Column dictionary of the analysis table
Column Type Unit Meaning
ticker text - TWSE stock code
month Date - Month t (marked by the first day of the month)
formation_date Date - Last trading day of month t (portfolio formation date)
prev_quarter_end Date - Quarter-end whose top-100 ranking decides eligibility
rank_prev_q integer - Market-cap rank at that quarter-end (1 to 100)
ret_next numeric ratio Return in month t+1 (0.05 = 5%); NA in the last month
log_mktcap numeric ln(million NTD) Size: natural log of market cap at the end of month t
bm numeric ratio Book-to-market = book equity / market cap
roe numeric ratio Trailing 4-quarter net income to parent / average equity
revenue numeric see dictionary Revenue field from the statement used
stmt_period_end Date - Period end of the statement used
stmt_deadline Date - Statutory filing deadline of that statement (must be <= formation_date)
Table 5b: Missing values in the analysis table
Variable Missing Percent Reason
ret_next 100 1.7 No next-month price (last sample month) or the stock left the market
log_mktcap 0 0.0 No missing values: price and shares are available in every row
bm 200 3.3 No statement had been public yet at month t, or book equity is missing
roe 1400 23.3 Needs 4 consecutive quarters of net income and equity 4 quarters earlier; NA if the series is incomplete (under investigation, see cleaning_log.md)
revenue 202 3.4 No statement public yet, or the revenue field is missing
Table 5c: Observations dropped for non-positive book equity
rows_dropped tickers_affected
0 0
Table 6: First 10 rows of the analysis table
ticker month formation_date prev_quarter_end rank_prev_q ret_next log_mktcap bm roe revenue stmt_period_end stmt_deadline
1101 2021-01-01 2021-01-29 2020-12-31 29 0.0461 12.3700 NA NA NA NA NA
1101 2021-02-01 2021-02-26 2020-12-31 29 0.1143 12.4196 NA NA NA NA NA
1101 2021-03-01 2021-03-31 2020-12-31 29 0.1132 12.5383 0.7849 NA 32289325 2020-12-31 2021-03-31
1101 2021-04-01 2021-04-29 2021-03-31 28 -0.0096 12.6623 0.6933 NA 32834962 2020-12-31 2021-03-31
1101 2021-05-01 2021-05-31 2021-03-31 28 -0.0116 12.6527 0.7218 NA 21142807 2021-03-31 2021-05-15
1101 2021-06-01 2021-06-30 2021-03-31 28 0.0314 12.6517 0.7225 NA 21371294 2021-03-31 2021-05-15
1101 2021-07-01 2021-07-30 2021-06-30 28 -0.0139 12.6826 0.7005 NA 21371294 2021-03-31 2021-05-15
1101 2021-08-01 2021-08-31 2021-06-30 28 0.0526 12.6004 0.7770 NA 27127459 2021-06-30 2021-08-14
1101 2021-09-01 2021-09-30 2021-06-30 28 -0.0539 12.6518 0.7381 NA 27130206 2021-06-30 2021-08-14
1101 2021-10-01 2021-10-29 2021-09-30 26 -0.0466 12.5965 0.7800 NA 27133870 2021-06-30 2021-08-14

Comment. The look-ahead rule works as follows: for each stock-month, only statements with stmt_deadline <= formation_date are eligible, and the latest eligible quarter is kept. Rows with NA in bm or roe mean that no eligible statement existed yet, or that trailing-4-quarter ROE could not be computed.

## Complete cases: 4500 of 6000
## No look-ahead (deadline <= formation_date): TRUE