регрессия по тренду + сезонность с использованием статистических моделей Python

У меня есть вопрос относительно регрессии в python. Короче говоря, мне нужно найти модель вида yt = mt + st, где mt и st — тренды и сезонная составляющая соответственно. В моем предыдущем анализе я обнаружил, что хорошей моделью для mt является квадратичный тренд типа mt = a0 + a1*t + a2*t^2 посредством моего регрессионного анализа. Теперь, когда я хочу добавить сезонную составляющую, здесь у меня самые тяжелые времена. Теперь я подошел к этому двумя способами... один - через программирование R, где я вызываю объекты R в python, а другой - исключительно через python. Теперь, следуя примеру из моей книги, я сделал следующее, используя R:

%load_ext rmagic
import rpy2.robjects as R
import pandas.rpy.common as com
from rpy2.robjects.packages import importr

stats = importr('stats')
r_df = com.convert_to_r_dataframe(pd.DataFrame(data.logTotal))
%Rpush r_df
%R ss = as.factor(rep(1:12,length(r_df$logTotal)/12))
%R tt = 1:length(r_df$logTotal)
%R tt2 = cbind(tt,tt^2)
%R ts_model = lm(r_df$logTotal ~ tt2+ss-1)
%R print(summary(ts_model))

Я получаю правильные коэффициенты регрессии. Но если я сделаю то же самое в python, у меня возникнут проблемы с его воспроизведением.

import statsmodels.formula.api as smf
ss_temp=     pd.Categorical.from_array(np.repeat(np.arange(1,13),len(data.logTotal)/12))
dtemp = np.column_stack((t,t**2,data.logTotal))
dtemp = pd.DataFrame(dtemp,columns=['t','tsqr','logTotal'])
dtemp['ss'] = sstemp
res_result = smf.ols(formula='logTotal ~ t+tsqr + C(ss) -1',data=dtemp).fit()
res_result.params

Что я здесь делаю неправильно? Сначала я получаю сообщение об ошибке «тип данных не найден», что указывает на формулу res_result. Итак, затем я попытался изменить ss_temp на Series. Тогда приведенные выше утверждения сработали. Однако мои параметры были полностью отключены по сравнению с выходом R. Я потратил день на это безрезультатно. Может кто-нибудь, пожалуйста, помогите мне или подскажите, что делать, или есть ли эквивалент python для as.factor в R? Я предположил, что это было категорично в пандах.

Спасибо

Если вышеперечисленное слишком сложно, это нормально. У меня все еще есть остаточная модель от моей регрессии в R. Но есть идеи, как преобразовать ее в Python, эквивалентный тому, что statsmodels интерпретирует как res от регрессии? еще раз спасибо


person Rajan S.    schedule 06.02.2015    source источник
comment
Попробуйте определить ss_temp как целочисленный массив numpy. Я не знаю, поддерживается ли уже новый pd.Categorical patsy.   -  person Josef    schedule 06.02.2015
comment
Ваша нотация заставляет меня задаться вопросом, правильно ли вы сделали это в R. Если вы не использовали poly-функцию для временных переменных, возможно, вы ненадлежащим образом завысили свою статистическую значимость. См.: stackoverflow.com/questions/13896578/ и несколько сообщения на rhelp на протяжении многих лет, когда люди наивно используют I(var^2) для моделирования квадратичных членов.   -  person IRTFM    schedule 06.02.2015
comment
Я считаю, что правильно использовал его с R. Его реализация на Python меня беспокоит. Даже графическая подгонка не соответствует реальному временному ряду. то есть линии выглядят в основном линейными. но если я сделаю это в R, он очень хорошо соответствует исходному временному ряду.   -  person Rajan S.    schedule 06.02.2015