как рассчитать z-показатель, используя функцию scale () со значениями NA - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть фрейм данных с 98790 obs. из 143 переменных. Он содержит как цифры, так и NA. Я хотел бы выполнить z-Score для каждой строки. Я попробовал следующее:

>df
sample1 sample2 sample3 sample4 sample5 sampl6 sample7 sample8
1:     6.96123  3.021311          NA        NA  7.464205   7.902878  -1.194076   7.771018
2:          NA        NA          NA        NA        NA         NA         NA         NA
3:          NA        NA          NA        NA        NA         NA   2.784635         NA
4:          NA        NA    8.342075        NA  8.464205         NA   6.462707   7.118941
5:          NA  7.243703   10.149430        NA        NA   8.317915         NA         NA

И:

>res <- t(scale(t(df)))

Будет ли указанная выше функция игнорировать все NA с и вычислять z-показатель? если нет, как я могу рассчитать z балл без учета NA с?

1 Ответ

1 голос
/ 25 февраля 2020

Возможно, вы захотите преобразовать в матрицу перед транспонированием / масштабированием / повторным транспонированием (фрейм данных -> матрица -> транспонировать -> масштабировать -> транспонировать -> фрейм данных)

В противном случае, похоже, работает хорошо. Вот пример с некоторыми NA включенными значениями:

set.seed(101)
m <- matrix(rnorm(25),5,5)
m[sample(1:25,size=8)] <- NA
m
##            [,1] [,2]       [,3]       [,4]       [,5]
## [1,] -0.3260365   NA  0.5264481 -0.1933380         NA
## [2,]  0.5524619   NA -0.7948444 -0.8497547  0.7085221
## [3,] -0.6749438   NA  1.4277555  0.0584655 -0.2679805
## [4,]  0.2143595   NA -1.4668197 -0.8176704 -1.4639218
## [5,]         NA   NA -0.2366834         NA  0.7444358
scale(m)
##            [,1] [,2]       [,3]       [,4]       [,5]
## [1,] -0.4885685   NA  0.5628440  0.5661203         NA
## [2,]  1.1159619   NA -0.6077977 -0.8785073  0.7475404
## [3,] -1.1258292   NA  1.3613864  1.1202838 -0.1904198
## [4,]  0.4984359   NA -1.2031558 -0.8078967 -1.3391573
## [5,]         NA   NA -0.1132769         NA  0.7820366
## attr(,"scaled:center")
## [1] -0.05853976         NaN -0.10882877 -0.45057439 -0.06973609
## attr(,"scaled:scale")
## [1] 0.5475112 0.0000000 1.1286908 0.4543848 1.0410918

Также в документации (?scale) очень четко указано, как обрабатываются значения NA:

... центрирование выполняется путем вычитания значения столбца (, исключая 'NA's ) из' x 'из соответствующих им столбцов ...

... * root -средство квадрат для (возможно, центрированного) столбца определяется как sqrt (сумма (x ^ 2) / (n-1)), где x - вектор значений не пропущенных , а n - число не пропущенные значения ...

(выделение добавлено)

...