- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在调用 mice 时指定“2l.norm”方法后,我偶然发现了一条错误消息,变量仅包含 1 个 NA。考虑到这些变量的缺失数据量非常小,我意识到这是一个非常小的问题。但是,最好也考虑这些的数据结构。
我使用所有人都可以访问的数据库 ChickWeight 数据集重新创建了这种情况。我非常清楚这个问题也可能是我在执行程序时出错的结果,所以如果是这种情况请告诉我。
ChickWeight[1:20, ]
dim(ChickWeight)
sum(is.na(ChickWeight)) #contains no NAs
ChickWeight$weight[12] <- NA # add 1 NA
ChickWeight$constant <- 1 #add a constant
ChickWeight$Chick <- as.numeric(levels(ChickWeight$Chick)[ChickWeight$Chick]) #class variable has to be an integer
ini <- mice(ChickWeight, maxit = 0)
pred <- ini$predictorMatrix
pred["weight", ] <- c(0, 2, -2, 1, 2)
method <- ini$method
method["weight"] <- "2l.norm"
imputation <- mice(ChickWeight, m = 5, maxit = 5, pred = pred, method = method)
最后一条命令的结果是:
错误 [<-.data.frame
( *tmp*
, , i, value = c(37.3233463394145, 159.862324738397 : 替换有 2 行,数据有 1
添加一个额外的 NA 解决了问题
ChickWeight$weight[13] <- NA # add another NA
imputation <- mice(ChickWeight, m = 5, maxit = 5, pred = pred, method = method)
有谁知道可能导致错误的原因是什么?
最佳答案
mice 包的作者 Stef van Buuren 通过电子邮件向我提供了答案。mice 包 v2.22 中的 mice.impute.2l.norm
函数有一个非常小的遗漏,此后已在 v2.23 中修复。 .
正确的代码如下,其中仅在倒数第 4 行添加了 drop = FALSE
到 rowSums(as.matrix(x[nry, type == 2]) , ...
:
mice.impute.2l.norm2 <-
function (y, ry, x, type, intercept = TRUE, ...)
{
rwishart <- function(df, p = nrow(SqrtSigma), SqrtSigma = diag(p)) {
Z <- matrix(0, p, p)
diag(Z) <- sqrt(rchisq(p, df:(df - p + 1)))
if (p > 1) {
pseq <- 1:(p - 1)
Z[rep(p * pseq, pseq) + unlist(lapply(pseq, seq))] <- rnorm(p *
(p - 1)/2)
}
crossprod(Z %*% SqrtSigma)
}
force.chol <- function(x, warn = TRUE) {
z <- 0
repeat {
lambda <- 0.1 * z
XT <- x + diag(x = lambda, nrow = nrow(x))
XT <- (XT + t(XT))/2
s <- try(expr = chol(XT), silent = TRUE)
if (class(s) != "try-error")
break
z <- z + 1
}
attr(s, "forced") <- (z > 0)
if (warn && z > 0)
warning("Cholesky decomposition had to be forced",
call. = FALSE)
return(s)
}
if (intercept) {
x <- cbind(1, as.matrix(x))
type <- c(2, type)
}
n.iter <- 100
nry <- !ry
n.class <- length(unique(x[, type == (-2)]))
if (n.class == 0)
stop("No class variable")
gf.full <- factor(x[, type == (-2)], labels = 1:n.class)
gf <- gf.full[ry]
XG <- split.data.frame(as.matrix(x[ry, type == 2]), gf)
X.SS <- lapply(XG, crossprod)
yg <- split(as.vector(y[ry]), gf)
n.g <- tabulate(gf)
n.rc <- ncol(XG[[1]])
bees <- matrix(0, nrow = n.class, ncol = n.rc)
ss <- vector(mode = "numeric", length = n.class)
mu <- rep(0, n.rc)
inv.psi <- diag(1, n.rc, n.rc)
inv.sigma2 <- rep(1, n.class)
sigma2.0 <- 1
theta <- 1
for (iter in 1:n.iter) {
for (class in 1:n.class) {
vv <- sym(inv.sigma2[class] * X.SS[[class]] + inv.psi)
bees.var <- chol2inv(chol(vv))
bees[class, ] <- drop(bees.var %*% (crossprod(inv.sigma2[class] *
XG[[class]], yg[[class]]) + inv.psi %*% mu)) +
drop(rnorm(n = n.rc) %*% chol(sym(bees.var)))
ss[class] <- crossprod(yg[[class]] - XG[[class]] %*%
bees[class, ])
}
mu <- colMeans(bees) + drop(rnorm(n = n.rc) %*% chol(chol2inv(chol(sym(inv.psi)))/n.class))
inv.psi <- rwishart(df = n.class - n.rc - 1, SqrtSigma = chol(chol2inv(chol(sym(crossprod(t(t(bees) -
mu)))))))
inv.sigma2 <- rgamma(n.class, n.g/2 + 1/(2 * theta),
scale = 2 * theta/(ss * theta + sigma2.0))
H <- 1/mean(inv.sigma2)
sigma2.0 <- rgamma(1, n.class/(2 * theta) + 1, scale = 2 *
theta * H/n.class)
G <- exp(mean(log(1/inv.sigma2)))
theta <- 1/rgamma(1, n.class/2 - 1, scale = 2/(n.class *
(sigma2.0/H - log(sigma2.0) + log(G) - 1)))
}
imps <- rnorm(n = sum(nry), sd = sqrt(1/inv.sigma2[gf.full[nry]])) +
rowSums(as.matrix(x[nry, type == 2, drop = FALSE]) * bees[gf.full[nry],
])
return(imps)
}
当新函数被添加到mice
命名空间时
environment(mice.impute.2l.norm2) <- asNamespace('mice')
它可以通过调用 2l.norm2
在小鼠中正常使用。在前面描述的示例中显示:
method["weight"] <- "2l.norm2"
imputation <- mice(ChickWeight, m = 5, maxit = 5, pred = pred, method = method)
它现在按预期工作了!
关于R mice package : error in 2l. norm 只有1个NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400743/
在 R Language Definition 中,对NA值进行了简要描述,其中一部分说 ... In particular, FALSE & NA is FALSE, TRUE | NA is TR
我对 R 还很陌生,目前遇到一个问题,数据如下所示: ID h1 h2 h3 h4 h5 h6 h7 h8
我有一个 csv包含国家名称及其 ISO 代码的文件。这是它的样子: "Name","Code" "Afghanistan","AF" "Albania","AL" "Algeria","DZ" "N
我想用 dplyr 解决以下问题。最好与窗口功能之一一起使用。我有一个包含房屋和购买价格的数据框。下面是一个例子: houseID year price 1 19
在data.frame(或data.table)中,我想用最接近的先前非NA值“向前填充”NA。一个使用向量(而不是 data.frame)的简单示例如下: > y yy [1] NA NA NA
这是一个示例数据框: > df = data.frame(rep(seq(0, 120, length.out=6), times = 2), c(sample(1:50, 4), + NA, NA,
我有一个包含条目的数据框;似乎这些值不被视为 NA,因为 is.na 返回 FALSE。我想将这些值转换为 NA 但找不到方法。 最佳答案 使用 dfr[dfr==""]=NA哪里dfr是你的数据框。
我有一个示例表,其中包含一些但不是全部 NA需要替换的值。 > dat id message index 1 1 1 2 1 foo 2 3 1
在 R 中,如果从 NA 中减去一个数字,它将返回 NA: > x NA - x [1] NA 但是如果你尝试从 NA 中减去一个日期,它会返回一个错误: > x NA - x Error in
这个问题在这里已经有了答案: Logical operators (AND, OR) with NA, TRUE and FALSE (2 个答案) 关闭 4 年前。 为什么在 R 中会这样? >
我有一个看起来像这样的数据框: SampleNo Lab1 Lab2 Lab3 lab4 lab5 lab6 lab7 lab8 lab9 lab10 1 59
我有一个按“id”分组的数据框和一个包含缺失值的变量“age”,NA。 在每个“id”中,我想替换“age”的缺失值,但只“填充”之前 第一个 非NA 值。 data % group_by(id) %
我有如下所示的数据框: df df id value v1 v2 v3 1 1 351 NA 1 0 2 2 585 0 1 1 3 3 321 NA 0 1 4
所以我有一个数据集,只需查看它,数据集中就有明显的 NA。 > dput(bmi.cig) structure(list(MSI.subset.BMI = structure(c(4L, 4L, 4
我有两个 30m x 30m 的光栅文件,我想从中采样点。在采样之前,我想从图像中移除模糊区域。我求助于 R 和 Hijman 的 Raster 包来完成这项任务。 使用 drawPoly(sp=TR
我有以下时间序列 > y y[c(1,2,5,9,10)] y [,1] 2011-09-04 NA 2011-09-05 NA 2011-09-06 3 201
这个问题在这里已经有了答案: Replace missing values (NA) with most recent non-NA by group (7 个回答) 5年前关闭。 我有一个 DF 个
我想向我的数据框中添加一个新变量 (N_notNAs),它定义了其他任何变量是否为 NA。 x y z N_notNAs 2 3 NA NA NA 1 3 NA 2
我有一个名为 SMOKE 的因子,级别为“Y”和“N”。缺失值被替换为 NA(从初始级别“NULL”开始)。然而,当我查看这个因素时,我得到这样的结果: head(SMOKE) # N N Y Y
假设我有以下 data.frame: t<-c(1,1,2,4,5,4) u<-c(1,3,4,5,4,2) v<-c(2,3,4,5,NA,2) w<-c(NA,3,4,5,2,3) x<-c(2,
我是一名优秀的程序员,十分优秀!