在Python中,我们能否设置/固定回归方程中的系数?

3

我一直在尝试在Python中指定OLS/GLS回归中预定义的系数的方法。我可以使用R中的offset来实现这一点,但是在Python中似乎没有类似的功能。

R版本:

model=lm(y~x+offset(0.2*z))

在这个例子中,x和z是我们的自变量,模型预测了x,但我们指定了z的影响为0.2。
1个回答

6
使用 statsmodels,您可以在 Python 中进行回归分析,其风格类似于 R。其中,在一些回归函数中作为参数会出现 offset。一个示例是GLM
使用这样的数据集:
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 3), columns=list('yxz'))
df

#           y         x         z
# 0  0.091761 -1.987569 -0.219672
# 1  0.357113  1.477894 -0.518270
# 2 -0.808494 -0.501757  0.915402
# 3  0.328751 -0.529760  0.513267
# 4  0.097078  0.968645 -0.702053
# 5 -0.327662 -0.392108 -1.463515
# 6  0.296120  0.261055  0.005113
# 7 -0.234587 -1.415371 -0.420645

您可以这样做:
known = 0.2

res1 = smf.glm('y ~ x', data = df, offset=known*df['z']).fit()
print(res1.summary())

# ==============================================================================
# Dep. Variable:                      y   No. Observations:                    8
# Model:                            GLM   Df Residuals:                        6
# .
# .
# ==============================================================================
#                  coef    std err          z      P>|z|      [0.025      0.975]
# ------------------------------------------------------------------------------
# Intercept      0.0614      0.165      0.373      0.709      -0.261       0.384
# x              0.1478      0.148      0.995      0.320      -0.143       0.439
# ==============================================================================

您也可以通过手动执行相同的操作进行一次检查。您可以像这样创建一个偏移量:

offset = known*df['z']
y_offset = df['y']-offset
df2  = pd.concat([pd.Series(y_diff), df['x']], axis = 1)
df2.columns = ['y_diff', 'x']

res2 = smf.glm('y_offset ~ x', data = df2).fit()
print(res2.summary())

# ==============================================================================
# Dep. Variable:               y_offset   No. Observations:                    8
# Model:                            GLM   Df Residuals:                        6
# .
# .
# ==============================================================================
#                  coef    std err          z      P>|z|      [0.025      0.975]
# ------------------------------------------------------------------------------
# Intercept      0.0614      0.165      0.373      0.709      -0.261       0.384
# x              0.1478      0.148      0.995      0.320      -0.143       0.439
# ==============================================================================

1
没问题!您考虑将我的建议标记为采纳答案吗?其他回答您的问题的人也会很感激的。最重要的后果是,它使决定应该尝试解决哪些挑战变得更加容易。所有已采纳的答案都会用绿色标出。此外,现在您已经获得了超过15个声望点,您有能力投票支持对您有用的答案。 - vestland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接