0

我有一个关于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 更改为系列。然后,上面的语句起作用了。但是,与 R 输出相比,我的参数完全关闭。我一直在这上面花了一天时间,但无济于事。有人可以帮助我或指导我做什么,或者在 R 中是否有一个相当于 as.factor 的 python?我认为这在熊猫中是绝对的。

谢谢

如果上面的太难了,那也没关系。我仍然有我在 R 中回归的残差模型。但是,任何想法如何将其转换为 python 等效于 statsmodels 解释为回归的 res 吗?再次感谢

4

0 回答 0