1 | trq.fit(x, y, a1 = 0.1, a2, z, int = T, method = "primal", tol = 1e-04)
|
x |
|
y |
|
a1 |
|
a2 |
|
z |
|
int |
|
method |
|
tol |
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 | ##---- 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 (x, y, a1 = 0.1, a2, z, int = T, method = "primal",
tol = 1e-04)
{
if (missing(a2))
a2 <- a1
if (a1 < 0 | a2 < 0)
stop("trimming proportion negative.")
if (a1 + a2 - 1 > tol)
stop("trimming proportion greater than 1.")
if (method != "primal" & method != "dual")
stop("invalid method: should be 'primal' or 'dual'.")
x <- as.matrix(x)
if (missing(z)) {
ny = length(y)
xx = cbind(rep(1, ny), x)
z <- rq.fit.br(xx, y, tau = -1)
print(z)
}
p <- z$sol[1, ]
q <- matrix(z$sol[-c(1:3), ], nrow(z$sol) - 3, ncol(z$sol))
n <- nrow(z$dsol)
s <- NULL
if (length(dimnames(x)[[2]]) == 0)
dimnames(x) <- list(NULL, paste("X", 1:(nrow(q) - 1),
sep = ""))
if (int) {
x <- cbind(1, x)
dimnames(x)[[2]][1] <- "Intercept"
}
xbar <- apply(x, 2, "mean")
xxinv <- solve(t(x) %*% x)
if (abs(a1 + a2 - 1) <= tol) {
i <- sum(p < a1)
s$coef <- q[, i]
names(s$coef) <- dimnames(x)[[2]]
s$resid <- y - x %*% s$coef
PI <- 3.14159
x0 <- qnorm(a1)
d0 <- (1/sqrt(2 * PI)) * exp(-(x0^2/2))
d0 <- ((4.5 * d0^4)/(2 * x0^2 + 1)^2)^0.2
d <- d0 * (length(s$resid) - length(s$coef))^(-0.2)
if (d > min(a1, 1 - a1))
d <- min(a1, 1 - a1)
s$d <- d
i <- sum(p < a1 + d)
j <- sum(p < a1 - d)
shat <- as.numeric(xbar %*% t(q[, i] - q[, j]))/(2 *
d)
s$int <- int
s$v <- a1 * (1 - a1) * shat^2
s$cov <- s$v * xxinv
}
else {
p1 <- p[-1]
f <- 1/(1 - a1 - a2)
d <- pmax((pmin(p1, 1 - a2) - c(a1, pmax(p1[-length(p1)],
a1))), 0)
if (method == "primal") {
s$coef <- q[, 1:length(p1)] %*% d * f
s$resid <- y - x %*% s$coef
s$int <- int
}
else {
i <- max(1, sum(p < a1))
g <- (z$dsol[, i + 1] - z$dsol[, i])/(p[i + 1] -
p[i])
wa <- z$dsol[, i] + (a1 - p[i]) * g
j <- sum(p < 1 - a2)
g <- (z$dsol[, j + 1] - z$dsol[, j])/(p[j + 1] -
p[j])
wb <- z$dsol[, j] + (1 - a2 - p[j]) * g
wt <- wa - wb
if (min(wt) < 0)
warning("some weights negative!")
s <- lsfit(x, y, abs(wt), int = F)
}
mu <- xbar %*% s$coef
v <- d %*% (z$sol[2, 1:length(d)] - mu)^2
k <- qrq(z, c(a1, a2)) - mu
v <- v + a1 * k[1]^2 + a2 * k[2]^2 + (a1 * k[1] + a2 *
k[2])^2
names(s$coef) <- dimnames(x)[[2]]
s$v <- as.vector(f^2 * v)
s$cov <- s$v * xxinv
}
class(s) <- "trq"
s
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.