В любом хорошем учебнике по статистике можно узнать, что наличие тесной корреляции между двумя переменными не обязательно указывает на причинно-следственную связь между ними. Другими словами, наличие корреляции между Х и 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 и 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"))
> 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
Отправить комментарий