LinearModels регрессия
Я пытаюсь запустить двухступенчатую модель регрессии на некоторых фондовых факторах, используя библиотеку линейных моделей. Я создал Panel Data на 300 акций с ежемесячными характеристиками, которая выглядит следующим образом. Моя дата и тикер являются частью многоуровневого многоуровневого индекса, а для уровня даты установлено время даты. Я хотел бы запустить регрессию для каждого тикера в качестве переменной Y, а Div Div Yield и Current Ratio - как X переменных. Однако, когда я запускаю регрессию, я не могу регрессировать факторы одновременно на доходности (я могу сделать только один фактор за раз). Есть ли у кого-нибудь опыт использования линейных моделей на отдельных акциях? Моя ошибка гласит, что мне нужно больше портфелей, чем факторов, но в этом случае мои "портфели" - это мои отдельные тикеры, которые превосходят мои 2 фактора. Как я могу получить пакет, чтобы понять, что каждая акция является "портфелем"?
Dividend Yield Current Ratio Returns
2016-10-31 AAL 0.985222 0.760201 10.898660
AAPL 0.66510 0.88956 4.97
from linearmodels.asset_pricing import LinearFactorModel
import statsmodels.api as sm
factors = join3[['Dividend Yield','Current Ratio']]
portfolios=join3[['Returns']]
mod = LinearFactorModel(portfolios, factors)
res = mod.fit()
ValueError Traceback (most recent call last)
<ipython-input-133-2b259cbd5317> in <module>()
3 factors = join3[['Dividend Yield','Current Ratio']]
4 portfolios=join3[['Returns']]
----> 5 mod = LinearFactorModel(portfolios, factors)
6 res = mod.fit()
c:\users\philz\anaconda\envs\py36\lib\site-packages\linearmodels\asset_pricing\model.py in __init__(self, portfolios, factors, risk_free, sigma)
331 self._risk_free = bool(risk_free)
332 super(LinearFactorModel, self).__init__(portfolios, factors)
--> 333 self._validate_additional_data()
334 if sigma is None:
335 self._sigma_m12 = self._sigma_inv = self._sigma = np.eye(self.portfolios.shape[1])
c:\users\philz\anaconda\envs\py36\lib\site-packages\linearmodels\asset_pricing\model.py in _validate_additional_data(self)
353 nrp = (f.shape[1] + int(self._risk_free))
354 if p.shape[1] < nrp:
--> 355 raise ValueError('The number of test portfolio must be at least as '
356 'large as the number of risk premia, including the '
357 'risk free rate if estimated.')
ValueError: The number of test portfolio must be at least as large as the number of risk premia, including the risk free rate if estimated.