require(knitr)
require(pander)
require(magrittr)
library(tidyverse)
library(shiny)
library(rhandsontable)
library(magrittr)
library(leistungstests)
library(ggplot2)
library(knitr)
library(plotly)
library(boot)
opts_chunk$set(
  echo = FALSE,
  message = FALSE,
  error = FALSE,
  warning = FALSE
)
ostit <- params$ostit
bootstrap_data <- params$bootstrap_data
plot_scales_desgin_aid <- params$plot_scales_desgin_aid
plot_scales_messwerte <- params$plot_scales_messwerte
report_format_type <- params$report_format_type

Datenbasis

In Vorversuchen wurden folgende Messwerte des Leistungsmerkmales "r ostit$variable_name" ermittelt:

if (report_format_type == "word"){
  ostit$raw_data %>%
    filter(valid, !is.na(Messwert)) %>%
    select(Messwert, Kommentar) %>%
    mutate(Kommentar = ifelse(Kommentar == "NA", " ", Kommentar)) %>% 
    as.data.frame() %>% 
    pander::pander()
}
if (report_format_type == "pdf"){
  ostit$raw_data %>%
    filter(valid, !is.na(Messwert)) %>%
    select(Messwert, Kommentar) %>%
    mutate(Kommentar = ifelse(Kommentar == "NA", " ", Kommentar)) %>% 
    kable(
      caption="\\label{tab:messwerte} Messwerte aus Vorversuchen. \\newline Es sind keine Auffälligkeiten zu den Messwerten notiert.", align = 'c',
      col.names = c(paste(ostit$variable_name, "[", ostit$variable_unit, "]", sep = ""), "Kommentar")
    )
}

Diese Daten wurden am Produktionsprozess erhoben, wie er im wesentlichen zum eigentlichen Design-Verifikations-Test vorliegt. Aus den Messwerten schätzt man die Prozessparameter $(\mu , \sigma)$ durch den Stichproben-Mittelwert $\bar x$ und die Stichproben-Standardabweichung $s$ und erhält:

$\mu \approx \bar x =$ r round(ostit$sample_mean,2) r ostit$variable_unit
$\sigma \approx s =$ r round(ostit$sample_sd,2) r ostit$variable_unit

\newpage

Graphische Kontrolle der Messdaten

In der Graphik Ergebnisse aus Vorversuchen sind die Messwerte in der Reihenfolge aufgetragen in der sie erhoben wurden. Auffällige Werte, d.h. offensichtliche Extremwerte, Trends oder Muster, sind ein Hinweis, daß das Leistungsmerkmal nicht normalverteilt oder das die Messergebnisse nicht unabhängig sind. 'Abhängige' Messwerte treten z.B. auf falls die Ergebnisse zwischen Herstellungs-Chargen stärker variieren als innerhalb einer Charge. Oder falls im Meßsystem ein systematischer Fehler vorhanden ist.

ostit$valid_data %>%
  ggplot() +
  geom_point(aes(x = obsNr, y = Messwert), color = "blue", shape = 4, size = 4) +
  scale_x_continuous("Mess-Reihenfolge") +
  scale_y_continuous(limits = plot_scales_messwerte$mean) +
  geom_hline(yintercept = ostit$sample_mean, color = "black") +
  geom_text(x = 1, y = ostit$sample_mean, label = "Sample-Mean", vjust = 0, hjust = 0) +
  labs(
    title = "Ergebnisse aus Vorversuchen",
    y = paste(ostit$variable_name, " [", ostit$variable_unit, "]", sep = "")
  )

In der Graphik qq-Plot der Messwerte sind die Messdaten zusätzlich in einem qq-Plot dargestellt, als weitere graphische Hilfe die Daten auf Auffälligkeiten zu untersuchen. Gibt es keine auffälligen Abweichungen von der eingezeichneten Linie so ist dies ein Hinweis das die Daten normalverteilt sind. Die Normalverteilung und Unabhängigkeit der Meßergebnisse ist eine zentrale Voraussetzung für die gegebene Empfehlung zur Stichprobengröße.

