bedarfsanalyse/00-exploration.qmd

238 lines
7.0 KiB
Plaintext

---
title: "Local-IT Bedarfsanalyse"
format:
html:
code-fold: true
code-summary: "Show the code"
---
# Analyse
<details>
<summary>Datenbereinigung</summary>
```{r import data, message=FALSE}
# Datenbereinigung
library(tidyverse)
library(janitor)
survey_raw <- readr::read_rds(here::here("data", "processed", "survey_with_labels.rds"))
```
```{r wrangle data}
survey <- survey_raw %>%
mutate(
# G1Q06_SQ001 = ehrenamtlich engagiert fix missings
G1Q06_SQ001 = case_when(is.na(G1Q06_SQ001) & G1Q04 == "Keine" ~ "Ja",
TRUE ~ as.character(G1Q06_SQ001)
),
# G1Q06_SQ002 = hauptamtlich engagiert fix missings
G1Q06_SQ002 = case_when(is.na(G1Q06_SQ002) & G1Q04 == "Keine" ~ "Nicht gewählt",
TRUE ~ as.character(G1Q06_SQ002)
),
G1Q06_SQ001 = as_factor(G1Q06_SQ001),
G1Q06_SQ002 = as_factor(G1Q06_SQ002),
# generate one variable that combines the multiple choice information about the role of the respondent
role_respondent = case_when(
# decision: Teilnehmende die beide Rollen angegeben haben werden zu hauptamtlich gezählt (es sind nur 6 und eine binary Variable ist besser geeignet für Gruppenvergleiche)
G1Q06_SQ001 == "Ja" & G1Q06_SQ002 == "Ja" ~ "ehrenamtlich",
G1Q06_SQ001 == "Ja" ~ "ehrenamtlich",
G1Q06_SQ002 == "Ja" ~ "hauptamlich",
# decision: Teilnehmende die keine der Kategorien angegeben haben werden zu NA anstatt eine vierte Kategorie "keine" einzuführen, da das wahrcheinlich nicht von Interesse ist.
G1Q06_SQ001 == "Nicht gewählt" & G1Q06_SQ002 == "Nicht gewählt" ~ NA_character_,
is.na(G1Q06_SQ001) & is.na(G1Q06_SQ002) ~ NA_character_,
TRUE ~ "error")
)
```
## G1Q06_SQ001 filter
Wir sind daran interessiert zu wissen, ob die Teilnehmenden selbst ehrenamtlich, hauptamtlich oder in beiden Positionen arbeiten. Diese Information findet sich in der Frage `G1Q06`: "Welche Rolle(n) haben sie in der Organisation. Die Filterführung des Fragebogens hat allerdings dazu geführt, dass Personen die angegeben haben, dass in ihrer Organisation keine hauptamtlichen Mitarbeiten vorhanden, sind die `G1Q06` Frage nicht bekommen haben, da schon klar ist, dass sie dann ehrenamtlich sind. Dadurch haben sie momentan Missings auf den Variablen die zur `G1Q06` Frage gehören. Die logische Verbindung zwischen `G1Q04` und `G1Q06` wollen wir also im Nachhinein recoden.
```{r explore G1Q06_SQ001 filter, inlcude = FALSE}
survey_raw %>% tabyl(G1Q04, G1Q06_SQ001)
#TODO wurde der Filter auch für G1Q05 gesetzt? Sieht nicht so aus ()
survey_raw %>% tabyl(G1Q05, G1Q06_SQ002)
```
36 Personen haben angegeben, dass sich keine Hauptamtlichen in der Org. befinden -> die wollen wir recodieren
```{r}
survey %>% tabyl(G1Q06_SQ001, G1Q06_SQ002)
```
```{r}
testthat::expect_equal(survey %>% filter(role_respondent == "error") %>% nrow(), 0)
```
</details>
# Stichprobe
```{r}
# TODO: Analyse der Missings (wie weit sind Fragebögen ausgefuellt? schmeißen wir sie alle weg?)
```
## Rolle der befragten Personen
```{r}
survey %>% count(role_respondent)
```
## Anzahl Hauptamtlicher und Ehrenamtlicher
```{r}
# facet wrap plot: beide Fragen haben die gleiche Skala
tmp_long <- survey %>%
select(id, G1Q05, G1Q04) %>%
pivot_longer(-id, names_to = "var", values_to = "value")
tmp_long %>%
ggplot(aes(x = value)) +
geom_bar()+
facet_wrap(~var)+
labs(caption = "G1Q04 Anzahl Hauptamtlicher\nG1Q05 Anzahl Ehrenamtlicher",
title = "Anzahl Hauptamtlicher (G1Q04) \n und Anzahl Ehrenamtlicher (G1Q05)")+
coord_flip()
```
```{r}
create_dot_plot <- function(data, x_var, y_var) {
tmp <- data %>%
count({{ x_var }}, {{ y_var }}) %>%
drop_na({{ x_var }}, {{ y_var }})
x_var_pos <- which(attributes(survey)$names == enexpr(x_var))
x_var_lab <- attributes(survey)$variable.labels[x_var_pos] %>%
str_replace(pattern = "\\?.+$", replacement = "?")
y_var_pos <- which(attributes(survey)$names == enexpr(y_var))
y_var_lab <- attributes(survey)$variable.labels[y_var_pos] %>%
str_replace(pattern = "\\?.+$", replacement = "?")
# plot
ggplot(tmp) +
aes(x = {{ x_var }},
y = {{ y_var }},
size = n,
label = n) +
geom_point() +
labs(caption = glue::glue("{enexpr(x_var)}: {x_var_lab} \n {enexpr(y_var)}: {y_var_lab}")) +
scale_fill_viridis_c() +
theme_minimal()
}
create_dot_plot(survey, G1Q04, G1Q05)
```
# Hypothesen
1. Grundsätzlich
Gibt es signifikante Zusammenhänge zwischen
- G1Q04 Anzahl Hauptamtlicher
- G1Q05 Anzahl Ehrenamtlicher
- G5Q04 Bereich (Sport/ Bidung etc)
Und allen anderen Fragen.
```{r}
tmp <- survey_raw %>%
count(G1Q05, G1Q04) %>%
drop_na(G1Q05, G1Q04)
ggplot(tmp) +
aes(x = G1Q05, y = G1Q04, fill = n) +
geom_tile(size = 1.2) +
labs(y = "Anzahl Hauptamtlicher", x = "Anzahl Ehrenamtlicher") +
scale_fill_viridis_c()+
theme_minimal()
```
```{r}
ggplot(tmp) +
aes(x = G1Q05, y = G1Q04, size = n) +
geom_point() +
labs(y = "Anzahl Hauptamtlicher", x = "Anzahl Ehrenamtlicher") +
scale_fill_viridis_c()+
theme_minimal()
p <- survey_raw %>%
count(G4Q02, G1Q04) %>%
drop_na() %>%
ggplot() +
aes(x = G4Q02, y = G1Q04, size = n) +
geom_point() +
labs(y = "Anzahl Hauptamtlicher", x = "Nutzung") +
coord_flip()+
theme_light()
p
```
```{r}
survey_raw %>%
select(G4Q02, G1Q04) %>%
drop_na() %>%
janitor::tabyl(G4Q02, G1Q04) %>%
janitor::adorn_totals() %>%
janitor::adorn_percentages() %>%
janitor::adorn_pct_formatting()
```
Erklärungsansaetze für Ergebnisse:
- Sampling Bias in der Umfrage
-
## Anzahl ehrenamtliche
```{r}
survey_raw %>%
count(G4Q02) %>%
drop_na() %>%
ggplot(aes(x = G4Q02, y = n))+
geom_col()+
coord_flip()
survey_raw %>%
count(G4Q02, G1Q05) %>%
drop_na() %>%
ggplot() +
aes(x = G4Q02, y = G1Q05, size = n) +
geom_point() +
labs(y = "Anzahl Ehrenamtlicher", x = "Nutzung") +
coord_flip()+
theme_minimal()
survey_raw %>%
select(G4Q02, G1Q05) %>%
drop_na() %>%
janitor::tabyl(G4Q02, G1Q05) %>%
janitor::adorn_totals() %>%
janitor::adorn_percentages(denominator = "col") %>%
janitor::adorn_pct_formatting()
```
Chi-Square Test, um zu sehen, ob zw. den zwei kategorialen Variablen ein signifikanter Zusammenhang besteht:
```{r}
chisq.test(survey$G4Q02, survey$G1Q05)
```
Werden Cluster sichtbar?
2. Für welche Organisationen ist SKA interessant?
Hypothesen:
1. Große Organisationen mit vielen Hauptamtlichen und eigenen IT Abteilungen haben kein Interessen an Open Source Lösungen sondern entscheiden sich für bekannte, teure propritäre Tools
2. Organisationen mit eigenen IT Abteilungen haben Wissen und Kompetenz selbst Open Source Lösungen aufzusetzen (also Zugang) und nutzen sie somit häufiger.
G2Q02 Wer kümmert sich um eure digitale Infrastruktur
G1Q04 Wie viele hauptamtlich Mitarbeitende hat deine Organisation?
In Korrelation zu
Bisherige Erfahrung mit Open Source (G4Q02) oder der Wichtigkeit bestimmter Eigenschaften des Tools (G03Q03 und G03Q03b)