Omschrijving van het project

Los van wat al in de Charter genoemd is toch even deze woorden.

Probleem: Plotselinge toename van klachten van externe klanten. Bijna een vertienvoudiging.

Oplossing: De band moet langzamer en dat kan alleen met behoud van capaciteit wanneer van 3 naar 4 banden/lijnen wordt overgeschakeld.

Uit de grafieken zal ook naar voren komen dat er een duidelijk verband is tussen uitval van loins en het voorkomen van product categorie 3 en de bandsnelheid.

De praktische onderliggendeoorzaak ligt in het vaardigheidsniveau van de nieuwe medewerkers aan de ‘lijn’.

Waarom dan toch proberen om via de weg van de statistiek te gaan, alleen maar om te ontdekken wat je toch al wist? Wenu, het nut zal mogelijk pas tot uiting komen wanneer meerdere invloeden worden gemeten, die ogenschijnlijk niets met elkaar van doen hebben.

Veel meten kan aan de andere kant een kostenpost zijn. Data moeten vergaard worden en bewaard worden. Als gegevens niet toch al routinematig deel uitmaken van het proces, kan voortdurend extra meten een belasting vormen voor het proces.

Kanttekening bij de gekozen oplossing: vier in plaats van drie banden gebruiken voor dezelfde productie is een vorm van verspilling.

In onderstaande mindmap wordt behalve Defects/Mankementen ook Underutilisation/Onderbenutting genoemd. De gekozen oplossing die de mankementen wil bestrijden, moet dan ook van tijdelijke aard zijn, althans voor zover men wil vasthouden aan de lean principes, ook in de vaak chaotische omstandigheden van alledag, die minder tot reflectie uitnodigen.

Nu is het de verwachting dat het inderdaad om een tijdelijke maatregel gaat. Nieuwe werkkrachten leren immers gaandeweg de nodige vaardigheden aan, waarna de snelheid naar verwachting, zo nodig stapsgewijs, naar een gemiddeld acceptabel niveau teruggebracht kan worden.

Voorlopig echter staat klanttevredenheid voorop.

Lees de metingen

Metingen inlezen en de kolomnamen veranderen. De gegevens staat, zoals gewoonlijk, in een excel bestand.

Interne en extern klachten zijn eraan toegevoegd.

Kolom namen:

De werkuren worden doorgaans geïgnoreerd aangezien de waarden steeds hetzelfde zijn. De kolom oorzaken is leeg. Beide kolommen nu verwijderen en de meetrijen tonen.

dt <- function(){
  drop <- c("wu","o")
  tmpdf <- df()
  return(tmpdf[!(names(tmpdf) %in% drop)] )
}
dt()

Hier de bovenste 6 rijen meetgegevens

Eerste ruwe impressie van de variabelen

## [1] "plot_dagke"
## [1] 1
## [1] "dag"

## [1] 1
## [1] "dag"

## [1] 3
## [1] "ul"

## [1] 5
## [1] "ki"

## [1] 3
## [1] "ul"

## [1] 3
## [1] "ul"

## [1] 4
## [1] "v"

Get column names

cnames <-  names(dt())
cnames
## [1] "dag" "c3"  "ul"  "v"   "ki"  "ke"
cn <- cnames[2:length(cnames)]
cn
## [1] "c3" "ul" "v"  "ki" "ke"
result <- c()
model <- lm(ke ~ dag, dt())
result <- append(result, summary(model)$r.squared)
result[1]
## [1] 0.549821
model <- lm(ki ~ dag, dt())
result <- append(result, summary(model)$r.squared)
result
## [1] 0.5498210 0.3285904
d <- dt() 
d
d$v <- as.factor(d$v)

