gpt4 book ai didi

python - 使用 Python statsmodel 进行多元线性回归

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:50 24 4
gpt4 key购买 nike

在 R 中,可以像这样执行多元线性回归

temp = lm(log(volume_1[11:62])~log(price_1[11:62])+log(volume_1[10:61]))

在Python中,可以使用以下命令执行多元线性回归R 风格公式,所以我认为下面的代码应该同样有效,

import statsmodels.formula.api as smf
import pandas as pd
import numpy as np

rando = lambda x: np.random.randint(low=1, high=100, size=x)

df = pd.DataFrame(data={'volume_1': rando(62), 'price_1': rando(62)})

temp = smf.ols(formula='np.log(volume_1)[11:62] ~ np.log(price_1)[11:62] + np.log(volume_1)[10:61]',
data=df)
# np.log(volume_1)[10:61] express the lagged volume

但我收到错误

PatsyError: Number of rows mismatch between data argument and volume_1[11:62] (62 versus 51)
volume_1[11:62] ~ price_1[11:62] + volume_1[10:61]

我猜不可能只回归列中的部分行,因为 data = df 有 62 行,而其他变量有 51 行。

有没有像R这样方便的回归方法?

df 类型为 pandas Dataframe,列名称为 Volume_1、price_1

最佳答案

使用 github question 中的示例在 patsy 存储库中,这将是让滞后列正常工作的方法。

import statsmodels.formula.api as smf
import pandas as pd
import numpy as np

rando = lambda x: np.random.randint(low=1, high=100, size=x)

df = pd.DataFrame(data={'volume_1': rando(62), 'price_1': rando(62)})

def lag(x, n):
if n == 0:
return x
if isinstance(x,pd.Series):
return x.shift(n)

x = x.astype('float')
x[n:] = x[0:-n]
x[:n] = np.nan
return x

temp = smf.ols(formula='np.log(volume_1) ~ np.log(price_1) + np.log(lag(volume_1,1))',
data=df[11:62])

关于python - 使用 Python statsmodel 进行多元线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52714276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com