【问题标题】:How to compare models using anova in rpy2?如何在 rpy2 中使用 anova 比较模型?
【发布时间】:2023-07-17 01:45:01
【问题描述】:

在 R 中,可以使用命令 anova(fit1,fit2) 比较两个拟合模型 fit1 和 fit2。

但是,如果我们尝试使用接口 Rpy2 类似地执行此操作,它总是会出错。单个模型的方差分析,比如 anova(fit1) 可以通过 Rpy2 计算。

使用两个时出现的错误是:

no method for coercing this S4 class into a vector.

所以,我想知道如何纠正这个问题以及如何比较 rpy2 中的两个拟合模型?

【问题讨论】:

    标签: python r rpy2 anova


    【解决方案1】:

    你需要这些标题

     import rpy2.robjects as robjects
     from rpy2.robjects import DataFrame, Formula
    

    那么,这对我有用:

    formula = Formula('responsev ~ predictorv')
    formula2 = Formula('responsev ~ predictorv2')
    dataf = DataFrame({'responsev': robjects.IntVector(Y), \
                   'predictorv': robjects.IntVector(X),\
                                    'predictorv2': robjects.IntVector(X2)})
    
    fit=robjects.r.lm(formula=formula, data=dataf)
    fit2=robjects.r.lm(formula=formula2, data=dataf)
    
    a=robjects.r.anova(fit,fit2)
    

    您仍然需要弄清楚如何处理a,但这应该是次要的。

    希望对你有帮助!

    【讨论】:

    • fmla=Formula('Protein~Time+Group+Age+Gender+(1|PatientID)') ;fmla2=Formula('Protein~Group+Age+Gender+(1|PatientID)'); fit1=robjects.r.lmer(公式=fmla,数据=dataf,REML='FALSE'); fit2=r.lmer(formula=fmla2, data=dataf,REML='FALSE') ;a=robjects.r.anova(fit1,fit2);但是,它仍然给出了同样的错误:没有将这个 S4 类强制为向量的方法
    • 如果你使用 lm 就可以了。但是错误是在使用 lmer 时给出的。我需要使用 lmer 因为我正在尝试做一个混合效果模型。那么,是否需要为此提供任何其他命令。
    • 您可能需要导入您的库或类似的东西。你试过了吗?