Statsmodels:ols 编写具有未知列名的公式
Statsmodels: ols writing Formula with unknown column names
我正在尝试使用 statsmodels 运行 ANOVA,为此我正在为我的数据框中的每一列(分类特征)制作模型 wrt 到一列 'imp' 如下在一个循环中。
for cat_feature in df:
data_model = pd.DataFrame({
'x': df[cat_feature],
'y': df['imp']})
model = smf.ols('y ~ x',data=data_model).fit()
res = sm.stats.anova_lm(model, typ=1)
但我想做的是:
smf.ols(df['imp'] ~ df[cat_feature],data=df).fit()
但这不是正确的语法。
而不必每次都使 data_model 的其中一列始终相同。
可能吗?
或者简单地说
model = smf.ols('A~B', data=df).fit()
有效但
model2 = smf.ols(df.A ~ df.B, data=df).fit()
没有。
公式界面,小写 ols
与大写 OLS
相比,需要一个公式字符串作为第一个参数。
所以,我想你想要字符串连接
smf.ols('imp ~' + cat_feature, data=df).fit()
指定 pandas 系列和 DataFrame 或 numpy 数组仅适用于主要 class OLS
import statsmodels.api as sm
model2 = sm.OLS(df['imp'], df[cat_feature]).fit()
作为背景信息:
OLS
为实际型号class
formula.api 中的 ols
只是 OLS.from_formula
方法的一个方便的别名,它在创建 OLS
实例之前预处理公式信息。
字符~
是公式字符串的必需元素,但在常规python classes、方法或函数中分隔参数是无效的。
array/dataframe 和公式界面之间的一个重要区别:
数组接口,即像
中那样使用OLS
sm.OLS(df['imp'], df[cat_feature])
不对数据进行任何预处理,即 exog
按原样使用。具体来说,没有添加常量,并且分类特征没有以某些数字虚拟或对比表示形式进行编码。
公式界面使用 patsy
预处理数据,在很大程度上与 R 的公式相同。这意味着默认情况下会添加一个常量,并且任何 non-numeric 列(如包含字符串的列)都是作为分类变量或因子变量的过程。
我正在尝试使用 statsmodels 运行 ANOVA,为此我正在为我的数据框中的每一列(分类特征)制作模型 wrt 到一列 'imp' 如下在一个循环中。
for cat_feature in df:
data_model = pd.DataFrame({
'x': df[cat_feature],
'y': df['imp']})
model = smf.ols('y ~ x',data=data_model).fit()
res = sm.stats.anova_lm(model, typ=1)
但我想做的是:
smf.ols(df['imp'] ~ df[cat_feature],data=df).fit()
但这不是正确的语法。
而不必每次都使 data_model 的其中一列始终相同。
可能吗?
或者简单地说
model = smf.ols('A~B', data=df).fit()
有效但
model2 = smf.ols(df.A ~ df.B, data=df).fit()
没有。
公式界面,小写 ols
与大写 OLS
相比,需要一个公式字符串作为第一个参数。
所以,我想你想要字符串连接
smf.ols('imp ~' + cat_feature, data=df).fit()
指定 pandas 系列和 DataFrame 或 numpy 数组仅适用于主要 class OLS
import statsmodels.api as sm
model2 = sm.OLS(df['imp'], df[cat_feature]).fit()
作为背景信息:
OLS
为实际型号class
formula.api 中的 ols
只是 OLS.from_formula
方法的一个方便的别名,它在创建 OLS
实例之前预处理公式信息。
字符~
是公式字符串的必需元素,但在常规python classes、方法或函数中分隔参数是无效的。
array/dataframe 和公式界面之间的一个重要区别:
数组接口,即像
中那样使用OLS
sm.OLS(df['imp'], df[cat_feature])
不对数据进行任何预处理,即 exog
按原样使用。具体来说,没有添加常量,并且分类特征没有以某些数字虚拟或对比表示形式进行编码。
公式界面使用 patsy
预处理数据,在很大程度上与 R 的公式相同。这意味着默认情况下会添加一个常量,并且任何 non-numeric 列(如包含字符串的列)都是作为分类变量或因子变量的过程。