File: WeibullDistribution.R

package info (click to toggle)
r-cran-distr 2.9.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,344 kB
  • sloc: ansic: 199; sh: 13; makefile: 2
file content (68 lines) | stat: -rw-r--r-- 2,443 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

################################
##
## Class: WeibullParameter
##
################################

## Access Methods
setMethod("shape", "WeibullParameter", 
           function(object) object@shape)
setMethod("scale", "WeibullParameter", 
           function(x, center = TRUE, scale = TRUE) x@scale)
           ### odd arg-list due to existing function in base package 

## Replace Methods
setReplaceMethod("shape", "WeibullParameter", 
                  function(object, value){ object@shape <- value; object})
setReplaceMethod("scale", "WeibullParameter", 
                  function(object, value){ object@scale <- value; object})

setValidity("WeibullParameter", function(object){
  if(length(shape(object)) != 1)
    stop("shape has to be a numeric of length 1")    
  if(shape(object) <= 0)
    stop("shape has to be positive")
  if(length(scale(object)) != 1)
    stop("scale has to be a numeric of length 1")      
  if(scale(object) <= 0)
    stop("scale has to be positive")
  else return(TRUE)
})

################################
##
## Class: Weibull distribution
##
################################

Weibull <- function(shape = 1, scale = 1) 
                    new("Weibull", shape = shape, scale = scale)

## wrapped access methods
setMethod("shape", "Weibull", 
           function(object) shape(param(object)))
setMethod("scale", "Weibull", 
           function(x, center = TRUE, scale = TRUE) scale(param(x)))
           ### odd arg-list due to existing function in base package 

## wrapped replace methods
setMethod("shape<-", "Weibull", 
           function(object, value) 
                    new("Weibull", shape = value, scale = scale(object)))
setMethod("scale<-", "Weibull", 
           function(object, value) 
                    new("Weibull", shape = shape(object), scale = value))

setMethod("*", c("Weibull","numeric"),
          function(e1, e2){
                if(isTRUE(all.equal(e2,0)))
                   return(new("Dirac", location = 0, .withArith = TRUE))
                if(e2 > 0)
                   return(new("Weibull", shape = shape(e1),
                               scale = scale(e1) * e2, .withArith = TRUE))
                return(-1 * as(Weibull(shape = shape(e1),
                                    scale = scale(e1) * (-e2)),
                               "AbscontDistribution")
                      )
          })