Python通用单因素ANOVA函数变量替换问题求助
动态生成OLS公式解决单因素ANOVA函数的变量替换问题
你遇到的核心问题很典型:当前代码里的OLS公式字符串'dep_var ~ indep_var'是固定字面量,statsmodels只会把它当成变量名本身,而不会替换成你传入的dep_var和indep_var参数值。
要解决这个问题,我们需要动态生成公式字符串,把传入的参数值拼接进去。Python里最简洁直观的方式是用f-string,当然也可以用str.format()或者字符串拼接,这里推荐f-string:
import statsmodels.api as sm from statsmodels.formula.api import ols def oneway_anova(df, dep_var, indep_var): # 用f-string动态生成符合要求的公式 formula = f"{dep_var} ~ {indep_var}" mod = ols(formula, data=df).fit() aov_table = sm.stats.anova_lm(mod, typ=2) return aov_table # 别忘了返回方差分析表,否则调用函数拿不到结果
当你调用oneway_anova(df, 'hours_growth', 'pesticide')时,formula会被自动生成为'hours_growth ~ pesticide',完全符合你期望的格式,ols就能正确识别数据框中的对应列了。
额外提一句:如果后续需要扩展到更复杂的模型(比如包含交互项a*b、多项式项np.power(x,2)),这种动态生成公式的方式同样适用,只需要调整f-string里的格式即可。
内容的提问来源于stack exchange,提问作者user18334254
相关产品推荐
相关产品推荐

