####################################### # Lineares Regressionsmodell # # Ad-Oculos-Projekt # Beispieldatensatz "mtcars.csv" aus der R-Umgebung # # Julia-Version: 1.5.3 # Skript-Version: 1.1 # Datum: 13.02.2021 ####################################### ## Laden der benötigten Pakete: using CSV, DataFrames using Statistics, StatsBase using Plots, StatsPlots using Distributions, HypothesisTests using GLM ## Beispieldaten einlesen: # Die Daten befinden sich in gleichem Verzeichnis wie das Skript dateiname = "mtcars.csv" Daten = CSV.read(dateiname, header = 1, delim = ';', decimal = ',', normalizenames = true , DataFrame) show(Daten, allcols = true) println("\n") ## Modell: # Es wird ein Zusammenhang zwischen mpg (Miles per US gallon) und # dem Fahrzeuggewicht wt (Weight in 1000 lbs) vermutet # Grafische Daten-Übersicht zur Unterstützung der Vermutung: # Streudiagramm erzeugen: scatter(Daten[!,:wt], Daten[!,:mpg], title = "Zusammenhang zwischen mpg und wt", xlabel = "Fahrzeuggewicht wt (* 1000 lbs)", ylabel = "Verbrauch mpg", leg = false, fontfamily = :Arial) # Modellschätzung über lm: Modell = lm(@formula(mpg ~ wt), Daten) show(Modell) ## Güte der Modellschätzung: # Bestimmtheitsmaß (Korrelationskoeffizient^2): println("\n", "Angaben zur Modellgüte:", "\n") r_quadrat = round(r2(Modell), digits = 4) println("\n", "Bestimmtheitsmaß r2 = $r_quadrat", "\n") ## Vorhersage auf Basis des Modells durchführen: # Daten zur Vorhersage bereitstellen: Vorhersage_Daten = DataFrame(wt = Daten[!,:wt]) # Vorhersage inkl. 95%igen Vertrauensbereich (VB) durchführen: VB = 0.95 Modell_Vorhersage = round.(predict(Modell, Vorhersage_Daten, interval = :confidence, level = VB), digits = 1) ## Modelldatenübersicht erzeugen: Modell_Uebersicht = Daten[:, [:wt, :mpg]] Modell_Uebersicht[!, :mpg_Vorhersage] = Modell_Vorhersage[!, :prediction] Modell_Uebersicht[!, :VB_unten] = Modell_Vorhersage[!, :lower] Modell_Uebersicht[!, :VB_oben] = Modell_Vorhersage[!, :upper] show(Modell_Uebersicht) # Modell-Übersicht als csv-Datei spiehern: dateiname = "Modell_Uebersicht.csv" CSV.write(dateiname, Modell_Uebersicht) println("\n", "\n", "Modellübersicht unter $dateiname gesichert!" ) ## Vorhersage grafisch Darstellen: Modell_Uebersicht_sortiert = sort(Modell_Uebersicht, :wt) # Alternative 1 bezüglich Vertrauensbereichdarstellung: # Darstellung der beobachteten Daten: scatter(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!,:mpg], title = "Zusammenhang zwischen wt und mpg", xlabel = "Fahrzeuggewicht wt (* 1000 lbs)", ylabel = "Verbrauch mpg", leg = true, label = "Beobachtet", fontfamily = :Arial) # Darstellung der vorhergesagten Daten: plot!(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!,:mpg_Vorhersage], label = "Vorhersage") # Darstellung des Vertauensbereiches: plot!(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!, :VB_unten], label = "unterer Vertrauensbereich", line = :dash) plot!(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!, :VB_oben], label = "oberer Vertrauensbereich", line = :dash) # ----------------------------------------------------------------------------------------- # Alternative 2 bezüglich Vertrauensbereichdarstellung: # Darstellung der beobachteten Daten: scatter(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!,:mpg], title = "Zusammenhang zwischen wt und mpg", xlabel = "Fahrzeuggewicht wt (* 1000 lbs)", ylabel = "Verbrauch mpg", leg = true, label = "Beobachtet", fontfamily = :Arial) # Darstellung der vorhergesagten Daten und des Vertrauensbereich als Ribbon: plot!(Modell_Uebersicht_sortiert[!,:wt], Modell_Uebersicht_sortiert[!,:mpg_Vorhersage], label = "Vorhersage", ribbon = (Modell_Uebersicht_sortiert[!,:mpg_Vorhersage] .- Modell_Uebersicht_sortiert[!, :VB_unten], Modell_Uebersicht_sortiert[!,:VB_oben] .- Modell_Uebersicht_sortiert[!, :mpg_Vorhersage]) )