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)),

Другие вопросы по тегам