парное расстояние Махаланобиса, сгруппированное по двум факторам в петле - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы рассчитать попарно расстояние Махаланобиса между переменными в матрице.HDMD :: pairwise.mahalanobis работает хорошо, но сложность состоит в том, что я не хочу, чтобы вычисления производились по всей структуре данных - они должны быть сгруппированы по двум дискретным переменным.Кроме того, поскольку парные вычисления Махаланобиса встречаются реже, документации не так много, и я не могу интерпретировать полученную ошибку.

У меня большой кадр данных с двумя группирующими переменными и рядом числовых переменных:

head (df)

               X_variable        Y_variable         one      two    three     four     five      six    seven    eight     nine
    one        A                 D                  1.879389 2.619558 2.170685 1.114137 2.449536 2.231820 1.480205 2.493513 1.585385
    two        B                 E                  2.619558 5.357394 5.250237 2.577334 4.626581 5.447670 3.729916 5.238132 4.622757
    three      C                 F                  2.170685 5.250237 5.730018 2.948394 4.221243 5.802600 4.086648 5.147827 5.537414

Я перебираю структуру данных в следующемпуть:

    df$X_variable <- droplevels(df$X_variable) # remove empty levels 

    for (i in unique(df$Y_variable)){ 
         print(i) # sanity check
         m_df <- subset(df, Y_variable==i) # create a df for each level
         m <- data.matrix(df[df$Y_variable==i, [3:11])  # make a matrix  
         m[] <- as.numeric(m) # work around to avoid as.numeric() changing matrix structure
         grouping_m = t(m_df$X_variable)  # group by variable
         cov_m = var(m)
         m_dist = pairwise.mahalanobis(m, grouping_m, cov_m, cols)
      }

Но это приводит к непрозрачной (для меня) ошибке, которую я не могу расшифровать:

    Error in !inverted : invalid argument type
    In addition: Warning message:
    In if (dim(cov) != c(p, p)) stop("cov matrix not of dim = (p,p)\n") :
      the condition has length > 1 and only the first element will be used
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...