model <- lm(ke ~ul+v, d)
model
## 
## Call:
## lm(formula = ke ~ ul + v, data = d)
## 
## Coefficients:
## (Intercept)           ul         v800         v850         v900         v950  
##    0.943311    -0.003726     2.280643     3.556077     3.157847     4.472577
summary(model)
## 
## Call:
## lm(formula = ke ~ ul + v, data = d)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3241 -0.6099 -0.2173  0.7254  2.5214 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  0.943311   0.354278   2.663  0.01079 * 
## ul          -0.003726   0.002902  -1.284  0.20595   
## v800         2.280643   1.143776   1.994  0.05238 . 
## v850         3.556077   1.377748   2.581  0.01326 * 
## v900         3.157847   1.278525   2.470  0.01746 * 
## v950         4.472577   1.319392   3.390  0.00149 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.039 on 44 degrees of freedom
## Multiple R-squared:  0.5785, Adjusted R-squared:  0.5306 
## F-statistic: 12.08 on 5 and 44 DF,  p-value: 2.167e-07
model.matrix(~v+ul ,data=d)
##    (Intercept) v800 v850 v900 v950  ul
## 1            1    0    0    0    1 600
## 2            1    0    0    0    1 400
## 3            1    0    0    0    1 550
## 4            1    0    0    0    1 620
## 5            1    0    0    0    1 570
## 6            1    0    0    0    1 450
## 7            1    0    0    0    1 510
## 8            1    0    0    0    1 480
## 9            1    0    0    0    1 490
## 10           1    0    0    0    1 520
## 11           1    0    0    0    1 601
## 12           1    0    0    1    0 433
## 13           1    0    0    1    0 496
## 14           1    0    0    1    0 477
## 15           1    0    0    1    0 450
## 16           1    0    0    1    0 455
## 17           1    0    0    1    0 510
## 18           1    0    0    1    0 587
## 19           1    0    0    1    0 611
## 20           1    0    0    1    0 481
## 21           1    0    0    1    0 603
## 22           1    0    1    0    0 580
## 23           1    0    1    0    0 466
## 24           1    0    1    0    0 540
## 25           1    0    1    0    0 499
## 26           1    0    1    0    0 623
## 27           1    0    1    0    0 512
## 28           1    1    0    0    0 392
## 29           1    1    0    0    0 482
## 30           1    1    0    0    0 380
## 31           1    0    0    0    0  80
## 32           1    0    0    0    0  93
## 33           1    0    0    0    0  60
## 34           1    0    0    0    0  77
## 35           1    0    0    0    0  60
## 36           1    0    0    0    0  88
## 37           1    0    0    0    0  70
## 38           1    0    0    0    0  40
## 39           1    0    0    0    0  87
## 40           1    0    0    0    0 101
## 41           1    0    0    0    0  89
## 42           1    0    0    0    0 123
## 43           1    0    0    0    0  78
## 44           1    0    0    0    0  94
## 45           1    0    0    0    0 105
## 46           1    0    0    0    0 185
## 47           1    0    0    0    0 139
## 48           1    0    0    0    0 108
## 49           1    0    0    0    0  79
## 50           1    0    0    0    0  87
## attr(,"assign")
## [1] 0 1 1 1 1 2
## attr(,"contrasts")
## attr(,"contrasts")$v
## [1] "contr.treatment"
result <- append(result, summary(model)$r.squared)
result
## [1] 0.5498210 0.3285904 0.5784747
?lm
model <- lm(ke ~ ki, dt())
result <- append(result, summary(model)$r.squared)
result
## [1] 0.5498210 0.3285904 0.5784747 0.2401071
model <- lm(ki ~ ke, dt())
summary(model)
## 
## Call:
## lm(formula = ki ~ ke, data = dt())
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.2172 -0.4155 -0.1483  0.3172  2.0500 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.14833    0.16295   0.910 0.367209    
## ke           0.26721    0.06861   3.894 0.000304 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7285 on 48 degrees of freedom
## Multiple R-squared:  0.2401, Adjusted R-squared:  0.2243 
## F-statistic: 15.17 on 1 and 48 DF,  p-value: 0.0003039
result <- append(result, summary(model)$r.squared)
result
## [1] 0.5498210 0.3285904 0.5784747 0.2401071 0.2401071
?lm
print ("Combination of five objects taken two at a time")
## [1] "Combination of five objects taken two at a time"
comdf <- combinations(6, 2)
comdf
##       [,1] [,2]
##  [1,]    1    2
##  [2,]    1    3
##  [3,]    1    4
##  [4,]    1    5
##  [5,]    1    6
##  [6,]    2    3
##  [7,]    2    4
##  [8,]    2    5
##  [9,]    2    6
## [10,]    3    4
## [11,]    3    5
## [12,]    3    6
## [13,]    4    5
## [14,]    4    6
## [15,]    5    6
head(dt())
len <- length(comdf[,1])
len
## [1] 15
result <- c()
compared_a <- c()
compared_b <- c()

  
for (i in 6:len){

  d <- dt()
  
  a <- d[,comdf[i,][1]]
  
  b <- d[,comdf[i,][2]]

  model <- lm(a ~ b, d)
  result <- append(result, round(summary(model)$r.squared,2))
  compared_a <- append(compared_a, colnames(d[  comdf[i,][1]  ]) ) 
  compared_b <- append(compared_b, colnames(d[  comdf[i,][2]  ]) ) 


  
  }  


resultdf <- data.frame(result,compared_a,compared_b)
resultdf
resultdf[with(resultdf, order(compared_b) ), ]
resultdf

Print categorie tegen de gemeten datums

Stats

Category 3

print(f41_kl())

cat()

