使用 patsy、statsmodels 将简单回归转换为对数刻度

Converting a simple regression to a logarithmic scale with patsy, statsmodels

我正在学习在线计量经济学课程并学习统计模型。

我从讲师那里得知这种回归更适合对数尺度,但我不知道如何或在哪里转换我的数据/公式。

我正在使用 Python、Pandas、Statsmodels 和 Patsy

这是我将数据转换为 dmatrices 的地方:

    y, X = dmatrices('PRICE ~ QUANTITY', data=df, return_type='dataframe')

这里是我 运行 statsmodels 中的回归:

    mod = sm.OLS(y, X)      # Describe model

    res = mod.fit()         # Fit Model

    print(res.summary())    # Summarize model

我的 r 平方非常低,但该模型 运行。我只是想弄清楚如何转换为对数刻度。课程中给出的例子,他将X轴和Y轴都转换为对数刻度

编辑:我用它来工作:

    df2['Quantity'] = np.log(df['QUANTITY'])
    df2['Price'] = np.log(df['PRICE'])

有没有一种方法可以在 1 行代码中完成,或者如果我需要在另一个问题中对更多变量执行此操作,甚至是一个循环?

一个简单的循环,同时更改名称以包含 "log",可能是

columns = ['QUANTITY', 'PRICE', 'aaa']
for col in columns:
    df2["log-" + col] = np.log(df[col])

也可以在公式中使用 np.log,但 statsmodels 在这种情况下不提供更多支持,它会在每次回归或公式为 运行 时计算日志为数据框的相关列计算一次。