首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的条件回归模型

Python中的条件回归模型
EN

Stack Overflow用户
提问于 2017-07-12 23:12:42
回答 3查看 1.3K关注 0票数 0

在python中,我使用以下代码创建了一个回归模型:

代码语言:javascript
运行
复制
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中,等效项为:

代码语言:javascript
运行
复制
reg dur agreement vidPersonIdeoDiff opinionChange fake if age < 36

你知道如何在python中复制stata代码行吗?如果解决方案与我一直使用的statsmodels.formula.api模块一致,这将特别有帮助。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-12 23:17:46

如果你有一个这样的DataFrame:

代码语言:javascript
运行
复制
df = pd.DataFrame({'age':[1,2,3,4,5],'b':[2,4,6,8,10]})

您只能选择'age‘列中的值大于3的行,如下所示:

代码语言:javascript
运行
复制
age_greater_3 = df[df['age']>3]

然后用age_greater_3代替df

票数 2
EN

Stack Overflow用户

发布于 2017-07-12 23:21:14

假设'age‘是你有条件的变量:

代码语言:javascript
运行
复制
result = sm.ols(formula="A ~ B + C + D + G", data=df[data['age']<36]).fit()
票数 1
EN

Stack Overflow用户

发布于 2017-07-12 23:19:28

只需将数据帧设置为子集...

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45061576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档