在 Python 中使用 Altair 在线性回归图上将截距设置为 0

Set intercept to 0 on a linear regression plot using Altair in Python

我正在尝试使用 altair 在 python 中绘制线性回归。我想 set/force 截距为 0。无法在文献中的任何地方找到它(如果遗漏了什么,请道歉)。

有人可以告诉我怎么做吗?到目前为止,我已经包括了我的工作,它用自己的截距绘制了回归线。谢谢!

# create some toy data
df = pd.DataFrame({'x': [ 931000, 772648, 635000, 510572, 509000, 496317, 453133, 441072, 404194, 380000],
                'y': [3000000, 2471414, 2050000, 1183849, 1800000, 1650000, 1480000, 1459866, 1150000, 1700000]})

# create a scatter plot
chart = alt.Chart(df, width=500, height=400).mark_point().encode(
    x=alt.X('x:Q', scale=alt.Scale(zero=False)),
    y='y:Q')

# create regression line
fit = chart.transform_regression('x', 'y',).mark_line(color='red')

# obtain the regression parameters
params = alt.Chart(df).transform_regression('x', 'y', params=True, ).mark_text(align='left').encode(
    x=alt.value(10),  # pixels from left
    y=alt.value(25),  # pixels from top
    text='params:N'
).transform_calculate(
    params='"R² = " + datum.rSquared + " : Beta = " + datum.coef[1] + " : Intercept = " + datum.coef[0]')

# plot
chart + fit + params

目前这在 Altair 中是不可能的,因为 is has not been implemented in Vega yet。由于 Altair 建立在 Vega-Lite 的基础上,而 Vega-Lite 又建立在 Vega 的基础上,您可以关注该问题以了解何时可能实施并添加一个令人信服的用例,如果您认为它应该具有更高的优先级。

与此同时,您需要使用单独的包(例如 statsmodels)来计算回归线的参数,然后使用 Altair 中的 .mark_line() 绘制它。 How to set intercept to 0 with statsmodel - for multiple linear regression