Осмысление данных временных рядов с> 43 000 наблюдений - PullRequest
0 голосов
/ 07 октября 2019

Обновлено сообщение

После большой работы я наконец-то объединил три разных набора данных. Результатом является фрейм данных временного ряда с 43 396 наблюдениями 7 семи переменных. Ниже я включил несколько строк того, как выглядят мои данные.

     Dyad  year  cyberattack  cybersev MID   MIDsev   peace score
     2360  2005    NA          NA       0      1          0
     2360  2006    NA          NA       NA     NA         0
     2360  2007    1           3.0      0      1          0
     2360  2008    1           4.0      0      1          0
     2360  2009    3           3.33     1      4          0
     2360  2010    1           3.0      NA     NA         0
     2360  2011    3           2.0      NA     NA         0
     2360  2012    1           2.0      NA     NA         0 
     2360  2013    4           2.0      NA     NA         0

Если меня интересует сравнение различий между парами стран (диадами) в том, как часто они запускают атаки (либо в киберпространстве, либо с помощью MID, либо ни того, ни другого) ... как мне поступить? this?

Поскольку я работаю с данными по странам / годам, как я могу получить описательную статистику для разных стран (диад) в моей переменной Dyad? Например, я хотел бы знать, как поведение Dyad 2360 (США и Иран) сравнивается с другими странами.

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

    table(final$Dyadpair) 
    names(sort(-table(final$Dyadpair)))

Вы упомянули об использовании aggregate или dplyr - но я не вижу, как они позволят мне описательную статистику для всех моих уникальных диад? Не могли бы вы остановиться на этом подробнее?

Возможно ли, чтобы код возвращал что-то вроде этого: для Dyad 2360 в 2005-2013 годах 80% были NA, 10% были кибератаки и 10% былиMID-атаки и т. Д.?


Уточните, чтобы уточнить:

Хорошо, да - приведенный выше пример был просто гипотетическим. Основываясь на девяти строках данных, которые я предоставил, я надеюсь, что R сможет предоставить это, когда дело доходит до описательной статистики.

Дядька : 2360 Без атак: 22,22% (2/9) ... в 2005 и 2006 годах

Кибератаки : 77,78% (7/ 9)… .в 2007–2013 годах

MID-атаки : 11,11% (1/9)… .in 2009

И кибер, и MID: 11,11% (1/9)…. В 2009 г.

По существу, в течение определенного промежутка времени (2005–2013 гг. Для примера, который я привел выше), сколько из этих лет приведет к атакам НЕТ,сколько из этих лет приводит к кибератаке, сколько из этих лет приводит к атаке MID, и сколько из этих лет приводит к кибер-атаке и атаке MID.

Я не знаю, возможно ли это с тем, как настроены мои данные -> так как я агрегировал кибератаки и атаки MID в год? И да, я также хотел бы принять во внимание серьезность атак (как кибератак, так и атак MID), но я не знаю, как это сделать.

Помогает ли это уточнить, что я ищудля

1 Ответ

0 голосов
/ 08 октября 2019

Вот подход dplyr с моим лучшим предположением о том, что вы хотите. Он выведет фрейм данных с одной строкой на одну диаду и одинаковую сводную статистику для каждой диады.

library(dplyr)
your_data %>%
  group_by(Dyad) %>%
  summarize(
    year_range = paste(min(year), max(year), sep = "-"),
    no_attacks = mean(is.na(cyberattack) & (is.na(MID) | MID == 0)),
    cyber_attacks = mean(!is.na(cyberattack)),
    MID_attacks = mean(!is.na(MID) & MID > 0),
    cyber_and_MID = mean(!is.na(cyberattack) & (!is.na(MID) & MID > 0)),
    cyber_sev_weighted = weighted.mean(cyberattack, w = cybersev, na.rm = TRUE)
  )

# # A tibble: 1 x 7
#    Dyad year_range no_attacks cyber_attacks MID_attacks cyber_and_MID cyber_sev_weighted
#   <int> <chr>           <dbl>         <dbl>       <dbl>         <dbl>              <dbl>
# 1  2360 2005-2013       0.222         0.778       0.111         0.111               1.86

Используя эти данные:

your_data = read.table(text = 'Dyad  year  cyberattack  cybersev MID   MIDsev   peace_score
     2360  2005    NA          NA       0      1          0
     2360  2006    NA          NA       NA     NA         0
     2360  2007    1           3.0      0      1          0
     2360  2008    1           4.0      0      1          0
     2360  2009    3           3.33     1      4          0
     2360  2010    1           3.0      NA     NA         0
     2360  2011    3           2.0      NA     NA         0
     2360  2012    1           2.0      NA     NA         0 
     2360  2013    4           2.0      NA     NA         0', header = T)
...