### Author: Christian Westphal ### Datum: 2020-07-28 ### URL: https://www.westphal.de/stat/ # wird benoetigt, um die # SQL-Abfrage vornehmen zu # koennen library(sqldf) # zur Vereinfachung der # Ziffernextraktion und # Testdurchfuehrung library(BenfordTests) # Randverteilung 2. Ziffer # nach NBL prob.D2 <- c(0.120,0.114,0.109,0.104,0.100,0.097,0.093,0.090,0.088,0.085) # umsatze.csv ist eine csv mit # den beiden Spalten # 'Valutadatum' (Format: # YYYY-MM-DD) und 'Umsatz' t.umsatze <- read.table( "umsatze.csv", header = TRUE, sep = ",", dec = "." ) # SQL-Abfrage, um die # taeglichen Geldzufluesse zu # ermitteln t.te <- sqldf("SELECT Valutadatum as VD, SUM(Umsatz) AS TE FROM 't.umsatze' WHERE Umsatz > 0 GROUP BY Valutadatum") # Laenge der zu # initialisierenden Vektoren # ermitteln t.length <- length(t.te$TE) # Vektoren initialisieren t.D2 <- rep(0, t.length) # 2. Ziffer t.ones <- rep(0, t.length) # Einerstelle t.D2 <- ( # Ziffern 1 u. 2 extrahieren signifd( # Extraktion der 2. Ziffer t.te$TE, digits=2 ) # dann die Zehnerstelle subtrahieren - 10 * signifd( # Extraktion der 1. Ziffer t.te$TE, digits=1 ) ) # Extraktion der Einerstelle # erfolgt in Schleife for (i in 1:t.length){ t.ones[i] <- as.numeric( # rueckumwandeln in numerisch strsplit( # String aufteilen in Chars as.character( # in String umwandeln t.te$TE[i]%%10 # Rest nach Division durch 10 (also 1er und Nachkommastellen) ), '' )[[1]][1] # den ersten Listeneintrag (die Einerstelle) ) # Ende umwandeln } # Test der 1.Ziffer auf NBL p.D1 <- chisq.benftest( t.te$TE, digits = 1 ) print("Erstziffer vs. NBL:") print(p.D1) # Test der 1. u. 2. Ziffern # auf NBL p.D2 <- chisq.benftest( t.te$TE, digits = 2 ) print("Erst- und Zweitziffer vs. NBL:") print(p.D2) # Test der 2. Ziffer auf # NBL-Randverteilung p.D2.md <- chisq.test( table(t.D2), p=prob.D2 ) print("Zweitziffer vs. NBL-Randverteilung:") print(p.D2.md) # Test der Einerstellen auf # Gleichverteilung p.ones <- chisq.test( table(t.ones) ) print("Einerstelle vs. Gleichverteilung:") print(p.ones)