ostit$valid_data %>% 
  ggplot(aes(sample = Messwert)) + 
  stat_qq(dparams = c(ostit$sample_mean, ostit$sample_sd)) +
  geom_abline(slope = 1, intercept = 0) +
  coord_fixed(ratio = 1) +
  labs(
    title = "qq-Plot der Messwerte",
    x = paste("Quantile der Normalverteilung (",round(ostit$sample_mean,2), " / ", round(ostit$sample_sd,2),")"),
    y = "Quantile der Stichprobe"
  )

\newpage

Empfehlung Stichprobengröße

Basierend auf der im vorhergehenden Kapitel begründeten Annahme, daß der Prozess das Leistungsmerkmal "r ostit$variable_name" normalverteilt mit Parametern $\mu = \bar x =$ r round(ostit$sample_mean,2) r ostit$variable_unit und $\sigma = s =$ r round(ostit$sample_sd,2) r ostit$variable_unit produziert, kann man in Abhängigkeit von der Stichprobengröße berechnen mit welcher Wahrscheinlichkeit der Design-Verifikations-Test für dieses Leistungsmerkmal bestanden wird.

Wobei für dieses Leistungsmerkmal folgende Anforderungen in der Risiko-Analyse festgelegt wurden:

Das Leistungsmerkmal "r ostit$variable_name" muß mit einer Wahrscheinlichkeit von mindestens r ostit$p_min*100% r paste(ifelse(ostit$spec_type == "lsl", 'größer als', '$kleiner als$'), ostit$spec, ostit$variable_unit) sein. Die Power des Test muß mindestens r ostit$power * 100 % betragen.

In der folgenden Tabelle sind diese Wahrscheinlichkeiten für unterschiedliche Stichprobengrößen angegeben. Gelistet sind Stichprobengrößen beginnend bei $n=3$ bis zu einer Stichprobengröße die 100% Erfolgswahrscheinlichkeit verspricht.

sample_size <- numeric()
p_success <- numeric() 
for (n in 3:50){
  sample_size[n] <- n
  p_success[n]<- round((1 - p_reject_ostit(process_mean = ostit$sample_mean,
                                   process_sd = ostit$sample_sd,
                                   sample_size = n,
                                   spec_limit = ostit$spec,
                                   spec_type = ostit$spec_type,
                                   p_min = ostit$p_min,
                                   power = ostit$power)
                )*100)

  if ( !(p_success[n] < 100) ){
    break
  }
}

if (report_format_type == "word"){
  data.frame(n = sample_size, Erfolgswahrscheinlichkeit = paste(p_success,"%")) %>% 
    filter(!is.na(sample_size)) %>% 
    pander::pander()
}

if (report_format_type == "pdf"){
  data.frame(n = sample_size, p = paste(p_success,"%")) %>% 
    filter(!is.na(sample_size)) %>% 
    knitr::kable(align = 'c', 
                 col.names = c("Stichprobengröße", "'Erfolgs'-Wahrscheinlichkeit"),
                 caption = "\\label{tab:p_pass_versus_n} 'Erfolgs-Wahrscheinlichkeit in Abhängigkeit der Stichprobengröße")
}


rm(sample_size, p_success)

