Я вручную вычислил дисперсию двух наборов данных с использованием выражений определения, вычисления и нормального R.
set.seed(12345)
n <- 1e7
df <- tibble(
small = rnorm(n, mean=100, sd=1),
large = rnorm(n, mean=1e8, sd=1)
)
#Definitional
varFuncd <- function(x) {
x <- as.numeric(as.character(x))[!is.na(as.numeric(as.character(x)))]
sum((x-mean(x))^2) / (length(x)-1)
}
#Computational
varFuncc <- function(x){
x <- as.numeric(as.character(x))[!is.na(as.numeric(as.character(x)))]
(sum(x^2) - (sum(x)^2)/length(x))/(length(x)-1)
}
, но дисперсия столбца Large дает ожидаемый большой результат (1.6). Пожалуйста, в чем может быть причина?
Мой ответ:
Все определения выражений выдали ожидаемую дисперсию 1. Однако вычислительное выражение для «Large» вызвало более высокую дисперсию. Определительное выражение производит квадрат разности, что переводит в квадрат относительно небольших значений и дает более эффективные результаты. Хотя в вычислениях используется разность квадратов, когда лежащие в основе значения велики, разность квадратов дает менее эффективный результат, поскольку возведение в квадрат больших чисел приводит к появлению сверхбольших чисел, которые становятся неэффективными при делении на n-1.