Statistikprogramm2012-09-14T16:03:00+01:00

QM-Forum Foren Qualitätsmanagement Statistikprogramm

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 17)
  • Autor
    Beiträge
  • Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo zusammen,

    ein guter Bekannnter von mir hat mich nach einem kostengünstigen Statistikprogramm gefragt, nachdem ich ihm die Nachteile seiner Excel-Tolls erklärt hatte.

    Es geht hauptsächlich um Normalverteilung und Regelkarten.

    Ich selbst habe mir in R ein paar Routinen geschrieben, aber die Anwendung von R ist denke ich zu aufwändig für ihn.

    Jetzt hat er mich zu „O_penStat“ (bitte den Unterstrich wegdenken) gefragt, was ich aber nicht kenne. Kennt das von euch jemand? Das wäre kostenlos. Die Lizenzgebühren sollten nicht zu hoch sein, er hat eine sehr kleine Firma und braucht das Programm nur sehr selten.

    Gruß
    Stefan

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    O*penStat kannte ich bislang noch nicht und hab mir die Seiten dazu mal angeschaut.

    Das ist schon ein bisschen angestaubt vom Layout, nicht nur die Software-Seiten (http://www.statprograms4u.com/O*penStatMain.htm [der * muss weg, die Forumssoftware hat ein Problem mit dem Wort O P E N]) sondern vor allem auch die Grafiken. Erinnert mich ein bisschen an die Anfänge es Internets, als es nur 16 Farben gab und alles entweder schwarz-weiß oder knallbunt war. Naja, das ist Geschmackssache.

    Die Möglichkeiten für die Regelkarten sind auch relativ begrenzt (s. http://www.statprograms4u.com/O*penStatReferenceDoc.pdf, pp.316) und leider wird in der Dokumentation nicht angegeben, welche Formeln z. B. für die Standardabweichungskarte verwendet werden (zusammengefasste/gepoolte Standardabweichung, durchschnittliche Standardabweichung, etc.) Einstellen lässt sich da zumindest mal nix.

    Spätestens wenn ein Kunde von Deinem Bekannten fragt, mit welcher Formel bzw. nach welcher Methode das gerechnet wurde, wirds schwierig. Ein gutes Statistik-Programm liefert auch die Beschreibung der Berechnungswege mit und die Referenzen dafür.

    Auch beim Test auf Normalverteilung ist O*penStat ziemlich begrenzt, weil es nur den Shapiro-Wilks- und den Lilliefors-Test anbietet. Shapiro-Wilks ist okay, Lilliefors ist genauso wie der Kolmogorov-Smirnoff schlecht. Ein deutlich zuverlässigerer Test ist der Anderson-Darling-Test, nur bietet O*penStat den nicht an.

    Ob O*penStat tatsächlich besser als Excel ist, würd ich nach den Aussagen auf softonic.com (http://o*penstat.en.softonic.com/) in Frage stellen:

    „…, although the developer itself admits that it’s not the „finished product“ yet. This means that any results you gain from it, can’t be guaranteed and should be double checked either by hand or using other software.“

    „However, the developer could have put more effort into making both the interface and graphs look better. In addition, according to the forum it does have problems handling certain formulas but this is probably because it’s not the finished article yet.“

    Ich würd deshalb eher versuchen, R in einer für Deinen Bekannten handhabbaren Form an Excel oder eine andere Anwendung anzubinden. Da gibt es diverse Möglichkeiten und eine kleine Auswahl findest Du bei faes.de bzw. auf der r-statistik.de-Seite von Günter Faes: Tipps & Tricks. (Günter Faes ist auch käuflich, falls Du/Dein Bekannter etwas Bestimmtes haben wollt.)

    Vielleicht reicht es ja auch, wenn Du Deinem Bekannten r-studio ans Herz legst. Das ist O*penSource und macht die R-Bedienung deutlich leichter.

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo Barbara,

    danke für deine Einschätzung zu O_penStat. Nachdem ich darüber im Internet keinerlei Informationen gefunden hatte, war das auch mir nicht mehr ganz geheuer.

    Für die Regelkarte könnte ich ihm ja mit Excel was basteln (da gib’s wohl nichts in R) und ihm für die Auswertung was für R.

    Hier mal mein Normalverteilung-Code für R, falls jemand sowas braucht. Der obere Bereich ist ein Beispiel, wie die Daten eingegeben werden, mit normvert_sd(daten) wird das ganze dann ausgewertet.
    Habe noch nicht herausgefunden, wie ich Daten aus Excel direkt lesen kann, da muss ich noch eine Funktion suchen.

    daten <- c(7.75, 7.73, 7.69, 7.7, 7.63, 7.66, 7.68, 7.64, 7.62, 7.68, 7.69, 7.63, 7.65, 7.57, 7.68, 7.61, 7.73, 7.67, 7.76, 7.72, 7.64, 7.59, 7.71, 7.58, 7.66, 7.61, 7.61, 7.67, 7.76, 7.65)
    OGW_daten <-c(7.79)
    UGW_daten <-c(7.39)

    normvert_sd<-function(x){
    daten <- NULL
    Datenbezeichnung <- ""
    Temp <- names(x)
    if (is.null(Temp))
    {daten <- x}
    else
    {daten <- x[[1]]
    Datenbezeichnung <- Temp[1]}
    Sortiert<-sort(daten)
    Anzahl_Werte<- length(daten)
    min<-min(daten)
    max<-max(daten)
    range<-max(daten)-min(daten)
    sd<-sd(daten)
    mean<-mean(daten)
    median<-median(daten)
    shapiro<-shapiro.test(daten)
    ks_test<-ks.test(daten, "pnorm", mean(daten), sd(daten))
    Cp<-(OGW_daten-UGW_daten)/(6*sd(daten))
    Cpo<-(OGW_daten-mean(daten))/(3*sd(daten))
    Cpu<-(mean(daten)-UGW_daten)/(3*sd(daten))
    Ogw133<-(mean+(1.33*3*sd))
    Ugw133<-(mean-(1.33*3*sd))
    split.screen(c(1,2))
    screen(1)
    hist(daten, col=” azure”, main=”Histogramm”, probability=”TRUE”)
    rug(daten)
    lines(density(daten, kernel = „gaussian“))
    curve(dnorm(x,mean=mean(daten),sd=sd(daten)), mean(daten)-3*sd(daten), mean(daten)+3*sd(daten), add = TRUE, col = "red")
    screen(2)
    qqnorm(daten, main="Wahrscheinlichkeitsnetz")
    qqline(daten, col="blue", lwd=1)
    close.screen(all=TRUE)
    cat("n")
    cat(" Werte sortiert: „,Sortiert, "n")
    cat(" Anzahl Werte: „,Anzahl_Werte, "n")
    cat(" Größtwert: „,max, "n")
    cat(” Kleinstwert: ”,min, ”n”)
    cat(” Streuung: ”,range, ”n”)
    cat(” Standardabweichung: ”,sd, ”n”)
    cat(" Mittelwert: „,mean, "n")
    cat(" Medianwert: „,median, "n")
    cat("n")
    cat(" Kolmogoroff-Smirnov: ", "n")
    cat(" Prüfgröße: ", ks_test$statistic, "n")
    cat("Wahrscheinlichkeit p-Wert): ", ks_test$p.value,"(",round(ks_test $p.value*100, digits = 1) ,"%-iges Zutreffen der Normalverteilung)", "n")
    cat("n")
    cat(" OGW: „,OGW_daten, "n")
    cat(" UGW: „,UGW_daten, "n")
    cat(" Cp: „,Cp, "n")
    cat(" Cpo: „,Cpo, "n")
    cat(" Cpu: „,Cpu, "n")
    cat(" OGW für Cp 1,33: „,Ogw133, "n")
    cat(" UGW für Cp 1,33: „,Ugw133, "n")
    cat("n")
    }

    Genau bei dieser Datenreihe hat übrigens sein Excel-Histogramm keine Normalverteilung dargestellt, obwohl es laut der Auswertung mit R eine ist.

    Danke übrigens für deine Ausführungen auf deiner Seit zum Thema „Test auf Normalverteilung“.

    Was habe ich bei den Formatierungen (<i>, <code>) falsch gemacht?

    Viele Grüße

    Stefan

    geändert von – Stefan741 on 15/09/2012 15:53:53

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    klar gibts für Regelkarten auch etwas in R. Das schöne an R ist doch, dass es ziemlich einfach ist Zusatz-Packages zu basteln. Aktuell gibt es 4035 Stück und da sind auch einige zum Thema Regelkarten dabei, z. B.
    qcc
    IQCC
    edcc
    MSQC
    MCUSUM

    Installiert werden die Pakete (einmalig) direkt in R:
    Pakete > Installiere Pakete
    Wenn Du Funktionen aus einem Zusatzpaket nutzen willst, lädst Du erst das Paket
    library(qcc)
    für das Paket qcc z. B. und kannst dann alle Funktionen aus diesem Paket nutzen, bis R geschlossen wird. Beim Neu-Aufruf von R muss das Paket dann wieder geladen werden; die Installation erfolgt nur 1 Mal.

    Weitere Pakete findest Du auf der Seite http://cran.r-project.org/ unter dem Menüpunkt „Packages“ oder über die Suche („Search“) auf der Seite.

    Wenn Du Excel und R miteinander kommunizieren lassen möchtest, gibts es dafür auch diverse Pakete:
    RExcelInstaller
    xlsx
    excel.link
    xlsReadWrite
    XLConnect

    Eine gute Sammlung verschiedenster Tests auf Normalverteilung findest Du im Paket nortest. Der KS-Test ist unzuverlässig und sollte deshalb nicht mehr für Tests auf Normalverteilung verwendet werden. Besser ist der AD-Test (Anderson-Darling-Test).

    Was ich ganz schwierig finde ist der Hinweis „x%-iges Zutreffen der Normalverteilung“. Deutlich besser wäre hier die Testentscheidung, also wenn p kleiner als alpha (i. A. 5%) ist zu schreiben „Messdaten sind nicht normalverteilt.“ oder wenn p größer als 5% ist „Messdaten sind normalverteilt.“

    Ansonsten sieht der R-Code schon ganz nett aus. Was Dir allerdings deutlich das Leben erleichtern würde ist die Verwendung eines vernünftigen Text-Editors (z. B. Notepad++).

    Ein Text-Editor setzt nämlich keine Anführungszeichen unten (wie bei „,Sortiert,) und auch keine schrägen Anführungszeichen. Die unteren versteht R überhaupt nicht und verschluckt sich dann.

    Bei dem Histogramm war ein Leerzeichen vor dem col=“ azure“ zu viel und ein TRUE wird nie in Anführungszeichen gesetzt (probability=TRUE).

    Was Du auf jeden Fall vermeiden solltest ist die Verwendung von R-Funktionsnamen als Datenbezeichnungen (z. B. min=min(daten)), das kann auch schon mal zu Quatsch-mit-Soße führen.

    Notepad++ find ich persönlich gut, weil da R schon als Code-Sprache vorkommt und wenn Du eine Datei unter Name.r abspeicherst (z. B. Stefan_normvert.r), dann kriegst Du automatisch die Syntax farbig markiert.

    Deinen Code hab ich mal ein bisschen aufgeräumt und die Anführungszeichen korrigiert. Ich würd es übrigens anders herum machen: erst die Funktion definieren (normvert_sd) und dann die Funktion auf die Daten anwenden.

    Eine definierte Funktion ist solange in R verfügbar bis R geschlossen wird (genauso wie ein Zusatzpaket), d. h. Du könntest auch noch andere Messreihen damit auswerten.

    # Funktion normvert_sd definieren
    # Funktion braucht 3 Werte: daten, untere und obere Toleranzgrenze

    normvert_sd=function(werte,UTG,OTG){
    wert1 = NULL
    Datenbezeichnung = „“
    Temp = names(werte)
    if (is.null(Temp)) {wert1 = werte}
    else {wert1 = werte[[1]]; Datenbezeichnung = Temp[1]}

    split.screen(c(1,2))
    screen(1)
    hist(werte, col=“azure“, main=“Histogramm“, probability=TRUE)
    rug(werte)
    lines(density(werte, kernel = „gaussian“))
    curve(dnorm(x,mean=mean(werte),sd=sd(werte)), mean(werte)-3*sd(werte), mean(werte)+3*sd(werte), add = TRUE, col = „red“)
    screen(2)
    qqnorm(werte, main=“Wahrscheinlichkeitsnetz“)
    qqline(werte, col=“blue“, lwd=1)
    close.screen(all=TRUE)

    library(nortest)
    testerg=c()
    if(ad.test(daten)$p.value<0.05) {testerg=“Messdaten sind nicht normalverteilt.“}
    else {testerg=“Messdaten sind normalverteilt.“}

    out1=list(c(
    cat(„n“),
    cat(„Messdaten: „,Datenbezeichnung,“n“),
    cat(„n“),
    cat(“ Werte sortiert: „,sort(werte), „n“),
    cat(“ Anzahl Werte: „,length(werte), „n“),
    cat(“ Größtwert: „,max(werte), „n“),
    cat(“ Kleinstwert: „,min(werte), „n“),
    cat(“ Streuung: „,max(werte)-min(werte), „n“),
    cat(“ Standardabweichung: „,sd(werte), „n“),
    cat(“ Mittelwert: „,mean(werte), „n“),
    cat(“ Medianwert: „,median(werte), „n“),
    cat(„n“),
    cat(“ Anderson-Darling-Test: „, „n“),
    cat(“ Prüfgröße: „, ad.test(werte)$statistic, „n“),
    cat(“ Wahrscheinlichkeit p-Wert): „, ad.test(werte)$p.value,“(„,testerg,“)“, „n“),
    cat(„n“),
    cat(“ OTG: „,OTG, „n“),
    cat(“ UTG: „,UTG, „n“),
    cat(“ Cp: „,(OTG-UTG)/(6*sd(werte)), „n“),
    cat(“ Cpo: „,(OTG-mean(werte))/(3*sd(werte)), „n“),
    cat(“ Cpu: „,(mean(werte)-UTG)/(3*sd(werte)), „n“),
    cat(“ Cpk: „,min((OTG-mean(werte))/(3*sd(werte)),(mean(werte)-UTG)/(3*sd(werte))), „n“),
    cat(“ OTG für Cp 1,33: „,mean(werte)+1.33*3*sd(werte), „n“),
    cat(“ UTG für Cp 1,33: „,mean(werte)-1.33*3*sd(werte), „n“),
    cat(„n“)
    ))
    }

    # Daten eingeben und Funktion normvert_sd darauf anwenden
    daten = c(7.75, 7.73, 7.69, 7.7, 7.63, 7.66, 7.68, 7.64, 7.62, 7.68, 7.69, 7.63, 7.65, 7.57, 7.68, 7.61, 7.73, 7.67, 7.76, 7.72, 7.64, 7.59, 7.71, 7.58, 7.66, 7.61, 7.61, 7.67, 7.76, 7.65)
    UTG =c(7.39)
    OTG =c(7.79)

    normvert_sd(daten,UTG,OTG)

    Wenn Du die Daten nicht zu Fuß eingeben willst, gibt es noch die etwas elegantere Möglichkeit, die aus der Zwischenablage in R einzufügen:

    A=read.delim2(„clipboard“)

    (Wenn die Werte eine Spaltenüberschrift haben, ansonsten mit Zusatzoption header=FALSE)

    normvert_sd(A[,1], UTG,OTG)

    Und um mal kurz eine Einzelwert-Karte mit dem Paket qcc zu erstellen, nimmst Du

    library(qcc)
    plot(qcc(daten, type=“xbar.one“), xlab=“Nr.“, ylab=“Messwerte“, title=“Einzelwertkarte“)

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo Barbara,

    danke für deine Meinung zu O_penStat und die weiteren Info’s. Notepad++ habe ich jetzt im Einsatz, O_penStat ist gestrichen. Jetzt möchte ich es mit R versuchen.

    Seit Stunden sitze ich jetzt daran, mich in R einzuarbeiten.
    Dein Code für die Urwertkarte funktioniert gut. Man kann auch die Toleranzgrenzen (aber keine zusätzlichen Warngrenzen) angeben:
    plot(qcc(daten, type=“xbar.one“, limits=c(564, 566)), xlab=“Nr.“, ylab=“Messwerte“, title=“Einzelwertkarte“)

    Aber wenn ich eine Regelkarte type „xbar“ haben will, muss ich die Werte wohl erst in einer bestimmten Form gruppieren (qcc.groups). Daran scheitere ich momentan. Versuchsweise wollte ich die 30 Werte einfach in 10 Gruppen aufteilen (Stichprobengröße 3).

    Jetzt frage ich mich, ob das mit r-studio nicht leichter zu lösen wäre. Aber da ich jetzt mit R angefangen habe damit wohl die meisten Möglichkeiten habe, möchte ich eigentlich damit weiterarbeiten. Was meinst du dazu?

    Viele Grüße

    Stefan

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Problem gelöst: qcc.groups brauchts gar nicht.

    Einfach die Stichprobenwerte entsprechend in einer Excel-Tabelle anordnen, als .csv abspeichern (voher in Excel Punkt statt Komma einstellen) und mit read.ta_ble auslesen. Dann passt das Format für qcc type „xbar“.

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    keine Ahnung, wie Du das ohne qcc.groups hingekriegt hast, denn die Struktur muss irgendwie übergeben werden.

    Das mit dem Umwandeln von Kommas in Punkte in Excel kannst Du Dir ersparen, wenn Du die entsprechende Option in R nimmst:
    read.tab_le(…, dec=“,“)
    read.csv(…, dec=“,“)
    read.csv2(…)
    Dann wandelt R die Dezimaltrenner (dec) automatisch in Punkte um.

    Deine Frage, ob R-Studio einfacher ist als R mit Notepad++ kann ich Dir leider nicht beantworten, weil ich nur mit Notepad++ arbeite. Ich kenne Kollegen, die schwören auf R-Studio und würden nie mit etwas anderem arbeiten wollen. Letztlich dürfte das eine Frage des persönlichen Geschmacks sein, denn R-Studie oder Notepad++ sind „nur“ Editoren, die die Arbeit mit R erleichtern.

    Mal zurück zu den Regelkarten: Du kannst mit der Option limits zwar Werte vorgeben, das sind aber bei Regelkarten KEINE Toleranzgrenzen, sondern Prozess-Streugrenzen. Diese Option wird dann verwendet, wenn Du schon Regelkarten-Grenzen berechnet hast (die 3S-Grenzen z. B.) und jetzt für neue Daten dieselben Grenzen verwenden willst.

    Um eine Regelkarte mit Warn- und Eingriffs-Grenzen (2S- und 3S-Grenzen) und Toleranzgrenzen zu bekommen, wird die Original-Regelkarte etwas gepimpt.

    Damit die Ausgabe zu den üblichen deutschen Bezeichnungen passt, hab ich dafür zunächst die Funktion plot.qcc übersetzt (nur die Ausgabe, nicht die Warnmeldungen). Die Funktions-Definition ist etwas länglich, deshalb hier nur der Link zu der Datei: plotQCCdeutsch.r. Den Code lässt Du einfach erstmal durchlaufen, bevor Du die Auswertung startest.

    Als nächstes hab ich mir Daten mit „systematischen“ Fehlern gebastelt:

    wert=rnorm(125,10,.1)
    mittel=mean(wert)
    stabw=sd(wert)
    wert[12]=mittel+12*stabw
    wert[45]=mittel-22*stabw
    wert[90:104]=wert[90:104]+0.06*mittel
    stipro=sort(rep(1:25,5))
    (Du kannst hier natürlich auch alle anderen Werte-Stichprogengruppen-Kombinationen mit anderen Bezeichnungen verwenden.)

    Dann kommt der Teil für die Regelkarte. Dabei wird die Datenstruktur in der Variable „struktur“ definiert und die Toleranzgrenzen UTG und OTG vorgegeben. Anschließend wird die eingedeutschte Regelkarte gezeichnet und es werden die Linien für die 2S-Grenzen und die Toleranzgrenzen hinzugefügt. qcc.options wird hier verwendet, um die Schriftgrößen etwas kleiner als in Standardeinstellung zu bekommen:

    library(qcc)

    struktur=qcc.groups(wert,stipro)
    UTG=9.5
    OTG=10.5

    qcc3S=qcc(struktur,type=“xbar“, data.name=“Messwerte“, nsigmas=3)
    qcc2S=qcc(struktur, type=“xbar“, nsigmas=2, plot=FALSE)

    qcc.options(„cex“=0.9, „cex.stats“=0.8)

    plot.qcc.deutsch(qcc3S, ylim=range(qcc3S$center,qcc3S$limits,qcc3S$statistics,min(apply(struktur, FUN=mean, MARGIN=1)),max(apply(struktur, FUN=mean, MARGIN=1)),UTG,OTG))
    abline(h=qcc2S$limits, col=“orange“, lty=3)
    mtext(c(„UGW“,“OGW“), side = 4, at = qcc2S$limits, las = 1, line = 0.1, col = „orange“, cex=qcc.options(„cex.stats“))
    abline(h=c(UTG,OTG), col=“magenta“)
    mtext(c(„UTG“,“OTG“), side = 4, at = c(UTG,OTG), las = 1, line = 0.1, col = „magenta“, cex=qcc.options(„cex.stats“))

    Eingezeichnet werden folgende Linien:
    Mitte (center): bei xbar der mittlere Mittelwert
    UGW, OGW: untere und obere Warngrenze (2S bzw. 95%), gepunktet orange
    UEG, OEG: untere und obere Eingriffsgrenze (3S bzw. 99,73%), gestrichelt rot
    UTG, OTG: untere und obere Toleranzgrenze, durchgezogen pink

    Ich hoffe, das kommt Deiner Vorstellung wie die Regelkarte aussehen soll jetzt schon ziemlich nahe ;)

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    geändert von – Barbara on 24/09/2012 10:02:43

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo Barbara,

    vielen Dank, alles funktioniert wunderbar.

    Für „xbar.one“ muss ich dann nur den type ändern, oder?
    Werde das mit diesen Daten testen:
    werte <- c(7.75, 7.73, 7.69, 7.7, 7.63, 7.66, 7.68, 7.64, 7.62, 7.68, 7.69, 7.63, 7.65, 7.57, 7.68, 7.61, 7.73, 7.67, 7.76, 7.72, 7.64, 7.59, 7.71, 7.58, 7.66, 7.61, 7.61, 7.67, 7.76, 7.65)
    OTG=7.79
    UTG=7.39

    Kann ich mit read.tab_le eine Spalte auch so einlesen, dass ein string entsteht? Nur so funktioniert qcc.groups.

    Die nächsten Tage werde ich dran gehen, das Ganze anwenderfreundlich zu gestalten. Die Werte sollen per Funktion aus einer bestimmten Excel-CSV-Tabelle ausgelesen und ausgewertet werden. Einmal mit der Regelkarte und dann mit der „normvert_sd“-Funktion.

    Wegen dem Problem mit den Anführungszeichen habe ich vorher übrigens mit einer älteren R-Version gearbeitet, die da nicht so empfindlich war. Für qcc brauchts aber eine neuere.

    Viele Grüße

    Stefan

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Das kleine Projekt ist jetzt fertig.

    Die Daten werden aus einer zentral gespeicherten Excel-Tabelle gelesen und je nach Stichprobenumfang mit Einzelwert- oder Mittelwertkarte dargestellt. Die Funktion „normvert_sd()“ habe ich noch um einen Boxplot ergänzt.

    Danke nochmal an Barbara für die Unterstützung.

    Viele Grüße
    Stefan

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    freut mich, dass Du das jetzt so hast, wie Du es brauchst.

    Passt das denn so auch für Deinen Bekannten?

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo Barbara,

    ich denke, die Regelkarte an sich wird schon so in Ordnung sein. Ich stelle das am kommenden Samstag vor.

    Nur mit dem Daten einlesen hapert es. Ich möchete, dass der Anwender einfach einen Befehl (z.B. EWerte()) eingibt, um die Werte (Werte, OTG, UTG) aus Excel oder .csv einzulesen und automatisch der Variablen „daten“ zuzuweisen.
    Mit den erstellten Fuktionen kann er die „daten“ dann auswerten.

    Bisher brauchts dazu zwei Schritte:
    EWerte <- function() read.tab_le(„C:/daten.csv“)
    daten <- EWerte() # Aufruf der Funktion EWerte()

    Mal sehen, vielleicht klappts ja auch so.

    Gruß
    Stefan

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    ich würd das vermutlich in einer Zeile machen mit
    daten = read.csv2(„datendatei.csv“)

    Da müsste der Anwender dann nur den Pfad zu der Daten-Datei anpassen und ggf. den Namen der csv-Datei ändern.

    Oder hab ich die Frage nicht so ganz verstanden? :o)

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Hallo Barbara,

    ja, so werde ich das mit dem Einlesen der Daten auch machen, das ist wohl der einfachste Weg.

    Habe mir übrigens r-studio angeschaut. Das finde ich recht übersichtlich. Mit einem Klick kann man Pakete laden, sich vorhandene Daten anschauen, auf Files zugreifen, …
    Nur leider funktionieren darin die Funktionen nicht mehr.
    Beispiel Einzelwertkarte: Fehler in hist.default(daten, col = „azure“, main = „Histogramm“, probability = TRUE) :
    ‚x‘ must be numeric
    Also bleibe ich lieber bei R.

    Die Eingriffsgrenzen in den Regelkarten sind variabel, da sie von der Standardabweichung abhängen. Wird die Streuung größer, kann es sein, dass sie außerhalb der Toleranz liegen.
    Deshalb ist immer vorher eine Prozessfähigkeitsuntersuchung (Messmittelfähigkeit vorausgesetzt) notwendig, bevor man mit der Regelkarte arbeitet. Oder sehe ich da was falsch?

    Viele Grüße
    Stefan

    Barbara
    Senior Moderator
    Beitragsanzahl: 2766

    Hallo Stefan,

    das mit den Toleranzgrenzen vs. Prozess-Streugrenzen ist mit der oben angegebenen Regelkarte kein Problem, weil der Wertebereich auf der y-Achse immer bis zu dem kleinsten und größten Wert läuft, egal ob der kleinste/größte Wert ein Wert aus der Regelkarte, eine Prozess-Streugrenze oder eine Toleranzgrenze ist (option ylim= in der Funktion plot.qcc.deutsch).

    Grundsätzlich ist die Regelkarte unabhängig von den Toleranzgrenzen. Dennoch sollte ein Prozess, in dem Regelkarten verwendet werden, ein gewisses Qualitätsniveau haben (z. B. Fähigkeit >1,33 oder Ausschussrate <0,5%), damit Prozess-Eingriffe wegen zu vielen Werten außerhalb der Toleranz möglichst unterbleiben.

    Denn die Prozess-Eingriffe destabilisieren den Prozess und können die Streuung erhöhen (Gefahr der Überregelung = Verschlimmbesserung). Um einen Prozess mit Regelkarten überwachen und belastbare Hinweise auf systematische Ereignisse zu bekommen, muss der Prozess stabil sein.

    Andererseits kann auch ein Prozess mit Regelkarten überwacht werden, der ein zu niedriges Qualitätsniveau hat, z. B. dann, wenn in Folge-Prozessschritten durch Sortierung schlechte Teile entfernt werden und der Prozess aufgrund von technischen Grenzen nie direkt ein ausreichendes Qualitätsniveau erreichen kann.

    Und es gibt auch Menschen, die Regelkarten einsetzen, bevor der Prozess stabil ist, einfach um einen Eindruck über den zeitlichen Verlauf der Werte zu bekommen. (In diesem Fall sind die Regelkarten-Grenzen höchstens grobe Anhaltspunkte dafür, ob das Ergebnis/der Messwert zu klein oder zu groß ist.)

    Die klassische Empfehlung ist, dass der Prozess vor der Installierung von SPC-Regelkarten und Eingriffs-Maßnahmen stabil und kurzzeit-prozessfähig sein muss. In der Praxis wird das oft anders gehandhabt, je nachdem wie die Prozess-Situation und die Zielsetzung der Regelkarten ist.

    Viele Grüße

    Barbara

    _____________________________________

    Eine gute wissenschaftliche Theorie sollte einer Bardame erklärbar sein.
    (Ernest Rutherford, Physiker)

    Stefan741
    Mitglied
    Beitragsanzahl: 46

    Jetzt habe ich bei meinem Bekannten „R“ installiert und drei Mitarbeiterinnen geschult. Die wurden von der Produktion in die QS „versetzt“ und hatten vorher noch nichts von Statistik, MSA usw. gehört. Erschwerend kam noch dazu, dass sie kaum Computerkenntnisse hatten, da es in ihrer Jugend noch keinen PC gab.

    Die Schulung dauerte einen kompletten Tag:
    Erst allgemein über Norm- und Automobilforderungen, dann MSA, Verteilungsarten, Normalverteilung, und zum Schluss „R“.

    Eine Woche konnten sie dann arbeiten und R testen. Dann gab’s ein paar Stunden Nachbereitung.

    Die Resonanz auf die Schulung war sehr positiv. Das freute mich sehr, weil das für mich auch das erst mal war.

    Zwei Punkte musste ich darauf noch an den Regelkarten ändern:

    1. CPK 1,67
    Die Warngrenzen bei 2S wurden mit 5S-Linien ersetzt und mit 1,67 beschriftet. Solange sich diese innerhalb der Toleranz befinden, kann man ablesen, dass der Prozess mit einem CPK von 1,67 läuft.

    2. Standardabweichung
    qcc hat bei der Standardabweichung immer andere Werte gebracht als sd() oder excel. Die Ursache konnte ich nicht finden (was macht „std.dev = „SD“?) und habe deshalb eine andere Berechnungsfunktion vorgegeben.

    So ist das jetzt ein sehr gutes Werkzeug zum Visualisieren von Stichproben. Falls das sonst noch wer braucht, hier der Code:


    einzelwertkarte_sd=function(daten){
    wert1 = NULL
    Datenbezeichnung = ""
    Temp = names(daten)
    if (is.null(Temp)) {wert1 = daten}
    else {wert1 = daten[[1]]; Datenbezeichnung = Temp[1]}

    library(qcc)

    daten=read.t_able("C:/daten.csv", sep = ";", dec = ",") #Liest die Werte aus daten.csv

    qcc5S=qcc(daten, type="xbar.one", std.dev = sapply(daten, sd), nsigmas=4, plot=FALSE)
    qcc3S=qcc(daten,type="xbar.one", std.dev = sapply(daten, sd), data.name="Messwerte", nsigmas=3)
    #qcc2S=qcc(daten, type="xbar.one", std.dev = sapply(daten, sd), nsigmas=2, plot=FALSE)

    qcc.options("cex"=0.9, "cex.stats"=0.8)

    plot.qcc.deutsch(qcc3S, ylim=range(qcc5S$limits,qcc3S$center,qcc3S$limits,qcc3S$statistics,min(apply(daten, FUN=mean, MARGIN=1)),max(apply(daten, FUN=mean, MARGIN=1)),UTG,OTG))
    abline(h=qcc5S$limits, col="blue", lty=3)
    mtext(c("1,67","1,67"), side = 4, at = qcc5S$limits, las = 1, line = 0.1, col ="blue", cex=qcc.options("cex.stats"))
    #abline(h=qcc2S$limits, col="orange", lty=3)
    #mtext(c("UGW","OGW"), side = 4, at = qcc2S$limits, las = 1, line = 0.1, col = "orange", cex=qcc.options("cex.stats"))
    abline(h=c(UTG,OTG), col="magenta", lwd = 3)
    mtext(c("UTG","OTG"), side = 4, at = c(UTG,OTG), las = 1, line = 0.1, col = "magenta", cex=qcc.options("cex.stats"))}

    #Daten auswerten:
    einzelwertkarte_sd(daten)

    Die Forumssoftware hat ein Problem mit t_able. Den Unterstrich bitte entfernen.

    Viele Grüße
    Stefan

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 17)
  • Sei müssen angemeldet sein, um auf dieses Thema antworten zu können.
Nach oben