Python 中的条件回归模型
Conditional Regression Model in Python
在 python 中,我使用以下代码创建了一个回归模型:
import statsmodels.formula.api as sm
df = pd.DataFrame({"A": data['dur'], "B": data['agreement'], "C": data['vidPersonIdeoDiff'], "D": data['opinionChange'], "G": data['fake']})
result = sm.ols(formula="A ~ B + C + D + G", data=df).fit()
print(result.params)
print(result.summary())
现在,我有兴趣向同一回归添加条件或 'if-statement'。我将如何 运行 它但仅适用于某些群体,例如年龄小于 36 岁?在 Stata 中,等价物是:
reg dur agreement vidPersonIdeoDiff opinionChange fake if age < 36
知道如何在 python 中复制该 stata 行吗?如果解决方案与我一直使用的 statsmodels.formula.api 模块一致,那将特别有用。谢谢!
如果你有这样的 DataFrame:
df = pd.DataFrame({'age':[1,2,3,4,5],'b':[2,4,6,8,10]})
您可以 select 只有 'age' 列中的值大于 3 的行,如下所示:
age_greater_3 = df[df['age']>3]
然后用age_greater_3代替df
简单地对数据框进行子集...
import pandas as pd
import statsmodels.formula.api as sm
import numpy as np
df = pd.DataFrame(
{'x': np.random.normal(1000), 'z': np.random.rand(1000) > 0.5}
)
df['y'] = df['x'] * 2 + np.random.normal(1000)
# full dataset
sm.ols(formula='y ~ x', data=df).fit().summary()
# conditional on z = True
sm.ols(formula='y ~ x', data=df.loc[df['z']]).fit().summary()
# for a continuous variable
df['age'] = np.random.randint(18, 65, 1000)
sm.ols(formula='y ~ x', data=df[df['age'] > 30]).fit().summary()
如果说,'age' 是您有条件的变量:
result = sm.ols(formula="A ~ B + C + D + G", data=df[data['age']<36]).fit()
在 python 中,我使用以下代码创建了一个回归模型:
import statsmodels.formula.api as sm
df = pd.DataFrame({"A": data['dur'], "B": data['agreement'], "C": data['vidPersonIdeoDiff'], "D": data['opinionChange'], "G": data['fake']})
result = sm.ols(formula="A ~ B + C + D + G", data=df).fit()
print(result.params)
print(result.summary())
现在,我有兴趣向同一回归添加条件或 'if-statement'。我将如何 运行 它但仅适用于某些群体,例如年龄小于 36 岁?在 Stata 中,等价物是:
reg dur agreement vidPersonIdeoDiff opinionChange fake if age < 36
知道如何在 python 中复制该 stata 行吗?如果解决方案与我一直使用的 statsmodels.formula.api 模块一致,那将特别有用。谢谢!
如果你有这样的 DataFrame:
df = pd.DataFrame({'age':[1,2,3,4,5],'b':[2,4,6,8,10]})
您可以 select 只有 'age' 列中的值大于 3 的行,如下所示:
age_greater_3 = df[df['age']>3]
然后用age_greater_3代替df
简单地对数据框进行子集...
import pandas as pd
import statsmodels.formula.api as sm
import numpy as np
df = pd.DataFrame(
{'x': np.random.normal(1000), 'z': np.random.rand(1000) > 0.5}
)
df['y'] = df['x'] * 2 + np.random.normal(1000)
# full dataset
sm.ols(formula='y ~ x', data=df).fit().summary()
# conditional on z = True
sm.ols(formula='y ~ x', data=df.loc[df['z']]).fit().summary()
# for a continuous variable
df['age'] = np.random.randint(18, 65, 1000)
sm.ols(formula='y ~ x', data=df[df['age'] > 30]).fit().summary()
如果说,'age' 是您有条件的变量:
result = sm.ols(formula="A ~ B + C + D + G", data=df[data['age']<36]).fit()