使用 margins 命令获取结果变量的预测值

Obtaining predicted values of the outcome variable using margins command

提问人:Nader Mehri 提问时间:6/2/2023 最后编辑:Nick CoxNader Mehri 更新时间:6/2/2023 访问量:67

问:

我拟合了一个多项式逻辑模型,如下所示。使用 margins 命令,我想获取结果变量的预测值,同时将预测变量设置为某些特定值。换句话说,我想复制下面的 Stata 代码。Chatgpt 给了我代码,我也粘贴在下面,但它返回错误“find_terms_in_model.default(model, variables = variables) 中的错误:”变量“中的某些值不在模型术语中。

我的多项式 LOGIST 代码

library(nnet)
model <- multinom(obesity_E ~ age_100 + I(age_100^2) + obesity + age_100:obesity +
                  covid:race + age_100:race + education + education:race +
                  rabplace_5, data = female_98_2020, maxit=1000)

ChatGPT 建议的代码

margins_model <- margins(model, variables = "obesity:race:rabplace_5",
                         at = list(age_100 = seq(0, 25, 1)), atMethod = "mean",
                         method = "probs", force = TRUE, noSe = TRUE,
                         save = "tran_point_F", replace = TRUE)

我的 Stata 代码

margins  , at (age_100=(0 (1) 25) obesity=(1 (1) 4) race=(0 (1) 3) rabplace_5=(1 (1) 5)) atmeans force nose saving(tran_point_F, replace ) 
R stata NNET 边际效应

评论


答:

2赞 Vincent 6/2/2023 #1

该包仅计算斜率,而不计算预测。此外,该软件包不再被积极维护和开发(也许只是关键的错误修复)。margins

您可以改用 marginaleffects 包,这是我开发的较新的包,作为更灵活的继承者(注意:利益冲突)。margins

请参阅此小插图,了解与 Stata 的语法比较: https://vincentarelbundock.github.io/marginaleffects/articles/alternative_software.html

您需要的代码可能如下所示:

library(nnet)
library(marginaleffects)

m <- multinom(Species ~ Petal.Length + Petal.Width, data = iris, trace = FALSE)

avg_predictions(m, newdata = datagrid(Petal.Length = c(1, 4, 6)))
# 
#       Group Estimate Std. Error    z Pr(>|z|)    S  2.5 % 97.5 % Petal.Width Petal.Length
#  setosa        0.333     0.0479 6.95  < 0.001 38.0 0.2389  0.427         1.2            1
#  versicolor    0.382     0.1195 3.20  0.00139  9.5 0.1477  0.616         1.2            4
#  virginica     0.285     0.1192 2.39  0.01672  5.9 0.0516  0.519         1.2            6
# 
# Columns: rowid, group, estimate, std.error, statistic, p.value, s.value, conf.low, conf.high, Species, Petal.Width, Petal.Length

评论

0赞 Nader Mehri 6/3/2023
感谢您的有益澄清!在建议的解决方案中,我们将 Petal.Length 的值设置为 1、4 和 6。如果这是正确的,我想知道为 Petal.Width 设置了什么值?另外,我想知道下面建议的代码与您的代码有何不同: 花瓣:predicted_probs <- predict(model, newdata = datagrid(Petal.Length = c(1, 4, 6)), type = “probs”)
1赞 Vincent 6/3/2023
datagrid将其他变量设置为它们的均值,但可以自定义。请参阅文档。在这种情况下,两者之间应该没有区别,除了返回不确定估计值。这里的预测小插曲中有大量示例和详细教程:vincentarelbundock.github.io/marginaleffects/articles/...predictions()avg_predictions()