This repository was archived by the owner on Apr 1, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcovStruct.create.R
More file actions
104 lines (85 loc) · 3.32 KB
/
covStruct.create.R
File metadata and controls
104 lines (85 loc) · 3.32 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
`covStruct.create` <-
function(covtype, d, known.covparam, var.names, coef.cov=NULL, coef.var=NULL, nugget=NULL, nugget.estim=FALSE, nugget.flag=FALSE, iso=FALSE, scaling=FALSE, knots=NULL, kernel=NULL) {
if (covtype=="matern5_2add0") {
weight <- coef.cov[(d+1):(2*d)]
covStruct <- new("covAdditive0",
d = as.integer(d),
name = "matern5_2add0",
var.names = as.character(var.names),
sd2 = as.numeric(sum(weight)),
known.covparam = as.character(known.covparam),
range.val = as.numeric(coef.cov[1:d]),
range.names = paste("range", var.names, sep="."),
weight = as.numeric(weight),
weight.names = paste("weight", var.names, sep="."),
nugget = as.numeric(nugget),
nugget.flag = TRUE,
nugget.estim = nugget.estim,
param.n = as.integer(2*d+1)
)
return(covStruct)
}
if( covtype=="covUser" ){
covStruct <- new("covUser", kernel=kernel, nugget.flag=length(nugget)>0, nugget=as.double(nugget))
return(covStruct)
}
if (scaling & iso) {
iso <- FALSE
warning("At this stage no isotropic version is available, regular scaling is applied.")
}
covsetI <- c("gauss", "exp", "matern3_2", "matern5_2")
covsetII <- c("powexp")
classType <- "covTensorProduct"
if (iso) classType <- "covIso"
if (scaling) {
if (is.null(knots)) {
classType <- "covAffineScaling"
} else classType <- "covScaling"
}
covStruct <- new(classType, d=as.integer(d), name=as.character(covtype),
sd2 = as.numeric(coef.var), var.names=as.character(var.names),
nugget = as.double(nugget), nugget.flag=nugget.flag, nugget.estim=nugget.estim, known.covparam=known.covparam)
if (!scaling) {
covStruct@range.names = "theta"
if (is.element(covtype, covsetI)) {
covStruct@paramset.n <- as.integer(1)
if (iso) {
covStruct@param.n <- as.integer(1)
} else {
covStruct@param.n <- as.integer(d)
covStruct@range.n <- as.integer(d)
}
} else {
covStruct@paramset.n <- as.integer(2)
covStruct@param.n <- as.integer(2*d)
covStruct@range.n <- as.integer(d)
covStruct@shape.n <- as.integer(d)
covStruct@shape.names <- "p"
}
if (length(coef.cov)>0) covStruct <- vect2covparam(covStruct, coef.cov)
} else if (classType=="covAffineScaling") {
covStruct@paramset.n <- as.integer(1)
covStruct@param.n <- as.integer(2*d)
covStruct@knots <- c(0,1)
if (length(coef.cov)>0) covStruct@eta <- coef.cov
} else {
eta.flag <- (length(coef.cov)>0)
for (i in 1:length(knots)) {
if (is.unsorted(knots[[i]])) {
ordKnots <- sort(knots[[i]], index.return = TRUE)
knots[[i]] <- ordKnots$x
if (eta.flag) {
if (length(eta[[i]]) != length(knots[[i]])) stop("mismatch between number of knots and number of values at knots")
eta[[i]] <- eta[[i]][ordKnots$ix]
}
}
}
names(knots) <- var.names
covStruct@knots <- knots
covStruct@param.n <- sum(sapply(knots, length))
covStruct@paramset.n <- as.integer(1)
if (eta.flag) covStruct@eta <- eta
}
validObject(covStruct)
return(covStruct)
}