Средневзвешенное значение нескольких столбцов с использованием заданных весов - PullRequest
0 голосов
/ 23 апреля 2019

При условии, что у меня есть:

weights <- c(0.15, 0.25, 0.11, 0.9, 0.35, 0.05)

И следующие данные Phones:

make     model    price    users    rating    continent    market       years   success
Nokia     3310    800       5000       5       Europe     4000000        30        yes
Huawei    Foto    500      10000       7       Asia       1200000        10       no
Apple     XS      1500     90000       8       NAmerica   4200000         8        yes
Mi        125     300        500       5       Asia        300000         3        yes

Я хочу добавить новый столбец с именем Impact, то есть вес, умноженный на столбцы price, users, rating, market, and years

Пока я могу взять среднее значение столбцов, используя:

Phones$wt <- rowMeans(subset(Phones, select = c(price, users, rating, market, years)), na.rm = TRUE)

Итак, я хочу сделать взвешенное среднее в зависимости от весов, которые я выбрал вручную.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Средневзвешенное значение аналогично умножению матрицы, за исключением того, что вы дополнительно делите результат на сумму весов. У вас есть 6 весов и 5 столбцов, поэтому я убрал последний вес.

m <- as.matrix(subset(Phones, select = c(price, users, rating, market, years)))

weights <- c(0.15, 0.25, 0.11, 0.9, 0.35)

m %*% weights / sum(weights)

#           [,1]
# [1,] 2046239.2
# [2,]  615101.9
# [3,] 2160641.3
# [4,]  153506.6

Используемые данные:

Phones <- data.table::fread('
make     model    price    users    rating    continent    market       years   success
Nokia     3310    800       5000       5       Europe     4000000        30        yes
Huawei    Foto    500      10000       7       Asia       1200000        10       no
Apple     XS      1500     90000       8       NAmerica   4200000         8        yes
Mi        125     300        500       5       Asia        300000         3        yes
')
0 голосов
/ 23 апреля 2019

Обратите внимание, что взвешенное среднее по критериям, установленным с разными диапазонами, в значительной степени бессмысленно. Например. небольшие процентные различия на рынке затопляют большие процентные различия в рейтинге. Вы должны нормализовать каждый вектор столбца и затем применить веса. Также я предполагаю, что низкая цена лучше, поэтому следует провести нормализацию по обратным значениям. Итак, ваша нормализованная матрица будет выглядеть так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...