Модель ценообразования капитальных активов с отсутствующими данными

Этот пример иллюстрирует реализацию модели ценообразования капитальных активов (CAPM) при наличии отсутствующих данных.

Модель ценообразования капитальных активов

Модель ценообразования капитальных активов (CAPM) является почтенным, но часто злонамеренным инструментом для характеристики связей между активами и рыночными ценами. Хотя при его реализации и интерпретации возникает много проблем, одна из проблем, с которой сталкиваются практикующие специалисты, заключается в оценке коэффициентов CAPM с неполными данными о ценах акций.

Учитывая множество допущений, которые можно найти в ссылках (см. Шарп [3], Линтнер [2], Джарроу [1] и Шарп, и т. д. al. [4]), CAPM делает вывод, что возвраты активов имеют линейную связь с рыночными возвратами. В частности, с учетом возврата всех акций, которые представляют собой рынок, обозначенный как M и возврат безрискового актива, обозначаемого как CCAPM утверждает, что возврат каждого актива R(i) на рынке имеет ожидаемую форму

E[R(i)] = C + b(i) * (E[M] - C)

для активов i = 1, ... , n, где b(i) является параметром, который определяет степень взаимодействия между данным активом и базовым рынком. Иными словами, ожидаемый возврат каждого актива равен возврату безрискового актива плюс скорректированная на риск ожидаемый возврат за вычетом безрисковых возвратов активов. Набор параметров b(1), ... , b(n) называются бета-версиями активов.

Обратите внимание, что бета-версия актива имеет форму

b(i) = cov(R(i),M)/var(M)

это отношение ковариации между активами и рыночными возвратами, разделенное на отклонение рыночных возвратов. Если у актива бета-версия равна 1, считается, что актив переходит с рынком; если у актива бета больше 1, считается, что актив более волатильен, чем рынок; и если у актива бета-версия меньше 1, считается, что актив менее волатильен, чем рынок.

Оценка CAPM

Стандартная форма модели CAPM для оценки является линейной моделью с дополнительными параметрами для каждого актива, чтобы охарактеризовать остаточные ошибки. Для каждого из n активы с m выборки наблюдаемых возвратов активов R(k, i), рыночные возвраты M(k)и безрисковые возвраты от активов C(k), модель оценки имеет вид

R(k,i) = a(i) + C(k) + b(i) * (M(k) - C(k)) + V(k,i)

для выборок k = 1, ... , m и активы i = 1, ... , n, где a(i) является параметром, который задает несистемный возврат актива, b(i) - бета-версия актива, и V(k,i) - остаточная ошибка для каждого актива со связанной случайной переменной V(i).

Набор параметров a(1), ... , a(n) называются alphas актива. Строгая форма CAPM определяет, что альфа должны быть нулем и что отклонения от нуля являются результатом временного дисбаланса. Однако на практике активы могут иметь ненулевые альфа, где большая часть активного управления инвестициями посвящена поиску активов с эксплуатируемыми ненулевыми альфа.

Чтобы допустить возможность ненулевых альфа, модель оценки обычно стремится оценить альфа и выполнить тесты, чтобы определить, являются ли альфа статистически равными нулю.

Остаточные ошибки V(i) приняты, что имеют моменты

E[V(i)] = 0

и

E[V(i) * V(j)] = S(i,j)

для активов i,j = 1, ... , n, где параметры S(1,1), ... , S(n,n) называются остаточными или несистемными дисперсиями/ковариациями.

Квадратный корень остаточного отклонения каждого актива, т.е. sqrt(S(i,i)) для i = 1, ... , n, говорят, что это остаточный или несистемный риск актива, поскольку он характеризует остаточные изменения в ценах активов, которые не могут быть объяснены изменениями в рыночных ценах.

Оценка с отсутствующими данными

Хотя бета-версии могут быть оценены для компаний с достаточно длинной историей возвратов активов, оценить беты для недавних IPO крайне сложно. Однако, если существует набор достаточно наблюдаемых компаний, который, как можно ожидать, будет иметь некоторую степень корреляции с движением цен на акции новой компании, например, компаний в той же отрасли, что и новая компания, то можно получить вмененные оценки для новых бет компании с стандартными программами регрессии недостающих данных в Financial Toolbox™.

Отдельная оценка некоторых бета-версий технологических запасов

