【问题标题】:Getting the class of the predictors from an lme4 model从 lme4 模型中获取预测变量的类别
【发布时间】:2020-09-08 07:30:22
【问题描述】:

在拟合 lme4 模型后,我想知道我们如何从 terms(fit)[[3]] 获得预测变量的类?

这是一个简单的例子,但我很欣赏lme4 中任何其他模型的功能性答案。

注意:一切都必须从模型中提取出来。

library(lme4)

h <- read.csv('https://raw.githubusercontent.com/hkil/m/master/h.csv')
h$year <- as.factor(h$year)
m <- lmer(scale~ year*group + (1|stid), data = h)

terms(m)[[3]]  ## What are the `class`es of the variables in here (e.g., `integer`, `factor` etc.)

【问题讨论】:

    标签: r dataframe class lm lme4


    【解决方案1】:

    也许不是完全健壮,但是:

    1. 从术语对象中提取变量名称
    av <- all.vars(terms(m)[[3]])   ## c("year","group")
    
    1. 在提供为data= 的数据框中查找它们:
    setNames(lapply(av, function(x) class(h[[x]])), av)
    $year
    [1] "factor"
    
    $group
    [1] "character"
    

    如果您想从模型中获取所有内容,这通常会更加困难,因为不一定存储原始变量。在您给出的示例中,该示例有效:

     setNames(lapply(av, function(x) class(model.frame(m)[[x]])), av)
    $year
    [1] "factor"
    
    $group
    [1] "factor"
    

    您会注意到group 已转换为因子。您可以打破这一点,例如,通过在模型中使用像 log(x) 这样的术语...

    【讨论】:

    • 好的。请注意,这个配方有时肯定会失败(例如我的log(x) 示例):这一直是我开发基于 R 模型的机器的一个长期痛点。如果模型框架不起作用,您可以尝试使用 eval(getCall(m)$data),但这依赖于仍然可以找到原始数据对象的环境......如果一切都失败了可以坚持要求用户将data 对象单独提供给您的事后函数。
    • 如果您只想要模型矩阵中存在的列,您可以查看getME(m,"X")。但是,如果您在公式中进行了转换,您可能需要更加努力地将术语中的元素与模型矩阵的列匹配...
    猜你喜欢
    • 2021-09-25
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多