Nothing
# See Schilling & Bock (2005, pp. 8-9)
library(testthat)
library(rpf)
context("rescale")
genOrthogonal<-function(dim) {
Q<-MOrthogonal(runif(dim))
return(Q)
}
# Construct an orthogonal matrix whose first few columns are standardized 'M'
# where columns of 'M' are orthogonal.
# Here "standardized 'M'" means each its columns has length 1.
MOrthogonal<-function(M)
{
# can set the parameter "tol" of "qr" to decide how small value should be 0
tmp<-qr(M)
Q<-qr.Q(tmp,complete=TRUE)
if(is.vector(M)) { if(Q[1]*M[1]<0) Q<- -Q }
else { if(Q[1,1]*M[1,1]<0) Q<- - Q }
return(Q)
}
# adapted from clusterGeneration 1.3.1 by Weiliang Qiu, Harry Joe
genPositiveDefMat <- function(dim, low=-1.4, upp=1.4) {
u<-matrix(0, dim,dim)
egvalues <- exp(runif(dim,min=low,max=upp))
diag(u)<-egvalues #the diagonal elements of u are positive
Sigma<-u
if(dim>1)
{ Q<-genOrthogonal(dim) # generate an orthogonal matrix
Sigma<-Q%*%u%*%t(Q) # the final positive definite matrix
}
Sigma
}
for (dims in 1:3) {
test_that(paste(dims, "dims"), {
spec <- list()
spec[[1]] <- rpf.drm(factors=dims, multidimensional=TRUE)
spec[[2]] <- rpf.grm(factors=dims, outcomes = 3, multidimensional=TRUE)
spec[[3]] <- rpf.nrm(factors=dims, T.a="random", T.c="random")
numItems <- length(spec)
test.point <- rnorm(dims)
param <- list()
prob <- list()
for (ix in 1:numItems) {
param[[ix]] <- rpf.rparam(spec[[ix]])
prob[[ix]] <- rpf.prob(spec[[ix]], param[[ix]], test.point)
}
for (ix in 1:numItems) {
info <- paste(" (While testing item model", class(spec[[ix]]), ")")
nomove <- rep(0, dims)
padj <- rpf.rescale(spec[[ix]], param[[ix]], nomove, diag(dims))
prob.adj <- rpf.prob(spec[[ix]], padj, test.point)
expect_equal(prob.adj, prob[[ix]], 1e-3, label="Unmoved params",
info=info)
move <- rnorm(dims)
padj <- rpf.rescale(spec[[ix]], param[[ix]], move, diag(dims))
prob.adj <- rpf.prob(spec[[ix]], padj, test.point-move)
expect_equal(prob.adj, prob[[ix]], 1e-3, label="Moved params", info=info)
cov <- genPositiveDefMat(dims) * lower.tri(diag(dims), TRUE)
Icov <- t(solve(cov))
padj <- rpf.rescale(spec[[ix]], param[[ix]], nomove, cov)
prob.adj <- rpf.prob(spec[[ix]], padj, t(test.point %*% Icov))
expect_equal(prob.adj, prob[[ix]], 1e-3, label="Covariance scaled params", info=info)
padj <- rpf.rescale(spec[[ix]], param[[ix]], move, cov)
prob.adj <- rpf.prob(spec[[ix]], padj, t(t(test.point-move) %*% Icov))
expect_equal(prob.adj, prob[[ix]], 1e-3,
label="Moved and covariance scaled params", info=info)
}
})
}
if (0) {
sum((param[[ix]][1:2]) * test.point)
sum((param[[ix]][1:2] %*% cov) * (test.point %*% t(solve(cov))))
}
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.