In deze boxplot is de bandsnelheid geen continu variabele. Let bijvoorbeeld op de sprong tussen 600 en 800.

print(fbox1(dt()))

Loins

Hier is de bandsnelheid discreet (gefactord, geen continu variabele). Van snelheid 800 bestaan slechts 3 meetpunten.

In deze boxplot is de bandsnelheid geen continu variabele. Let bijvoorbeeld op de sprong tussen 600 en 800.

print(fbox2(dt()))

Gecombineerd

print(f7())

T.Tests

stat_data_t1 <- function() {
  t  <-dt() %>% 
    select(c3,v) %>% 
    filter(v==600) 
  
  return(t)
}  
stat_data_t2 <- function() {
  t  <-dt() %>% 
    select(c3,v) %>% 
    filter(v==850) 
  
  return(t)
}  

t1 <- stat_data_t1()
t1
summary(t1)
##        c3             v      
##  Min.   :1011   Min.   :600  
##  1st Qu.:1204   1st Qu.:600  
##  Median :1296   Median :600  
##  Mean   :1316   Mean   :600  
##  3rd Qu.:1370   3rd Qu.:600  
##  Max.   :1802   Max.   :600
var(t1)
##          c3 v
## c3 32794.69 0
## v      0.00 0
sd(t1$c3)
## [1] 181.0931
mean(t1$c3)
## [1] 1316.2
max(t1$c3)
## [1] 1802
t2 <- stat_data_t2()
t2
class(t2)
## [1] "data.frame"
t.test(t1,t2,var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  t1 and t2
## t = -4.8184, df = 50, p-value = 1.387e-05
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1641.4004  -675.5663
## sample estimates:
## mean of x mean of y 
##   958.100  2116.583

Gemiddelden van categorie 3 product in kg en loins uitval per bandsnelheid. Het aantal metingen is aangegeven met ‘n’.

## # A tibble: 5 × 4
##       v cat3_mean loins_mean     n
##   <dbl>     <dbl>      <dbl> <int>
## 1   600      1316         92    20
## 2   800      2846        418     3
## 3   850      3383        537     6
## 4   900      3326        510    10
## 5   950      3281        526    11

Data selectie op bandsnelheid 600

## # A tibble: 20 × 3
## # Groups:   v [1]
##       c3    ul     v
##    <dbl> <dbl> <dbl>
##  1  1802    80   600
##  2  1633    93   600
##  3  1300    60   600
##  4  1446    77   600
##  5  1507    60   600
##  6  1358    88   600
##  7  1309    70   600
##  8  1293    40   600
##  9  1408    87   600
## 10  1352   101   600
## 11  1288    89   600
## 12  1223   123   600
## 13  1011    78   600
## 14  1112    94   600
## 15  1205   105   600
## 16  1244   185   600
## 17  1300   139   600
## 18  1148   108   600
## 19  1185    79   600
## 20  1200    87   600

Facet diagrammen van categorie 3 product in kg bij de gemeten bandsnelheden. Het aantal meetmomenten bij snelheid 600 is het grootst.

Categorie 3 afgezet tegen de bandsnelheid (v). De bandsnelheid is hier continu weergegeven. Er zijn in de metingen maar 5 discrete bandsnelheden ingesteld geweest en in de grafiek verwerkt.

print(f5())

print(f6())
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

print(f7())

stat_data3 <- function() {
  t  <-dt() %>% 
    select(c3,ul,v) %>% 
    group_by(v) 
  
  return(t)
}

print(fbox1(stat_data3()))

print(fbox2(stat_data3()))

Heatmap

?heatmap
library(rpart)
library(rpart.plot)

regres <- function(fl) {
  
  str(dt())
  
  dfCW <- dt()
  m1 <- rpart(c3 ~.,data=dfCW,method="anova")
  m1
  rpart.plot(m1,type=3,digits=4, fallen.leaves = fl)
  
  m2 <- rpart(ul ~.,data=dfCW,method="anova")
  m2
  
  rpart.plot(m2,type=2,digits=3, fallen.leaves = fl)
  
}
regres(fall <- TRUE)
## 'data.frame':    50 obs. of  6 variables:
##  $ dag: POSIXct, format: "2022-08-22" "2022-08-23" ...
##  $ c3 : num  3290 2745 3745 3132 3732 ...
##  $ ul : num  600 400 550 620 570 450 510 480 490 520 ...
##  $ v  : num  950 950 950 950 950 950 950 950 950 950 ...
##  $ ki : num  3 1 0 2 1 2 1 2 2 2 ...
##  $ ke : num  3 4 2 4 3 5 2 4 2 6 ...

?rpart

Uitgesplitste data (v: de bandsnelheid )

print(f4())