Чтобы проиллюстрировать, как использовать стандартные программы регрессии недостающих данных, мы оценим беты для двенадцати технологических запасов, где один запас (GOOG) является IPO.

Во-первых, даты загрузки, общие возвраты и символы тикера для двенадцати запасов из MAT-файла CAPMuniverse.

load CAPMuniverse
whos Assets Data Dates
  Name           Size             Bytes  Class     Attributes

  Assets         1x14              1568  cell                
  Data        1471x14            164752  double              
  Dates       1471x1              11768  double              
Dates = datetime(Dates,'ConvertFrom','datenum');

Активы в модели имеют следующие символы, где последние две серии являются прокси для рынка и безрискового актива.

Assets(1:7)
ans = 1x7 cell
  Columns 1 through 6

    {'AAPL'}    {'AMZN'}    {'CSCO'}    {'DELL'}    {'EBAY'}    {'GOOG'}

  Column 7

    {'HPQ'}

Assets(8:14)
ans = 1x7 cell
  Columns 1 through 6

    {'IBM'}    {'INTC'}    {'MSFT'}    {'ORCL'}    {'YHOO'}    {'MARKET'}

  Column 7

    {'CASH'}

Данные охватывают период с 1 января 2000 года по 7 ноября 2005 года с ежедневными общими возвратами. Две акции в этой вселенной имеют отсутствующие значения, которые представлены NaNs. Один из двух запасов имел IPO в течение этого периода и, следовательно, имеет значительно меньше данных, чем другие запасы.

Первым шагом является вычисление отдельных регрессий для каждого запаса, где запасы с отсутствующими данными имеют оценки, которые отражают их пониженную наблюдаемость.

[NumSamples, NumSeries] = size(Data);
NumAssets = NumSeries - 2;

StartDate = Dates(1);
EndDate = Dates(end);

Alpha = NaN(1, length(NumAssets));
Beta = NaN(1, length(NumAssets));
Sigma = NaN(1, length(NumAssets));
StdAlpha = NaN(1, length(NumAssets));
StdBeta = NaN(1, length(NumAssets));
StdSigma = NaN(1, length(NumAssets));
for i = 1:NumAssets
	% Set up separate asset data and design matrices
	TestData = zeros(NumSamples,1);
	TestDesign = zeros(NumSamples,2);

	TestData(:) = Data(:,i) - Data(:,14);
	TestDesign(:,1) = 1.0;
	TestDesign(:,2) = Data(:,13) - Data(:,14);

	% Estimate the CAPM for each asset separately.
	[Param, Covar] = ecmmvnrmle(TestData, TestDesign);

	% Estimate the ideal standard errors for covariance parameters.
	[StdParam, StdCovar] = ecmmvnrstd(TestData, TestDesign, Covar, 'fisher');
	
	% Estimate the sample standard errors for model parameters.
	StdParam = ecmmvnrstd(TestData, TestDesign, Covar, 'hessian');

	% Set up results for the output.
	Alpha(i) = Param(1);
	Beta(i) = Param(2);
	Sigma(i) = sqrt(Covar);

	StdAlpha(i) = StdParam(1);
	StdBeta(i) = StdParam(2);
	StdSigma(i) = sqrt(StdCovar);
end

displaySummary('Separate', StartDate, EndDate, NumAssets, Assets, Alpha, StdAlpha, Beta, StdBeta, Sigma, StdSigma)
Separate regression with daily total return data from 03-Jan-2000 to 07-Nov-2005 ...
       Alpha                Beta                 Sigma               
  ---- -------------------- -------------------- --------------------
  AAPL    0.0012 (  1.3882)    1.2294 ( 17.1839)    0.0322 (  0.0062)
  AMZN    0.0006 (  0.5326)    1.3661 ( 13.6579)    0.0449 (  0.0086)
  CSCO   -0.0002 (  0.2878)    1.5653 ( 23.6085)    0.0298 (  0.0057)
  DELL   -0.0000 (  0.0368)    1.2594 ( 22.2164)    0.0255 (  0.0049)
  EBAY    0.0014 (  1.4326)    1.3441 ( 16.0732)    0.0376 (  0.0072)
  GOOG    0.0046 (  3.2107)    0.3742 (  1.7328)    0.0252 (  0.0071)
   HPQ    0.0001 (  0.1747)    1.3745 ( 24.2390)    0.0255 (  0.0049)
   IBM   -0.0000 (  0.0312)    1.0807 ( 28.7576)    0.0169 (  0.0032)
  INTC    0.0001 (  0.1608)    1.6002 ( 27.3684)    0.0263 (  0.0050)
  MSFT   -0.0002 (  0.4871)    1.1765 ( 27.4554)    0.0193 (  0.0037)
  ORCL    0.0000 (  0.0389)    1.5010 ( 21.1855)    0.0319 (  0.0061)
  YHOO    0.0001 (  0.1282)    1.6543 ( 19.3838)    0.0384 (  0.0074)

