Kapitel 41 Dokumentieren von fehlenden Daten

Unkorrigierte, unfertige Version 24 December, 2022

Sie lernen in diesem Kapitel folgendes:

  • Visualisierung fehlender Daten
  • Tabelle mit Anzahl fehlenden Daten

To Do:

41.0.1 Wir benutzen folgende Pakete in diesem Kapitel:

knitr::opts_chunk$set(echo = TRUE)
r <- getOption("repos")
r["CRAN"] <- "https://stat.ethz.ch/CRAN/"
options(repos = r)
list.of.packages <- c("patchwork","bookdown","rmarkdown" ,"knitr","rio", "psych","janitor", 
                      "tidyverse","jtools","summarytools", "qgraph",  "gtsummary" , "viridis", "wesanderson", "missMethods", "ggpubr", "ggrepel", "naniar", "finalfit", "missMethods", "rpart", "rpart.plot")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

library(summarytools)
library(psych)
library(janitor)
library(sjlabelled)
library(tidyverse)
library(gtsummary)
library(viridis)
library(wesanderson)
library(missMethods)
library(ggpubr)
library(ggrepel)
library(naniar)
library(visdat)
library(finalfit)
library(rpart)
library(rpart.plot)
library(mice)
library(knitr)
library(patchwork)

41.1 Daten simulieren.

pain_1 <-c(2,3,2,4,5,3,2,NA,2,2)
pain_2 <-c(8,6,1,3,2,3,2,NA,2,1)
pain_3 <-c(3,2,1,3,1,1,1,2,2,1)
pain_4 <-c(4,2,NA,5,2,1,2,2,2,1)

function_1 <-c(1,2,1,4,5,3,NA,3,3,2)
function_2 <-c(6,4,2,3,2,3,2,NA,1,1)
function_3 <-c(2,3,3,3,1,1,2,3,4,1)
function_4 <-c(NA,2,NA,5,2,1,3,4,2,2)

gender<-sample(c("Man", "Woman"), rep=TRUE, size=10, prob=c(0.51, 0.49))
id<-1:length(pain_1)

data<-data.frame(id, pain_1, pain_2, pain_3, pain_4, pain_1, pain_2, pain_3, pain_4, gender)

41.2 Fehlende Werte visualisieren

41.2.1 Mit Angaben zum Datentyp

visdat::vis_dat(data)
## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `gather()` instead.
## ℹ The deprecated feature was likely used in the visdat package.
##   Please report the issue at <]8;;https://github.com/ropensci/visdat/issueshttps://github.com/ropensci/visdat/issues]8;;>.

41.2.2 Mit Prozentangabe

naniar::vis_miss(data)

41.2.3 Über eine andere Variable

Über die ID-Variable.

naniar::gg_miss_fct(data, id)

Über das Geschlecht.

naniar::gg_miss_fct(data,gender )

41.2.4 Fehlende Werte über zwei Variablen

ggplot(data, aes(y=pain_1, x=function_1))+
  geom_point()+
  geom_miss_point(size=2)
## Warning: Removed 2 rows containing missing values (`geom_point()`).
Wir sehen, dass bei einem Wert von 3 in der Funktion, ein fehlender Wert beim Schmerz ist, und beim Wert 2 beim Schmerz, ein fehlender Wert bei der Funktion ist.

Abbildung 16.1: Wir sehen, dass bei einem Wert von 3 in der Funktion, ein fehlender Wert beim Schmerz ist, und beim Wert 2 beim Schmerz, ein fehlender Wert bei der Funktion ist.

41.2.5 Baum mit fehlenden Werten pro Variable

Dieser Befehl funktioniert mit unserem kleinen Datensatz nicht.

library(rpart)
library(rpart.plot)
names(data)
##  [1] "id"       "pain_1"   "pain_2"   "pain_3"   "pain_4"   "pain_1.1"
##  [7] "pain_2.1" "pain_3.1" "pain_4.1" "gender"
data %>%
  add_prop_miss() %>%
  rpart(prop_miss_all ~ ., data = ., model=TRUE) %>%
  prp(type =4, extra = 101, prefix = "Prop. Miss = ")

Deswegen werden wir einen grösseren Datensatz erstellen.

Das Beispiel ist nicht so optimal, illustriert aber gleichwohl die Funktion. Ein besseres Beispiel finden Sie hier.

data2<-data.frame(id, pain_1, pain_2, pain_3, pain_4, pain_1, pain_2, pain_3, pain_4, gender)
data2<-bind_rows(data, data2)
data2<-bind_rows(data, data2)
data2<-bind_rows(data, data2)

data2 %>%
  select(-id) %>% 
  add_prop_miss() %>%
  rpart(prop_miss_all ~ ., data = ., model=TRUE) %>%
  prp(type =4, extra = 101, prefix = "Prop. Miss = ")

41.3 Variable mit Anzahl fehlender Werte

data<-data %>% 
  mutate(missing_pain=rowSums(across(contains("pain"), is.na))) %>% 
  mutate(missing_function=rowSums(across(contains("function"), is.na))) %>% 
  dplyr::select(id, contains("missing"), everything())

Die neuen Variablen zeigen die Anzahl fehlender Werte auf.

DT::datatable(data, filter='top')

Sie finden hier weitere Tipps.