2016-08-02 10 views
1

Ich arbeite mit Ärzten an einem Projekt zur Überwachung der Einhaltung der richtigen Dosierung von Antibiotika. Um den Anteil der Ereignisse zu verfolgen, die nicht konform sind wie Ärzte P chartsR-Kontrollkarte mit mehreren Linien

verwenden würde Ich mag eine P-Chart mit 3 Grenzlinien erzeugen (entsprechend 1, 2 und 3 SDs) oberhalb und unterhalb der Mittellinie. Ich habe keinen Weg gefunden, dies zu tun. Ich möchte auch, dass der Plot mehrere Unterbrechungen hat, die die Daten in mehrere Zeitperioden aufteilen, was ich im qicharts-Paket tun kann, aber nicht in anderen Paketen.

Es gibt mehrere Pakete für R zum Generieren von P-Diagrammen. Der, den ich am meisten mag, ist Qicharts. Das Standard-P-Diagramm von qicharts und alle anderen Pakete, die ich gesehen habe, erzeugt ein Diagramm mit einer Zentralen Linie und einer Oberen Kontrollgrenze und einer Unteren Kontrollgrenze bei +3 und -3 SD von der Zentrallinie.

Ich möchte herausfinden, wie zusätzliche +1, +2 und -1, -2 SD-Steuerzeilen auf dem gleichen Diagramm generiert werden. Einige Option wie

LimitLines = c(1, 2, 3) where the default is LimitlLines = 3 

Hier ist der Code, aus r-projects modifiziert, um Daten zu erzeugen, erstellen Sie das Diagramm, und umfassen zwei Pausen:

# Setup parameters 
m.beds  <- 300 
m.stay  <- 4 
m.days  <- m.beds * 7 
m.discharges <- m.days/m.stay 
p.pu   <- 0.08 

# Simulate data 
discharges <- rpois(24, lambda = m.discharges) 
patientdays <- round(rnorm(24, mean = m.days, sd = 100)) 
n.pu  <- rpois(24, lambda = m.discharges * p.pu * 1.5) 
n.pat.pu <- rbinom(24, size = discharges, prob = p.pu) 
week  <- seq(as.Date('2014-1-1'), 
       length.out = 24, 
       by   = 'week') 

# Combine data into a data frame 
d <- data.frame(week, discharges, patientdays,n.pu, n.pat.pu) 

# Create a P-chart to measure the number of patients with pressure ulcers (n.pat.pu) each week (week) as a proportion of all discharges (discharges) with breaks one third (8) and two thirds (16) of the way through the data 

qic(n.pat.pu, 
n  = discharges, 
x  = week, 
data  = d, 
chart = 'p', 
multiply = 100, 
breaks = c(8,16), 
main  = 'Hospital acquired pressure ulcers (P chart)', 
ylab  = 'Percent patients', 
xlab  = 'Week') 
+0

Ich vermute, dass Sie den Quellcode eines Pakets tatsächlich ändern müssen, um dies zu erreichen. In ** qic.R **, verfügbar unter ** qicharts_0.5.1.tar.gz ** von https://cran.r-project.org/web/packages/qicharts/index.html, Zeilen 776-780 wahrscheinlich ein guter Anfang - das Paket berechnet hier die Grenzen. – tluh

+0

Danke, aber ich hatte gehofft, dass es einen einfacheren Weg gibt - vielleicht mit einem anderen Paket oder einem Workaround. – user3072084

Antwort

1

Wenn Sie einfach die Daten präsentieren müssen, es ist einfach, das Diagramm selbst zu erstellen. Fühlen Sie sich frei, die Funktion Ihren Bedürfnissen anzupassen, um es einfacher zu machen.

Daten:

Groups <- c(120, 110, 150, 110, 140, 160, 100, 150, 100, 130, 130, 100, 120, 110, 130, 110, 150, 110, 110) 
Errors <- c(4, 3, 3, 3, 0, 6, 2, 2, 1, 5, 1, 5, 1, 1, 0, 1, 4, 0, 0) 
Week <- length(Groups) #optional: input vector of week numbers 
PchartData <- data.frame(Week,Groups,Errors) 

Funktion:

Shewhart.P.Chart <- function(Groups, Errors, Week) 
{ 
## Create from scratch 
# p value 
p <- Errors/Groups 
# pbar 
pbar <- mean(p) 
# calculate control limits 
UCL3 <- pbar+3*sqrt((pbar * (1 - pbar))/Groups) 
UCL2 <- pbar+2*sqrt((pbar * (1 - pbar))/Groups) 
UCL1 <- pbar+1*sqrt((pbar * (1 - pbar))/Groups) 
LCL1 <- pbar-1*sqrt((pbar * (1 - pbar))/Groups) 
LCL2 <- pbar-2*sqrt((pbar * (1 - pbar))/Groups) 
LCL3 <- pbar-3*sqrt((pbar * (1 - pbar))/Groups) 
## adjust the minimal value of the LCL to 0 
LCL3[LCL3 < 0] <- 0 
LCL2[LCL2 < 0] <- 0 
LCL1[LCL1 < 0] <- 0 
# plot pvalues 
plot(c(1:length(Groups)),p, ylim = c(min(LCL3,p),max(UCL3,p)), 
    main = "p Chart \n for Prescription Errors", xlab = "weeks", 
    ylab = 'Proportion nonconforming', col = "green", pch = 20, 
    lty = 1, type = "b") 
# add centerline reference 
abline(h = pbar, col = "red") 
# plot control limits at ±1s, 2s, and 3s 
lines(c(1:length(Groups)),UCL1, col = "blue", lty = 2) 
lines(c(1:length(Groups)),UCL2, col = "blue", lty = 2) 
lines(c(1:length(Groups)),UCL3, col = "blue", lty = 2) 
lines(c(1:length(Groups)),LCL3, col = "blue", lty = 2) 
lines(c(1:length(Groups)),LCL2, col = "blue", lty = 2) 
lines(c(1:length(Groups)),LCL1, col = "blue", lty = 2) 
} 

Breaks leicht in das Vorstehende hinzugefügt werden können, würden Sie brauchen nur die Daten entsprechend zu trennen. Es sollte jedoch daran erinnert werden, dass bei einer Änderung des verwendeten Prozesses die Berechnung der Grenzwerte nicht geändert werden sollte und Ihr Prozess möglicherweise einfach nicht mehr statistisch kontrolliert werden kann und einer Standardisierung bedarf.

Verwandte Themen