The Alpha столбец содержит альфа-оценки для каждого запаса, который близок к нулю, как ожидалось. В сложение t-статистика (которая заключена в круглые скобки) обычно отвергает гипотезу о том, что альфа ненулевые на уровне значимости 99,5%.

The Beta столбец содержит бета-оценки для каждого запаса, который также имеет t-статистику, заключенную в круглые скобки. Для всех акций, кроме GOOG, гипотеза о том, что беты ненулевые, принята на уровне значимости 99,5%. Казалось бы, однако, что GOOG не имеет достаточных данных, чтобы получить значимую оценку для беты, поскольку его t-статистика подразумевала бы отказ от гипотезы ненулевой беты.

The Sigma столбец содержит остаточные стандартные отклонения, то есть оценки для несистемных рисков. Вместо t-статистики связанные стандартные ошибки для остаточных стандартных отклонений заключаются в круглые скобки.

Сгруппированная оценка некоторых бета-версий технологических запасов

Чтобы оценить беты на акции для всех двенадцати акций, создайте модель совместной регрессии, которая группирует все двенадцать акций в рамках одного проекта (поскольку каждый запас имеет одну и ту же матрицу проекта, эта модель на самом деле является примером, казалось бы, несвязанной регрессии). Функция для оценки параметров модели ecmmvnrmle и функция для оценки стандартных ошибок ecmmvnrstd.

Поскольку GOOG имеет значительное количество отсутствующих значений, прямое использование отсутствующей функции данных ecmmvnrmle требуется 482 итерации, чтобы сходиться. Для этого может потребоваться много времени. Для краткости параметрические и ковариационные оценки после первых 480 итераций содержатся в MAT-файле (CAPMgroupparam) и используется в качестве начальных оценок для вычисления бет запасов.

load CAPMgroupparam
whos Param0 Covar0
  Name         Size            Bytes  Class     Attributes

  Covar0      12x12             1152  double              
  Param0      24x1               192  double              

Теперь оцените параметры для набора двенадцати запасов.

NumParams = 2 * NumAssets;

% Set up the grouped asset data and design matrices.
TestData = zeros(NumSamples, NumAssets);
TestDesign = cell(NumSamples, 1);
Design = zeros(NumAssets, NumParams);

for	k = 1:NumSamples
	for i = 1:NumAssets
		TestData(k,i) = Data(k,i) - Data(k,14);
		Design(i,2*i - 1) = 1.0;
		Design(i,2*i) = Data(k,13) - Data(k,14);
	end
	TestDesign{k} = Design;
end

% Estimate the CAPM for all assets together with initial parameter estimates.
[Param, Covar] = ecmmvnrmle(TestData, TestDesign, [], [], [], Param0, Covar0);

% Estimate the ideal standard errors for covariance parameters.
[StdParam, StdCovar] = ecmmvnrstd(TestData, TestDesign, Covar, 'fisher');

% Estimate the sample standard errors for model parameters.
StdParam = ecmmvnrstd(TestData, TestDesign, Covar, 'hessian');

% Set up results for the output.
Alpha = Param(1:2:end-1);
Beta = Param(2:2:end);
Sigma = sqrt(diag(Covar));

StdAlpha = StdParam(1:2:end-1);
StdBeta = StdParam(2:2:end);
StdSigma = sqrt(diag(StdCovar));

