Nothing
# last modified 30 September 2009 by J. Fox
startvalues <- function(S, ram, debug=FALSE, tol=1E-6){
ram <- ram[!(ram[, "parameter"] == 0 & ram[, "start value"] == 0), , drop=FALSE] # eliminate fixed parameters set to 0
n <- nrow(S)
observed <- 1:n
m <- max(ram[,c(2,3)])
t <- max(ram[,4])
s <- sqrt(diag(S))
R <- S/outer(s,s)
latent<-(1:m)[-observed]
par.posn <- sapply(1:t, function(i) which(ram[,4] == i)[1])
one.head <- ram[,1] == 1
start <- (ram[,5])[par.posn]
A.pat <-matrix(FALSE, m, m)
A.pat[ram[one.head, c(2,3), drop=FALSE]] <- TRUE
P.pat <- C <- matrix(0, m, m)
P.pat[ram[!one.head, c(2,3), drop=FALSE]] <- P.pat[ram[!one.head, c(3,2), drop=FALSE]] <- 1
C[observed, observed] <- R
for (l in latent) {
indicators <- A.pat[observed, l]
for (j in observed){
C[j, l] <- C[l, j] <- if (!any(indicators)) runif(1, .3, .5)
else {
numerator <- sum(R[j, observed[indicators]])
denominator <- sqrt(sum(R[observed[indicators], observed[indicators]]))
numerator/denominator
}
}
}
for (l in latent){
for (k in latent){
C[l, k] <- C[k,l] <- if (l==k) 1 else {
indicators.l <- A.pat[observed, l]
indicators.k <- A.pat[observed, k]
if ((!any(indicators.l)) | (!any(indicators.k))) runif(1, .3, .5) else {
numerator <- sum(R[observed[indicators.l], observed[indicators.k]])
denominator <- sqrt( sum(R[observed[indicators.l], observed[indicators.l]])
* sum(R[observed[indicators.k], observed[indicators.k]]))
numerator/denominator}
}
}
}
A <- matrix(0, m, m)
for (j in 1:m){
ind <- A.pat[j,]
if (!any(ind)) next
A[j, ind] <- solve(C[ind, ind]) %*% C[ind, j]
}
A[observed,] <- A[observed,]*matrix(s, n, m)
A[,observed] <- A[,observed]/matrix(s, m, n, byrow=TRUE)
C[observed,] <- C[observed,]*matrix(s, n, m)
C[,observed] <- C[,observed]*matrix(s, m, n, byrow=TRUE)
P <- (diag(m) - A) %*% C %*% t(diag(m) - A)
P <- P.pat * P
for (par in 1:t){
if (!is.na(start[par])) next
posn <- par.posn[par]
if (ram[posn, 1] == 1) start[par] <- A[ram[posn, 2], ram[posn, 3]]
else start[par] <- P[ram[posn, 2], ram[posn, 3]]
if (abs(start[par]) < tol) start[par] <- tol
}
if (debug){
cat('\nStart values:\n')
print(start)
cat('\n')
}
start
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.