有没有python等价于R中的“split”参数总结.aov()?

2024-09-30 18:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python进行双向方差分析,包括两个变量(var_Avar_B)及其交互(var_A:var_B)。变量A是三级变量,变量B是三级有序分类变量。我想得到变量B的正交多项式对比度的F统计量

我通常会在R中进行这种类型的分析,但我正在与其他更喜欢Python的人一起工作。你知道吗

在R中,在建立了具有正确对比度的aov模型之后,我将执行如下操作来分割var_B的平方和,以得到一个方差分析表,其中为每个对比度报告了单独的F统计数据。有关使用Rsummary.aov函数的更多详细信息和示例,请参见here。你知道吗

# Create data
df <- data.frame(target = c(449, 413, 326, 409, 358, 291, 341, 278, 312),
                 var_A = rep(c(1, 2, 3), each = 3),
                 var_B = rep(c(1, 2, 3), 3))

# Make var_B an ordered factor
df$var_B <- factor(df$var_B, ordered = TRUE)

# Set contrasts
options(contrasts=c('contr.sum','contr.poly'))

# Create model
aov_model <- aov(target ~ var_A * var_B, data = df)

# Run summary with the F-test shown for the orthogonal polynomial contrasts
summary(aov_model, 
        split = list(var_B = list(linear = 1, quadratic = 2)))

有人知道在Python中是否可以做同样的事情吗?你知道吗

现在,我可以使用patsy包中的Poly()函数为var_B添加正确的对比度。我在我的线性模型的摘要中看到了对比,并且我能够生成具有var_B总体效果的方差分析表。你知道吗

然而,我不确定如何“分割”方差分析表中var_B的平方和,以查看每个对比度的F统计。你知道吗

import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

from patsy.contrasts import Poly

# Create data frame
df = pd.DataFrame({'target': [449, 413, 326, 409, 358, 291, 341, 278, 312],
                  'var_A': [1, 1, 1, 2, 2, 2, 3, 3, 3],
                  'var_B': [1, 2, 3, 1, 2, 3, 1, 2, 3]})

# Fit the linear model
overall_model = smf.ols(formula= "target ~ var_A * C(var_B, Poly())",
                        data=df).fit()

# Conduct an ANOVA on the model
overall_anova = sm.stats.anova_lm(overall_model, type=3, robust="hc3")

有没有一个参数可以传递给sm.stats.anova_lm()函数来拆分平方和?或者有没有其他方法可以将效果分解成正交对比?你知道吗

任何帮助都将不胜感激!你知道吗


Tags: the函数importtargetdfdatamodelvar