Sepal.Length
из набора `iris.data(iris)
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length)) +
geom_density(fill="lightblue")+
ggtitle("Гистограмма и плотность распределения Sepal.Length") +
theme_bw()
На графике наблюдается достаточно плоский эксцесс. Выведем описательные статистики.
library(DescTools)
Desc(list(Sepal.Length = iris$Sepal.Length), plotit = TRUE)
## ──────────────────────────────────────────────────────────────────────────────
## Describe list(Sepal.Length = iris$Sepal.Length) (list):
##
## List of 1
## 1 $ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##
## ──────────────────────────────────────────────────────────────────────────────
## 1 - Sepal.Length (numeric)
##
## length n NAs unique 0s mean meanCI'
## 150 150 0 35 0 5.843 5.710
## 100.0% 0.0% 0.0% 5.977
##
## .05 .10 .25 median .75 .90 .95
## 4.600 4.800 5.100 5.800 6.400 6.900 7.255
##
## range sd vcoef mad IQR skew kurt
## 3.600 0.828 0.142 1.038 1.300 0.309 -0.606
##
## lowest : 4.3, 4.4 (3), 4.5, 4.6 (4), 4.7 (2)
## highest: 7.3, 7.4, 7.6, 7.7 (4), 7.9
##
## ' 95%-CI (classic)
Skew(iris$Sepal.Length, na.rm=TRUE, conf.level = 0.95, ci.type = "classic")
## skewness lwr.ci upr.ci
## 0.3086407 -0.3804196 0.3804196
Kurt(iris$Sepal.Length, na.rm=TRUE, method=2, conf.level = 0.95, ci.type = "classic")
## kurtosis lwr.ci upr.ci
## -0.5520640 -0.7714087 0.7714087
Skew(iris$Sepal.Length, na.rm=TRUE, conf.level = 0.95, ci.type = "classic")
## skewness lwr.ci upr.ci
## 0.3086407 -0.3804196 0.3804196
Kurt(iris$Sepal.Length, na.rm=TRUE, method=2, conf.level = 0.95, ci.type = "classic")
## kurtosis lwr.ci upr.ci
## -0.5520640 -0.7714087 0.7714087
shapiro.test(iris$Sepal.Length)
##
## Shapiro-Wilk normality test
##
## data: iris$Sepal.Length
## W = 0.97609, p-value = 0.01018
nortest::lillie.test(iris$Sepal.Length)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: iris$Sepal.Length
## D = 0.088654, p-value = 0.005788
plot(ecdf(scale(iris$Sepal.Length)), col="red", main="Эмпирическая и теоретическая кумулятивные функции")
curve(pnorm, from = -10, to = 10, add = TRUE, col="blue")
nortest::ad.test(iris$Sepal.Length)
##
## Anderson-Darling normality test
##
## data: iris$Sepal.Length
## A = 0.8892, p-value = 0.02251
nortest::cvm.test(iris$Sepal.Length)
##
## Cramer-von Mises normality test
##
## data: iris$Sepal.Length
## W = 0.1274, p-value = 0.04706
С помощью кода подготавим данные из файла SPSS для анализа, фокусируясь на трех переменных (V12, V13, V15).
library(haven)
df<-read_sav("C:/Users/Admin/Documents/База_КлимРиск_2023.sav")
library(questionr)
library(dplyr)
##
## Присоединяю пакет: 'dplyr'
## Следующие объекты скрыты от 'package:stats':
##
## filter, lag
## Следующие объекты скрыты от 'package:base':
##
## intersect, setdiff, setequal, union
Распределение ответов на вопрос V12
df <- haven::as_factor(df)
prop.table(table(df$V12))*100
##
## Выше Ниже Не изменилась
## 21.134594 48.609566 21.023359
## Другое Затрудняюсь ответить
## 2.113459 7.119021
Распределение ответов на вопрос V13
prop.table(table(df$V13))*100
##
## Стала холоднее Стала теплее Не изменилась
## 64.60674 16.74157 18.65169
Распределение ответов на вопрос V15
prop.table(table(df$V15))*100
##
## Стала холоднее Стала теплее Не изменилась
## 65.62150 17.13326 17.24524
Распределение ответов на вопрос V12 в зависимости от региона
prop.table(table(df$Region, df$V12), margin = 2)*100
##
## Выше Ниже Не изменилась Другое
## Алтайский край 35.263158 20.823799 39.153439 5.263158
## Республика Алтай 47.894737 57.665904 38.624339 68.421053
## Республика Тыва 16.842105 21.510297 22.222222 26.315789
## Монголия 0.000000 0.000000 0.000000 0.000000
##
## Затрудняюсь ответить
## Алтайский край 50.000000
## Республика Алтай 23.437500
## Республика Тыва 26.562500
## Монголия 0.000000
Распределение ответов на вопрос V13 в зависимости от региона
prop.table(table(df$Region, df$V13), margin = 2)*100
##
## Стала холоднее Стала теплее Не изменилась
## Алтайский край 18.43478 56.37584 45.78313
## Республика Алтай 56.86957 31.54362 36.74699
## Республика Тыва 24.69565 12.08054 17.46988
## Монголия 0.00000 0.00000 0.00000
Распределение ответов на вопрос V15 в зависимости от региона
prop.table(table(df$Region, df$V15), margin = 2)*100
##
## Стала холоднее Стала теплее Не изменилась
## Алтайский край 22.69625 37.25490 49.35065
## Республика Алтай 52.90102 49.67320 33.11688
## Республика Тыва 24.40273 13.07190 17.53247
## Монголия 0.00000 0.00000 0.00000
Распределение ответов на вопрос V12 в зависимости от возраста
prop.table(table(df$age_cats3, df$V12), margin = 2)*100
##
## Выше Ниже Не изменилась Другое
## До 30 лет 18.478261 16.197183 22.826087 5.263158
## 31-49 лет 46.195652 49.061033 46.195652 63.157895
## 50 лет и старше 35.326087 34.741784 30.978261 31.578947
##
## Затрудняюсь ответить
## До 30 лет 16.666667
## 31-49 лет 48.333333
## 50 лет и старше 35.000000
Распределение ответов на вопрос V13 в зависимости от возраста
prop.table(table(df$age_cats3, df$V13), margin = 2)*100
##
## Стала холоднее Стала теплее Не изменилась
## До 30 лет 16.99463 15.54054 21.51899
## 31-49 лет 48.47943 45.27027 50.00000
## 50 лет и старше 34.52594 39.18919 28.48101
Распределение ответов на вопрос V15 в зависимости от возраста
prop.table(table(df$age_cats3, df$V15), margin = 2)*100
##
## Стала холоднее Стала теплее Не изменилась
## До 30 лет 14.65969 31.03448 17.33333
## 31-49 лет 51.65794 41.37931 41.33333
## 50 лет и старше 33.68237 27.58621 41.33333
library(dplyr)
library(sjlabelled)
##
## Присоединяю пакет: 'sjlabelled'
## Следующий объект скрыт от 'package:dplyr':
##
## as_label
## Следующие объекты скрыты от 'package:haven':
##
## as_factor, read_sas, read_spss, read_stata, write_sas, zap_labels
## Следующий объект скрыт от 'package:ggplot2':
##
## as_label
V14<-df %>%
select(contains("V14")) %>%
select_if(is.factor)
V14tab<-V14 %>%
multi.table(true.codes=list("да"), freq=TRUE) %>%
as.data.frame() %>%
rename(Pct=`%multi`) %>%
arrange(desc(Pct))
V14tab
## n Pct
## V14_2 436 47.8
## V14_1 428 46.9
## V14_10 381 41.7
## V14_5 310 34.0
## V14_4 266 29.1
## V14_7 211 23.1
## V14_3 102 11.2
## V14_8 64 7.0
## V14_6 58 6.4
## V14_9 42 4.6
## V14_88 23 2.5
library(sjlabelled)
V14labs<-df %>%
select(contains("V14")) %>%
select_if(is.factor) %>%
get_label()
V14labs
## V14_1
## "Резкие перепады температуры (от холода к теплу и наоборот)"
## V14_2
## "Затяжные морозы, увеличение периодов аномального холода"
## V14_3
## "Частые оттепели"
## V14_4
## "Увеличение гололеда на дорогах"
## V14_5
## "Обильные снегопады, увеличение снежного покрова"
## V14_6
## "Сход снежных лавин"
## V14_7
## "Увеличение количества пасмурных дней, нехватка солнца"
## V14_8
## "Раннее таяние и более позднее образование речного льда"
## V14_9
## "Участились ледовые зажоры, наледи на реках"
## V14_10
## "Усилились ветра, метели и снежные наносы"
## V14_88
## "Другое"
V14tab$n<-V14labs
V14tab
## n Pct
## V14_2 Резкие перепады температуры (от холода к теплу и наоборот) 47.8
## V14_1 Затяжные морозы, увеличение периодов аномального холода 46.9
## V14_10 Частые оттепели 41.7
## V14_5 Увеличение гололеда на дорогах 34.0
## V14_4 Обильные снегопады, увеличение снежного покрова 29.1
## V14_7 Сход снежных лавин 23.1
## V14_3 Увеличение количества пасмурных дней, нехватка солнца 11.2
## V14_8 Раннее таяние и более позднее образование речного льда 7.0
## V14_6 Участились ледовые зажоры, наледи на реках 6.4
## V14_9 Усилились ветра, метели и снежные наносы 4.6
## V14_88 Другое 2.5
V14Regiontab<-cross.multi.table(V14, df$Region, true.codes=list("да"), freq=TRUE)
V14Regiontab<-as_tibble(V14Regiontab)
V14Regiontab$n<-V14labs
V14Regiontab<-V14Regiontab %>%
relocate(n)
V14Regiontab
## # A tibble: 11 × 5
## n `Алтайский край` `Республика Алтай` `Республика Тыва` Монголия
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Резкие перепа… 63.5 43.3 31.8 0
## 2 Затяжные моро… 25.5 63 44.3 0
## 3 Частые оттепе… 17.9 9.4 5.7 0
## 4 Увеличение го… 23.4 29.6 36.5 0
## 5 Обильные снег… 22.6 39.7 37 0
## 6 Сход снежных … 2.2 9 6.2 0
## 7 Увеличение ко… 17.5 26.7 22.9 0
## 8 Раннее таяние… 7.7 8.1 3.6 0
## 9 Участились ле… 1.8 6.7 3.6 0
## 10 Усилились вет… 34.7 47.3 39.1 0
## 11 Другое 0 4.5 1.6 0
library(dplyr)
library(gtsummary)
library(ggplot2)
library(scales)
library(forcats)
##
## Присоединяю пакет: 'forcats'
## Следующий объект скрыт от 'package:sjlabelled':
##
## as_factor
library(stringr)
V14tab %>%
mutate(n = fct_reorder(n, Pct)) %>% # переставим местами уровни
ggplot(aes(x=n, y=Pct, fill=Pct)) + # создадим типовой график
geom_bar(stat="identity", width = 0.6)+ # добавим geom
geom_text(aes(label=number(Pct,accuracy=0.1, decimal.mark = ",")), hjust=-0.3, size=4)+ # поработаем с подписями данных
expand_limits(y=c(0,80))+# увеличим лимит оси
coord_flip()+ # перевернем график в горизонтальное положение
theme_void()+ # добавим минималистичную тему
theme(axis.text.y = element_text(size = 10, hjust=1))+ # установим шрифт для подписей
theme(legend.position="none")+ # уберем легенду
scale_fill_gradient(low = "red", high = "green")+ # установим цвета градиента для столбцов
scale_x_discrete(labels = function(x) str_wrap(x, width = 30))
Распределение ответов на вопрос в зависимости от региона
V14Regiontab<-cross.multi.table(V14, df$Region, true.codes=list("да"), freq=TRUE)
V14Regiontab<-as_tibble(V14Regiontab)
V14Regiontab$n<-V14labs
V14Regiontab<-V14Regiontab %>%
relocate(n)
V14Regiontab
## # A tibble: 11 × 5
## n `Алтайский край` `Республика Алтай` `Республика Тыва` Монголия
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Резкие перепа… 63.5 43.3 31.8 0
## 2 Затяжные моро… 25.5 63 44.3 0
## 3 Частые оттепе… 17.9 9.4 5.7 0
## 4 Увеличение го… 23.4 29.6 36.5 0
## 5 Обильные снег… 22.6 39.7 37 0
## 6 Сход снежных … 2.2 9 6.2 0
## 7 Увеличение ко… 17.5 26.7 22.9 0
## 8 Раннее таяние… 7.7 8.1 3.6 0
## 9 Участились ле… 1.8 6.7 3.6 0
## 10 Усилились вет… 34.7 47.3 39.1 0
## 11 Другое 0 4.5 1.6 0
Анализ по переменной V16.
V16<-df %>%
select(contains("V16")) %>%
select_if(is.factor)
V16tab<-V16 %>%
multi.table(true.codes=list("да"), freq=TRUE) %>%
as.data.frame() %>%
rename(Pct=`%multi`) %>%
arrange(desc(Pct))
V16tab
## n Pct
## V16_7 406 44.5
## V16_3 392 42.9
## V16_1 326 35.7
## V16_2 290 31.8
## V16_8 221 24.2
## V16_5 173 18.9
## V16_9 142 15.6
## V16_6 80 8.8
## V16_4 57 6.2
## V16_88 34 3.7
V16labs<-df %>%
select(contains("V16")) %>%
select_if(is.factor) %>%
get_label()
V16labs
## V16_1
## "Увеличение количества засушливых дней, без осадков"
## V16_2
## "Увеличение периодов аномальной жары"
## V16_3
## "Большое количество осадков, сильных дождей"
## V16_4
## "Увеличение количества камнепадов и оползней в горах"
## V16_5
## "Усилился паводок, разливы рек, затопление мест, которые раньше не затапливались"
## V16_6
## "Таяние вечной мерзлоты, выход грунтовых вод на поверхность"
## V16_7
## "Сильные ветры, штормы"
## V16_8
## "Рост количества насекомых, комаров, мошки"
## V16_9
## "Рост количества насекомых-вредителей, угрожающих сельскохозяйственным культурам, хвойным лесам"
## V16_88
## "Другое"
V16tab$n<-V16labs
V16tab
## n
## V16_7 Увеличение количества засушливых дней, без осадков
## V16_3 Увеличение периодов аномальной жары
## V16_1 Большое количество осадков, сильных дождей
## V16_2 Увеличение количества камнепадов и оползней в горах
## V16_8 Усилился паводок, разливы рек, затопление мест, которые раньше не затапливались
## V16_5 Таяние вечной мерзлоты, выход грунтовых вод на поверхность
## V16_9 Сильные ветры, штормы
## V16_6 Рост количества насекомых, комаров, мошки
## V16_4 Рост количества насекомых-вредителей, угрожающих сельскохозяйственным культурам, хвойным лесам
## V16_88 Другое
## Pct
## V16_7 44.5
## V16_3 42.9
## V16_1 35.7
## V16_2 31.8
## V16_8 24.2
## V16_5 18.9
## V16_9 15.6
## V16_6 8.8
## V16_4 6.2
## V16_88 3.7
V16Regiontab<-cross.multi.table(V16, df$Region, true.codes=list("да"), freq=TRUE)
V16Regiontab<-as_tibble(V16Regiontab)
V16Regiontab$n<-V16labs
V16Regiontab<-V16Regiontab %>%
relocate(n)
V16Regiontab
## # A tibble: 10 × 5
## n `Алтайский край` `Республика Алтай` `Республика Тыва` Монголия
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Увеличение ко… 23.7 45.3 30.7 0
## 2 Увеличение пе… 39.1 31.4 22.4 0
## 3 Большое колич… 60.2 34.1 39.1 0
## 4 Увеличение ко… 0.7 8.3 9.4 0
## 5 Усилился паво… 6.9 27.6 16.1 0
## 6 Таяние вечной… 2.6 14.8 3.6 0
## 7 Сильные ветры… 29.2 52.2 48.4 0
## 8 Рост количест… 26.6 26.5 15.6 0
## 9 Рост количест… 20.8 15.9 7.3 0
## 10 Другое 0.4 5.6 4.2 0
V16tab %>%
mutate(n = fct_reorder(n, Pct)) %>% # переставим местами уровни
ggplot(aes(x=n, y=Pct, fill=Pct)) + # создадим типовой график
geom_bar(stat="identity", width = 0.6)+ # добавим geom
geom_text(aes(label=number(Pct,accuracy=0.1, decimal.mark = ",")), hjust=-0.3, size=4)+ # поработаем с подписями данных
expand_limits(y=c(0,80))+# увеличим лимит оси
coord_flip()+ # перевернем график в горизонтальное положение
theme_void()+ # добавим минималистичную тему
theme(axis.text.y = element_text(size = 10, hjust=1))+ # установим шрифт для подписей
theme(legend.position="none")+ # уберем легенду
scale_fill_gradient(low = "red", high = "green")+ # установим цвета градиента для столбцов
scale_x_discrete(labels = function(x) str_wrap(x, width = 30))