我正在尝试计算我的 df中weight
的每个animal_id
和的回归系数:cycle_nr
动物ID | cycle_nr | 饲料日期 | 重量 |
---|---|---|---|
1003 | 8 | 2020-02-06 | 221 |
1003 | 8 | 2020-02-10 | 226 |
1003 | 8 | 2020-02-14 | 230 |
1004 | 1 | 2020-02-20 | 231 |
1004 | 1 | 2020-02-21 | 243 |
我尝试使用此源代码:
import pandas as pd
import statsmodels.api as sm
def GroupRegress(data, yvar, xvars):
Y = data[yvar]
X = data[xvars]
X['intercept'] = 1.
result = sm.OLS(Y, X).fit()
return result.params
result = df.groupby(['animal_id', 'cycle_nr']).apply(GroupRegress, 'feed_date', ['weight'])
此代码失败,因为我的变量包含日期。
我接下来尝试了什么:
我想我可以创建一个数字列来代替我的日期列。我创建了一个简单的 count_id 列:
动物ID | cycle_nr | 饲料日期 | 重量 | ID |
---|---|---|---|---|
1003 | 8 | 2020-02-06 | 221 | 1 |
1003 | 8 | 2020-02-10 | 226 | 2 |
1003 | 8 | 2020-02-14 | 230 | 3 |
1004 | 1 | 2020-02-20 | 231 | 4 |
1004 | 1 | 2020-02-21 | 243 | 5 |
然后我在这个专栏上进行了回归
result = df.groupby(['animal_id', 'cycle_nr']).apply(GroupRegress, 'id', ['weight'])
斜率计算看起来不错,但截距当然没有意义。
然后我意识到这种方法只有在测量间隔有规律的情况下才可用。在大多数情况下,间隔是 7 天,但有时是 10、14 或 21 天。
我删除了间隔不是 7 天的记录并重新运行了我的回归......它有效,但我讨厌我必须丢弃完美的数据。
我想知道是否有更好的方法可以将日期包含在回归中,或者可以更正日期的不同间隔。有什么建议么?