В любом хорошем учебнике по статистике можно узнать, что наличие тесной корреляции между двумя  переменными не обязательно указывает на причинно-следственную связь между ними. Другими словами, наличие корреляции между Х и Y совсем необязательно означает, что именно изменения в Х являются причиной сопутствующих изменений в Y. Ведь вполне возможно существование некой неизвестной нам (латентной) переменной Z, которая оказывает влияние и на Х, и на Y, являясь истинной причиной ковариации между ними.  И тем не менее, достаточно часто, в том числе в научных публикациях, можно встретить безосновательную интерпретацию корреляции именно как причинно-следственной связи.

Подобную интерпретацию можно продемонстрировать на примере данных по динамике численности ученых (докторов и кандидатов наук) в Беларуси в период с 2000 по 2011 гг. Данные взяты с официального сайта Национального статистического комитета республики. Там же были взяты данные по объемам железнодорожных и воздушных пассажирских перевозок за этот период времени. (Файл со всеми этими данными, пригодный для загрузки в R, хранится у меня в Dropbox'е; см. код ниже).

Полученные данные отображены на рисунках 1 и 2. Из рис. 1 четко видно, что в период с 2000 по 2011 гг. количество докторов и кандидатов наук в Беларуси неуклонно снижалось. Интересно, что такое же выраженное снижение имело место и для объемов железнодорожных пассажирских перевозок. В то же время объемы воздушных перевозок пассажиров к концу рассматриваемого периода времени существенно возросли (рис. 2). Неудивительно, что  численность как докторов, так и кандидатов наук тесно положительно коррелирует с объемами железнодорожных перевозок (r = 0.984, P < 0.001 и r = 0.921, P < 0.001 соответственно) и отрицательно - с объемами воздушных перевозок (r = -0.797, P = 0.002 и r = -0.681, P = 0.015 соответственно).

Рисунок 1. Динамика численности докторов (Doctors) и кандидатов (PhD) наук в Республике Беларусь в период с 2000 по 2011 гг. Размер символов на графике пропорционален годовому объему железнодорожных пассажирских перевозок (млн. пассажиро-километров). Для визуализации тренда к данным добавлена сглаживающая линия (сплайн).

Рисунок 2. Динамика численности докторов (Doctors) и кандидатов (PhD) наук в Республике Беларусь в период с 2000 по 2011 гг. Размер символов на графике пропорционален годовому объему воздушных пассажирских перевозок (млн. пассажиро-километров). Для визуализации тренда к данным добавлена сглаживающая линия (сплайн).

Конечно, вряд ли стоит предполагать, что именно изменения в объемах пассажирских перевозок в Беларуси стали причиной столь выраженной "утечки мозгов". Тем не менее, нерадивый исследователь мог бы интерпретировать приведенные на рис. 1 и 2 данные, например, так: "В начале изученного периода высокий объем железнодорожных перевозок стимулировал отток ученых из страны. Однако, по мере снижения объемов этого типа перевозок, ученые "пересели" на самолеты, на что указывают существенно возросшие объемы воздушных перевозок."

Будьте внимательны при интерпретации результатов анализа данных!


P.S.: R-код для построения рис. 1 и 2 и расчета коэффициентов корреляции приведен ниже:

# Загрузка данных с Dropbox (требуется подключение к Internet!):
phd <- read.csv(file = "http://dl.dropboxusercontent.com/u/7521662/phds.csv")
 
require(ggplot2) # подключение пакета для визуализации данных
 
# Рисунок 1:
ggplot(data = subset(phd, Transport == "Rail"), aes(x = Year, y = Number)) + 
  geom_point(aes(size = MlnPass), shape = 15) + geom_smooth(se = F) + 
  facet_wrap(~Type, scales = "free_y") + 
  ylab("Численность, чел.") + xlab("Год") + 
  scale_size_continuous(guide = guide_legend(title = "Ж/Д \nперевозки"))
 
# Рисунок 2:
ggplot(data = subset(phd, Transport == "Air"), aes(x = Year, y = Number)) + 
  geom_point(aes(size = MlnPass), shape = 15) + geom_smooth(se = F) +
  facet_wrap(~Type, scales = "free_y") + xlab("Год") + 
  ylab("Численность, чел.") + xlab("Год") + 
  scale_size_continuous(guide = guide_legend(title = "Воздушные \nперевозки"))
 
# Расчет коэффициента корреляции Спирмена между
 
# 1) Численностью докторов наук и объемом Ж/Д перевозок:
with(subset(phd, Type == "Doctor" & Transport == "Rail"),
     cor.test(MlnPass, Number, type = "spearman"))
 
# 2) Численностью кандидатов наук и объемом Ж/Д перевозок:
with(subset(phd, Type == "PhD" & Transport == "Rail"),
     cor.test(MlnPass, Number, type = "spearman"))
 
# 3) Численностью докторов наук и объемом воздушных перевозок:
with(subset(phd, Type == "Doctor" & Transport == "Air"),
     cor.test(MlnPass, Number, type = "spearman"))
 
# 4) Численностью кандидатов наук и объемом воздушных перевозок:
with(subset(phd, Type == "PhD" & Transport == "Air"),
     cor.test(MlnPass, Number, type = "spearman"))

4 Комментарии

Maksym написал(а)…
Последний вывод можно сделать круче: уменьшение числа мозгов в РБ привело к увеличению популярности воздушных перевозок, следовательно кандидаты и доктора наук являлись значительным препятствием для рекламы Аэрофлота :)
Sergey Mastitsky написал(а)…
Ага, можно и так :) Вариантов много...
Анонимный написал(а)…
)))))))
Анонимный написал(а)…
А лучше сразу смотреть не на парные взаимодействия показателей, а делать разведочный PCA. И видеть что о взаимодействии этих четырёх показателей не идет и речи.


> data.plain<-cbind(cast(phd, Year ~ Transport + Type , value= "Number")[,3:4], cast(phd, Year ~ Transport + Type , value= "MlnPass")[,3:4])

> colnames(data.plain)<-c("PhD","Doc","Air","Rail")
> cor(data.plain)
PhD Doc Air Rail
PhD 1.0000000 0.9010627 -0.6814958 0.9209572
Doc 0.9010627 1.0000000 -0.7967048 0.9284945
Air -0.6814958 -0.7967048 1.0000000 -0.8504763
Rail 0.9209572 0.9284945 -0.8504763 1.0000000

> prcomp(data.plain)
Standard deviations:
[1] 3507.50433 224.00955 75.21922 11.33577

Rotation:
PC1 PC2 PC3 PC4
PhD -0.059733778 0.2281076249 -0.96974717 0.06316015
Doc -0.008788971 0.0004490697 -0.06434603 -0.99788884
Air 0.101715926 0.9698636923 0.22091191 -0.01470429
Rail -0.992979607 0.0856220070 0.08153486 0.00352672
Новые Старые