Как подсчитать количество наблюдений из 2 столбцов, где переменные не могут быть отделены друг от друга - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть фрейм данных из 222 наблюдений и 2 переменных: landslide_z_prediction и y (вхождения)

landslide_z_prediction принимает значения от 0в 1, в то время как ytest принимает целые числа 0 или 1.

Моя задача - выяснить, сколько из предсказанных положительных / отрицательных значений было предсказано правильно.

  • , если z <0,5 -> прогнозируемый отрицательный
  • , если z> 0,5 -> прогнозируемый положительный
  • , если y = 0 -> наблюдаемый отрицательный
  • , если y = 1 -> наблюдаемое положительное значение

Сценарии:

a) если z <0,5 и y = 0 -> прогноз верен

b) если z <0,5 и y = 1 -> прогноз неправильный

c) если z> 0,5 и y = 1 -> прогноз правильный

d)если z> 0,5 и y = 0 -> прогноз неверен

Я поместил свои 222 наблюдения в формат data.frame

combined_predicitons <- data.frame(landslide_z_predicted, ytest)

Как я могу извлечь числовхождений каждого сценария?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Hy,

Я нашел одно решение вашей проблемы с пакетом dplyr.Вот код:

library(dplyr)

# generate sample data
df <- data.frame(landslide_z_predicted=runif(75), y=sample(c(0, 1), 75, replace=T))

# add is_correct and case variables to the data frame
df <- df %>%
  mutate(is_correct = case_when((landslide_z_predicted < 0.5) & !y ~ TRUE,
                                (landslide_z_predicted >= 0.5) & y ~ TRUE,
                                TRUE ~ FALSE)) %>%
 mutate(case = case_when((landslide_z_predicted < 0.5) & !y & is_correct ~ "case_01",
                          (landslide_z_predicted < 0.5) & y & !is_correct ~ "case_02",
                          (landslide_z_predicted >= 0.5) & y & is_correct ~ "case_03",
                          (landslide_z_predicted >= 0.5) & !y & !is_correct ~ "case_04"))

# count the occurrences of the cases
df %>% select(case) %>% group_by(case) %>% summarize(count=n())

Сначала я генерирую переменную с именем is_correct.Это правда / ложь, если прогноз был верным или нет.Во втором мутате я перечисляю все ваши случаи из вашего вопроса и называю их «case_01», «case_02», ... Имея это в виду, я могу сгруппировать фрейм данных по случаям и подсчитать вхождения.

0 голосов
/ 18 февраля 2019

Если я правильно понимаю, вы хотите создать матрицу путаницы .

Чтобы сделать это, я могу предложить вам следующее:

1 - Измените значения z на 1 или 0 в соответствии с вашим порогом :

Поскольку ваш порог равен 0,5, вы можете использовать round.

combined_predicitons$landslide_z_predicted_dicotomy = round(combined_predicitons$landslide_z_predicted)

В противном случае используйте ifelse, если прогнозируемое значение превышает порог , в противном случае будет выведено значение 1, 0.

threshold = 0.5    
combined_predicitons$landslide_z_predicted_dicotomy = ifelse(combined_predicitons$landslide_z_predicted >= threshold, 1, 0)

2 - Создайте table

table(combined_predicitons$y, combined_predicitons$landslide_z_predicted_dicotomy)

С этим у вас будет количество вхождений каждого сценария.

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