R:采样:校准函数:svd(X) 中的错误:'x' 中的无限值或缺失值
R: Sampling: Calib function: Error in svd(X) : infinite or missing values in 'x'
我觉得这是一个普遍的问题,但我似乎找不到答案。我正在处理一个采样数据集,并尝试使用 Sampling package 计算针对已知人口总数的校准权重。 calib 函数作用于样本列或矩阵 (Xs)、初始权重 (d) 和总体总数 (total),以计算 g 权重。下面是我的数据集中产生错误的第一列:
Error in svd(X) : infinite or missing values in 'x'
其他列也会产生此错误,但为了简单起见,我只包含了第一个。下面的可重现示例:
library("sampling")
# Sample
Xs = c(3793, 4505, 2272, 1126, 1839, 2060, 9077, 3174, 4013, 1673, 1299, 3981, 1770, 1059, 899, 2475, 1731, 2135, 843, 1880, 7887, 6402, 3022, 3345, 3954, 4489, 6222, 694)
Xs <- as.matrix(sapply(Xs, as.numeric))
# Initial Weights
d = rep(1, nrow(Xs))
# Population total
total = c(1616772)
g = calib(Xs, d, total, method="logit")
然后,我根据 S.O 中的类似问题,使用以下代码搜索无限值和 NaN,但一无所获。
length(Xs)
sum(is.finite(Xs))
sum(is.nan(Xs))
length(d)
sum(is.finite(d))
sum(is.nan(d))
length(total)
sum(is.finite(total))
sum(is.nan(total))
[1] 28
[1] 28
[1] 0
[1] 28
[1] 28
[1] 0
[1] 1
[1] 1
[1] 0
如果这是初级的,我很抱歉。
谢谢。
我不熟悉这个包,但我看了看,错误来自函数 base::svd()。我怀疑这可能是一个启动问题,所以我尝试了以下方法并且有效:
library(sampling)
Xs = c(3793, 4505, 2272, 1126, 1839, 2060, 9077, 3174, 4013, 1673, 1299, 3981, 1770, 1059, 899, 2475, 1731, 2135, 843, 1880, 7887, 6402, 3022, 3345, 3954, 4489, 6222, 694)
Xs <- as.matrix(sapply(Xs, as.numeric))
# Initial Weights
d = rep(1, nrow(Xs))
# Population total
total = c(1616772)
g = calib(Xs, d, total, method="logit")
不过要小心!为 d 尝试不同的启动会给我非常不同的结果。即比较使用:d = rep(2, nrow(Xs))
.
我觉得这是一个普遍的问题,但我似乎找不到答案。我正在处理一个采样数据集,并尝试使用 Sampling package 计算针对已知人口总数的校准权重。 calib 函数作用于样本列或矩阵 (Xs)、初始权重 (d) 和总体总数 (total),以计算 g 权重。下面是我的数据集中产生错误的第一列:
Error in svd(X) : infinite or missing values in 'x'
其他列也会产生此错误,但为了简单起见,我只包含了第一个。下面的可重现示例:
library("sampling")
# Sample
Xs = c(3793, 4505, 2272, 1126, 1839, 2060, 9077, 3174, 4013, 1673, 1299, 3981, 1770, 1059, 899, 2475, 1731, 2135, 843, 1880, 7887, 6402, 3022, 3345, 3954, 4489, 6222, 694)
Xs <- as.matrix(sapply(Xs, as.numeric))
# Initial Weights
d = rep(1, nrow(Xs))
# Population total
total = c(1616772)
g = calib(Xs, d, total, method="logit")
然后,我根据 S.O 中的类似问题,使用以下代码搜索无限值和 NaN,但一无所获。
length(Xs)
sum(is.finite(Xs))
sum(is.nan(Xs))
length(d)
sum(is.finite(d))
sum(is.nan(d))
length(total)
sum(is.finite(total))
sum(is.nan(total))
[1] 28
[1] 28
[1] 0
[1] 28
[1] 28
[1] 0
[1] 1
[1] 1
[1] 0
如果这是初级的,我很抱歉。 谢谢。
我不熟悉这个包,但我看了看,错误来自函数 base::svd()。我怀疑这可能是一个启动问题,所以我尝试了以下方法并且有效:
library(sampling)
Xs = c(3793, 4505, 2272, 1126, 1839, 2060, 9077, 3174, 4013, 1673, 1299, 3981, 1770, 1059, 899, 2475, 1731, 2135, 843, 1880, 7887, 6402, 3022, 3345, 3954, 4489, 6222, 694)
Xs <- as.matrix(sapply(Xs, as.numeric))
# Initial Weights
d = rep(1, nrow(Xs))
# Population total
total = c(1616772)
g = calib(Xs, d, total, method="logit")
不过要小心!为 d 尝试不同的启动会给我非常不同的结果。即比较使用:d = rep(2, nrow(Xs))
.