【问题标题】:Migrating ANOVA p-value function from R to Python将 ANOVA p 值函数从 R 迁移到 Python
【发布时间】:2020-08-19 05:49:57
【问题描述】:

美好的一天!

有没有一种有效的方法可以在 Python 中找到 4-Way ANVOA 模型的 p 值。

这样的事情可以在 R 中的 for 循环中进行大量模拟

pValues[k] <- anova(lm(Yield ~ Water + Row + Column, data=y))$"Pr(>F)"[1]

我已经尝试过researchpy,后来又转到statsmodels,但我不知道如何从这里继续...

pValues[k] = statsmodels.stats.anova_lm(data=y)."Pr(>F)"[1]

【问题讨论】:

  • 您是否考虑过在 Python 中使用 rpy2 运行 R? youtu.be/pjDGB9i7kyI
  • 你可以看看Python for Data Science。那里的 2 路示例使用从 S 借来的公式语法,当然可以扩展到 4 路。顺便说一句,上面的例子在我看来像 3 路,没有交互。

标签: python r numpy anova p-value


【解决方案1】:

在 R 中:

set.seed(111)
y = data.frame(matrix(rnorm(400),100,4))
colnames(y) = c("Yield","Water","Row","Column")

anova(lm(Yield ~ Water + Row + Column, data=y))
Analysis of Variance Table

Response: Yield
          Df  Sum Sq Mean Sq F value Pr(>F)
Water      1   0.364 0.36410  0.3122 0.5776
Row        1   0.518 0.51768  0.4440 0.5068
Column     1   0.703 0.70256  0.6025 0.4395
Residuals 96 111.942 1.16606           

write.csv(y,"y_data.csv",quote=FALSE,row.names=FALSE)

在python中,可以使用statsmodels中的stats函数anova_lm来获取表:

import statsmodels.api as sm
from statsmodels.formula.api import ols
import pandas as pd

y = pd.read_csv("y_data.csv")

mod = ols('Yield ~ Water + Row + Column',data=y).fit()
tab = sm.stats.anova_lm(mod)

            df      sum_sq   mean_sq         F    PR(>F)
Water      1.0    0.364100  0.364100  0.312247  0.577606
Row        1.0    0.517678  0.517678  0.443954  0.506818
Column     1.0    0.702561  0.702561  0.602508  0.439531
Residual  96.0  111.941964  1.166062       NaN       NaN

然后像这样提取 p 值:

tab["PR(>F)"][0]
Out[8]: 0.5776056586929655

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多