1 |
Z |
|
r |
|
tau |
|
ep |
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 | ##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (Z, r, tau, ep)
{
p = ncol(Z)
n = nrow(Z)
mu0 = MeanCov(Z)$zbar
Sigma0 = MeanCov(Z)$S
Sigin = solve(Sigma0)
diverg = 0
for (k in 1:200) {
sumu1 = 0
mu = matrix(0, p, 1)
Sigma = matrix(0, p, p)
d = rep(NA, n)
u1 = rep(NA, n)
u2 = rep(NA, n)
for (i in 1:n) {
zi = Z[i, ]
zi0 = zi - mu0
di2 = t(zi0) %*% Sigin %*% zi0
di = as.numeric(sqrt(di2))
d[i] = di
if (di <= r) {
u1i = 1
u2i = 1/tau
}
else {
u1i = r/di
u2i = u1i^2/tau
}
u1[i] = u1i
u2[i] = u2i
sumu1 = sumu1 + u1i
mu = mu + u1i * zi
Sigma = Sigma + u2i * zi0 %*% t(zi0)
}
mu1 = mu/sumu1
Sigma1 = Sigma/n
Sigdif = Sigma1 - Sigma0
dt = sum(Sigdif^2)
mu0 = mu1
Sigma0 = Sigma1
Sigin = solve(Sigma0)
if (dt < ep) {
break
}
}
if (k == 200) {
diverg = 1
mu0 = rep(0, p)
sigma0 = matrix(NA, p, p)
}
theta = MLEst(Sigma0)
Results = list(mu = mu0, Sigma = Sigma0, theta = theta, d = d,
u1 = u1, u2 = u2, diverg = diverg)
return(Results)
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.