StatsModels Groupby线性回归数据类型错误:Pandas数据转换为对象的numpy数据类型.用np.aa



我试图使用统计模型按组运行线性回归,但我得到了错误:Pandas数据转换为对象的numpy-dtype。用np.aarray(data(.检查输入数据

数据类型如下:EmailCampaignId:int64、percentOpen:foat64和电子邮件日期:datetime64[ns]。

import statsmodels.api as sm 
def GroupRegress(data, yvar, xvars):
Y = np.asarray(data[yvar])
X = data[xvars]
X['intercept'] = 1.
result = sm.OLS(Y, X).fit()
return result.params
df_emails.groupby('EmailCampaignId').apply(GroupRegress, 'percentOpen', ['Email Dates'])

我认为int64和float64应该是可以的,也许在datatime64上回归是个问题。如果有任何帮助,我将不胜感激!

此外,我想为表中的每个组输出R^2。我该怎么做?

是的,问题出在datetime类型中。如果您打算使用日期作为连续预测值(即,作为间隔数据(,则可以将该列转换为intfloat,后者将其视为天数/小时/分钟/秒或自1970年1月1日以来的其他增量,例如:

pd.to_datetime('1970-01-02').value
# 86400000000000 nanoseconds since 1/1/70

对于R平方,在下面的函数中对return语句的编辑将在最终数据帧中作为额外的列输出这些值。

所以,

# convert date column from datetime to number of days since 1/1/70
df_emails['Email Dates'] = df_emails['Email Dates'].apply(
lambda x: x.value / (1e9 * 24 * 3600)
)
def GroupRegress(data, yvar, xvars):
Y = np.asarray(data[yvar])
X = data[xvars]
X['intercept'] = 1.
result = sm.OLS(Y, X).fit()
return result.params.append(
pd.Series([result.rsquared], index=['r_squared'])
)
res = df_emails.groupby('EmailCampaignId').apply(
GroupRegress, 'percentOpen', ['Email Dates']
)
# res will look like:
#                    Email Dates       intercept    r_squared
# EmailCampaignId           
#              0            xxxx            xxxx         xxxx
#              1            xxxx            xxxx         xxxx

相关内容

  • 没有找到相关文章