displaySummary('Grouped', StartDate, EndDate, NumAssets, Assets, Alpha, StdAlpha, Beta, StdBeta, Sigma, StdSigma)
Grouped regression with daily total return data from 03-Jan-2000 to 07-Nov-2005 ...
       Alpha                Beta                 Sigma               
  ---- -------------------- -------------------- --------------------
  AAPL    0.0012 (  1.3882)    1.2294 ( 17.1839)    0.0322 (  0.0062)
  AMZN    0.0007 (  0.6086)    1.3673 ( 13.6427)    0.0450 (  0.0086)
  CSCO   -0.0002 (  0.2878)    1.5653 ( 23.6085)    0.0298 (  0.0057)
  DELL   -0.0000 (  0.0368)    1.2594 ( 22.2164)    0.0255 (  0.0049)
  EBAY    0.0014 (  1.4326)    1.3441 ( 16.0732)    0.0376 (  0.0072)
  GOOG    0.0041 (  2.8907)    0.6173 (  3.1100)    0.0337 (  0.0065)
   HPQ    0.0001 (  0.1747)    1.3745 ( 24.2390)    0.0255 (  0.0049)
   IBM   -0.0000 (  0.0312)    1.0807 ( 28.7576)    0.0169 (  0.0032)
  INTC    0.0001 (  0.1608)    1.6002 ( 27.3684)    0.0263 (  0.0050)
  MSFT   -0.0002 (  0.4871)    1.1765 ( 27.4554)    0.0193 (  0.0037)
  ORCL    0.0000 (  0.0389)    1.5010 ( 21.1855)    0.0319 (  0.0061)
  YHOO    0.0001 (  0.1282)    1.6543 ( 19.3838)    0.0384 (  0.0074)

Хотя результаты для полных запасов данных одинаковы, заметьте, что бета-оценки для AMZN и GOOG (которые являются двумя запасами с отсутствующими значениями) отличаются от оценок, выведенных для каждого запаса отдельно. Поскольку AMZN имеет мало отсутствующих значений, различия в оценках малы. Однако с GOOG различия более выражены.

t-статистическая величина для бета-оценки GOOG в настоящее время значима на уровне значимости 99,5%. Обратите внимание, однако, что t-статистика для бета-оценок основана на стандартных ошибках из выборки Hessian, которая, в отличие от информационной матрицы Фишера, учитывает повышенную неопределенность в оценке из-за отсутствующих значений. Если t-статистическая величина получена из более оптимистичной информационной матрицы Фишера, t-статистическая величина для GOOG 8.25. Таким образом, несмотря на увеличение неопределенности из-за недостающих данных, GOOG, тем не менее, имеет статистически значимую оценку для бета-версии.

Наконец, обратите внимание, что бета-оценка для GOOG 0.62 - значение, которое может потребовать некоторого объяснения. В то время как рынок был волатильным в течение этого периода с боковыми движениями цен, GOOG постоянно ценил в значении. Следовательно, он менее коррелирует, чем рынок, что, в свою очередь, подразумевает, что он менее волатильен, чем рынок с бета менее 1.

Ссылки

[1] Р. А. Джарроу. Финансовая теория. Prentice-Hall, Inc., 1988.

[2] Дж. Линтнер. «Оценка рисковых активов и выбор рискованных инвестиций в акции». Обзор экономики и статистики. Том 14, 1965, с. 13-37.

[3] У. Ф. Шарп. «Цены на капитальные активы: теория рыночного равновесия в условиях риска». Финансовый журнал. Том 19, 1964, с. 425-442.

[4] W. F. Sharpe, G. J. Alexander, and J. V. Bailey, Investments. 6-е изд., Prentice-Hall, Inc., 1999.

Служебные функции

function displaySummary(regressionType, StartDate, EndDate, NumAssets, Assets, Alpha, StdAlpha, Beta, StdBeta, Sigma, StdSigma)
fprintf(1,'%s regression with daily total return data from %s to %s ...\n', ...
	regressionType, string(StartDate),string(EndDate));
fprintf(1,'  %4s %-20s %-20s %-20s\n',' ','Alpha','Beta','Sigma');
fprintf(1,'  ---- -------------------- -------------------- --------------------\n');

for i = 1:NumAssets
	fprintf('  %4s %9.4f (%8.4f) %9.4f (%8.4f) %9.4f (%8.4f)\n', ...
		Assets{i},Alpha(i),abs(Alpha(i)/StdAlpha(i)), ...
		Beta(i),abs(Beta(i)/StdBeta(i)),Sigma(i),StdSigma(i));
end

end