作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用估算数据运行多项回归。我可以用 nnet 包做到这一点,但是我想使用 mlogit。使用 mlogit 包,我不断收到以下错误“1:nrow(data) 中的错误:长度为 0 的参数”。
所以制作数据
library(mlogit)
library(nnet)
library(tidyverse)
library(mice)
df <- data.frame(vax = sample(1:6, 500, replace = T),
age = runif(500, 12, 18),
var1 = sample(1:2, 500, replace = T),
var2 = sample(1:5, 500, replace = T))
# Create missing data using the mice package:
df2 <- ampute(df, prop = 0.15)
df3 <- df2$amp
df3$vax <- as.factor(df3$vax)
df3$var1 <- as.factor(df3$var1)
df3$var2 <- as.factor(df3$var2)
# Inpute missing data:
df4 <- mice(df3, m = 5, print = T, seed = 123)
它使用 nnet 的 multinom 工作:
multinomtest <- with(df4, multinom(vax ~ age + var1 + var2, data = df, model = T))
summary(pool(multinomtest))
但是当我尝试将数据 reshape 为 mlogit 格式时会引发错误
test <- with(df4, dfidx(data = df4, choice = "vax", shape = "wide"))
有谁知道我如何将插补数据转换为 mlogit 格式,甚至 mlogit 是否与鼠标或任何其他插补包兼容?
最佳答案
回答
您正在使用 with.mids
不正确,因此两行代码都是错误的; multinom
行只是没有给出错误。如果您想将多个函数应用于估算数据集,最好使用 lapply
之类的东西。 :
analyses <- lapply(seq_len(df4$m), function(i) {
data.i <- complete(df4, i)
data.idx <- dfidx(data = data.i, choice = "vax", shape = "wide")
mlogit(vax ~ 1 | age + var1 + var2,
data = data.idx,
reflevel = "1",
nests = list(type1 = c("1", "2"), type2 = c("3","4"), type3 = c("5","6")))
})
test <- list(call = "", call1 = df4$call, nmis = df4$nmis, analyses = analyses)
oldClass(test) <- c("mira", "matrix")
summary(pool(test))
with.mids
作品
with
到
mids
对象(又名
mice::mice
的输出),那么您实际上是在调用
with.mids
.
getAnywhere(with.mids)
(或者直接输入
mice:::with.mids
),你会发现它做了几件事:
complete
得到一个数据集。 lm
、
glm
和
multinom
),您可以在给定环境中使用该公式。如果变量不在当前环境中(而是在例如数据框中),您可以通过设置
data
来指定新环境。多变的。
multinom
打电话,你设置data
变量为 df
.因此,您实际上是在运行 multinom
原创 df
, 不是 估算的数据集!dfidx
打电话,你又在填data
直接地。这也是错误的。但是,将其留空也会产生错误。这是因为 with.mids
未填写 data
论据,但只有环境。这对你来说还不够。multinom
multinom
的解决方案行很简单:只是不要指定
data
:
multinomtest <- with(df4, multinom(vax ~ age + var1 + var2, model = T))
summary(pool(multinomtest))
正如您将看到的,这将产生非常不同的结果!但重要的是要意识到这是你想要获得的。
with.mids
做到这一点,因为它使用估算数据集作为环境,但您想使用修改后的数据集(在
dfidx
之后)作为您的环境。因此,我们必须编写自己的代码。您可以使用任何循环函数来执行此操作,例如
lapply
:
analyses <- lapply(seq_len(df4$m), function(i) {
data.i <- complete(df4, i)
data.idx <- dfidx(data = data.i, choice = "vax", shape = "wide")
mlogit(vax ~ 1 | age + var1 + var2, data = data.idx, reflevel = "1", nests = list(type1 = c("1", "2"), type2 = c("3","4"), type3 = c("5","6")))
})
从那里开始,我们所要做的就是制作一个看起来像
mira
的东西。对象,这样我们仍然可以使用
pool
:
test <- list(call = "", call1 = df4$call, nmis = df4$nmis, analyses = analyses)
oldClass(test) <- c("mira", "matrix")
summary(pool(test))
关于r - 多项回归的多重插补和 mlogit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68594000/
补: Rest 风格请求处理的的内容补充(1) Rest风格请求:注意事项和细节 客户端是PostMan 可以直接发送Put,delete等方式请求,可不设置Filter 如果哟啊
我是一名优秀的程序员,十分优秀!