R: Выборка: функция калибровки: ошибка в SVD (X): бесконечные или отсутствующие значения в "х"
Я чувствую, что это общая проблема, но я не могу найти ответ. Я работаю с отобранным набором данных и пытаюсь рассчитать вес калибровки по известным совокупным совокупностям, используя пакет выборки. Функция калибровки воздействует на столбец выборки или матрицу (Xs), начальные веса (d) и общее количество населения (общее) для вычисления 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")
Затем я искал бесконечные значения и NaN, основываясь на похожих вопросах в SO, используя следующий код, и ничего не нашел.
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
Мои извинения, если это элементарно. Спасибо.
1 ответ
Я не знаком с пакетом, но я посмотрел, и ошибка происходит от функции 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))
,