Mit Hilfe der Tabelle kann man nun die Stichprobengröße ermitteln, mit der der Leistungstest für dieses Merkmal durchgeführt werden sollte um diesen mit der gewünschten Wahrscheinlichkeit zu bestehen.

    design_aid_data <-
      expand.grid(
        process_mean = seq(plot_scales_desgin_aid$mean[1], plot_scales_desgin_aid$mean[2],
                           by = (plot_scales_desgin_aid$mean[2] - plot_scales_desgin_aid$mean[1])/100),
        process_sd = seq(plot_scales_desgin_aid$sd[1], plot_scales_desgin_aid$sd[2],
                         by = (plot_scales_desgin_aid$sd[2] - plot_scales_desgin_aid$sd[1])/100)
      ) %>%
      mutate(
        p_pass = (
          1 - p_reject_ostit(process_mean = process_mean,
                             process_sd = process_sd,
                             spec_limit = ostit$spec,
                             spec_type = ostit$spec_type,
                             p_min = ostit$p_min,
                             sample_size = ostit$sample_size,
                             power = ostit$power)
        )*100
      )

    ggplot_object <-
      design_aid_data %>%
      ggplot(aes(x = process_sd, y = process_mean)) +
      xlab("Geschätzte Produktionsprozess-Standardabweichung bzw. Variabiltät") +
      ylab("Geschätzter Produktions-Mittelwert") +
      geom_contour(aes(z = p_pass, colour = ..level..), binwidth = 1) +
      scale_color_gradient(paste("Wahrscheinlichkeit den Test bei\ngegebenem Prozes zu bestehen (n=",ostit$sample_size,")"),
                           high = "green", low = "red",
                           breaks = c(0, 25, 50, 75, 100),
                           labels = paste(c(0, 25, 50, 75, 100), "%", sep = ""),
                           limits = c(0,100)) +
      guides(color = guide_legend(title.position = "left", label.position = "bottom", direction = "horizontal", order = 1)) +
      scale_x_continuous(limits = c(plot_scales_desgin_aid$sd[1], plot_scales_desgin_aid$sd[2])) +
      scale_y_continuous(limits = c(plot_scales_desgin_aid$mean[1], plot_scales_desgin_aid$mean[2]))

    ggplot_object <- ggplot_object +
      geom_point(data = bootstrap_data, aes(x = boot_sd, y = boot_mean, shape = test_result),
                 position = "identity", #ifelse(input$bootstrap_type == "ordinary", "jitter", "identity"),
                 color = "blue", alpha = 0.5) +
      scale_alpha(guide = 'none') +
      guides(shape = guide_legend(title = "Test-Result", title.position = "top", label.position = "bottom", direction = "horizontal")) 


    if (ostit$spec_type == "lsl"){
      ggplot_object <- ggplot_object +
        geom_line(aes(x = process_sd, y = ostit$spec + qnorm(ostit$p_min) * process_sd))
    }

    if (ostit$spec_type == "usl"){
      ggplot_object <- ggplot_object +
        geom_line(aes(x = process_sd, y = ostit$spec - qnorm(ostit$p_min) * process_sd))
    }

    ggplot_object +
      geom_point(x = ostit$sample_sd, y = ostit$sample_mean, size = 10, color = "black", shape = 4) +
      theme(legend.position = c(0,1), legend.justification = c(0,1))

Erfolgswahrscheinlichkeit - Interpretation und Kommentar

Wählt man die Stichprobengröße die zu einer geschätzten Erfolgswahrscheinlichkeit von bspw. 95% führt, so kann man dies folgendermaßen interpretieren:

Macht man insgesamt 50 einzelne Tests, da man 50 Leistungsmerkmale definiert hat, wobei für jeden Test die Stichprobengröße so gewählt wurde das die gschätzte Erfolgswahrscheinlichkeit 95% beträgt so erwartet man: Bei ca. 2-3 Tests beurteilt man den Test dann fälschlicherweise als nicht den Anforderungen entsprechend.

Wählt man die Stichproben für die Tests so das die geschätzte Erfolgswahrscheinlichkeit für alle Tests 98% beträgt, so erwartet man: Ca. ein Test beurteilt den Produktionsprozess dann fälschlicherweise als nicht den Anforderungen entsprechend.

Wählt man für alle Tests Stichprobengrößen die einer geschätzten Erfolgswahrscheinlichkeit von 99% entsprechen, so erwartet man alle Tests korrekterweise zu bestehen.

Im Regelfall wird man die Erfolgswahrscheinlichkeit nicht für alle Leistungstests gleich wählen, da dies im Einzelfall sonst zu unvertretbar großen Stichproben führen würde. Generell muß man also bei der Wahl der Stichprobengröße für ein Leistungsmerkmal immer auch alle anderen im Blick haben und gegebenefalls Kompromisse finden. Letztendlich wird durch die Festlegung der Stichprobengröße für ein einzelnes Leistungsmerkmal indirekt die Gesamtanzahl der benötigten Enprodukte für den Leistungstest festgelegt.

Kommentar zu den Vorversuchsergebnissen

r ostit$vorversuchsergebnisse



stephanGit/leistungstests documentation built on June 13, 2018, 8:24 p.m.