[R] SEM - standardized path coefficients?

John Fox jfox at mcmaster.ca
Wed Sep 19 13:55:06 CEST 2007


Dear Steve,

My intention was to provide this flexibility via the parameters argument to
path.diagram.sem(), but it isn't implemented. Here's a version that should
do what you want:

----------------- snip ----------------

path.diagram.sem <- function (model, out.file, min.rank = NULL, max.rank =
NULL, 
    same.rank = NULL, variables = model$var.names, parameters, 
    ignore.double = TRUE, edge.labels = c("names", "values"), 
    size = c(8, 8), node.font = c("Helvetica", 14), edge.font =
c("Helvetica", 
        10), rank.direction = c("LR", "TB"), digits = 2, ...) 
{
    if (!missing(out.file)) {
        handle <- file(out.file, "w")
        on.exit(close(handle))
    }
    else handle <- stdout()
    edge.labels <- match.arg(edge.labels)
    rank.direction <- match.arg(rank.direction)
    cat(file = handle, paste("digraph \"", deparse(substitute(model)), 
        "\" {\n", sep = ""))
    cat(file = handle, paste("  rankdir=", rank.direction, ";\n", 
        sep = ""))
    cat(file = handle, paste("  size=\"", size[1], ",", size[2], 
        "\";\n", sep = ""))
    cat(file = handle, paste("  node [fontname=\"", node.font[1], 
        "\" fontsize=", node.font[2], " shape=box];\n", sep = ""))
    cat(file = handle, paste("  edge [fontname=\"", edge.font[1], 
        "\" fontsize=", edge.font[2], "];\n", sep = ""))
    cat(file = handle, "  center=1;\n")
    if (!is.null(min.rank)) {
        min.rank <- paste("\"", min.rank, "\"", sep = "")
        min.rank <- gsub(",", "\" \"", gsub(" ", "", min.rank))
        cat(file = handle, paste("  {rank=min ", min.rank, "}\n", 
            sep = ""))
    }
    if (!is.null(max.rank)) {
        max.rank <- paste("\"", max.rank, "\"", sep = "")
        max.rank <- gsub(",", "\" \"", gsub(" ", "", max.rank))
        cat(file = handle, paste("  {rank=max ", max.rank, "}\n", 
            sep = ""))
    }
    if (!is.null(same.rank)) {
        for (s in 1:length(same.rank)) {
            same <- paste("\"", same.rank[s], "\"", sep = "")
            same <- gsub(",", "\" \"", gsub(" ", "", same))
            cat(file = handle, paste("  {rank=same ", same, "}\n", 
                sep = ""))
        }
    }
    latent <- variables[-(1:model$n)]
    for (lat in latent) {
        cat(file = handle, paste("  \"", lat, "\" [shape=ellipse]\n", 
            sep = ""))
    }
    ram <- model$ram
    ram[names(model$coeff), 5] <- model$coeff
    rownames(ram)[model$fixed] <- ram[model$fixed, 5]
    names <- rownames(ram)
    values <- round(ram[, 5], digits)
    heads <- ram[, 1]
    to <- ram[, 2]
    from <- ram[, 3]
    labels <- if (!missing(parameters)){ 
            if (is.numeric(parameters)) round(parameters, digits) 
                else parameters
            }
        else if (edge.labels == "names") names
        else values
    direction <- ifelse((heads == 2), " dir=both", "")
    for (par in 1:nrow(ram)) {
        if ((!ignore.double) || (heads[par] == 1)) 
            cat(file = handle, paste("  \"", variables[from[par]], 
                "\" -> \"", variables[to[par]], "\" [label=\"", 
                labels[par], "\"", direction[par], "];\n", sep = ""))
    }
    cat(file = handle, "}\n")
}

----------------- snip ----------------

E.g., continuing the example in ?path.diagram,

path.diagram(sem.dhp, min.rank='RIQ, RSES, RParAsp, FParAsp, FSES, FIQ', 
    max.rank='ROccAsp, REdAsp, FEdAsp, FOccAsp', 
    parameters=standardized.coefficients(sem.dhp)$"Std. Estimate")

I'll put the updated path.diagram.sem() in the sem package when I have a
chance.

I hope this helps,
 John

--------------------------------
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario
Canada L8S 4M4
905-525-9140x23604
http://socserv.mcmaster.ca/jfox 
-------------------------------- 

> -----Original Message-----
> From: Steve Powell [mailto:steve at promente.org] 
> Sent: Wednesday, September 19, 2007 3:33 AM
> To: r-help at stat.math.ethz.ch
> Cc: jfox at mcmaster.ca
> Subject: Re: [R] SEM - standardized path coefficients?
> 
> Dear list members,
> In sem, std.coef() will give me standardized coefficients 
> from a sem model.
> But is there a trick so that path.diagram can use these 
> coefficients rather than unstandardized ones?
> Thanks
> Steve Powell
> 
> 
> From: John Fox <jfox_at_mcmaster.ca>
> Date: Wed 28 Feb 2007 - 14:37:22 GMT
> 
> 
> Dear Tim,
> 
> See ?standardized.coefficients (after loading the sem package).
> 
> Regards,
>  John
> 
> John Fox
> Department of Sociology
> McMaster University
> Hamilton, Ontario
> Canada L8S 4M4
> 905-525-9140x23604
> http://socserv.mcmaster.ca/jfox
> 
> > -----Original Message-----
> > From: r-help-bounces at stat.math.ethz.ch 
> > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Tim Holland
> > Sent: Wednesday, February 28, 2007 12:35 AM
> > To: r-help at stat.math.ethz.ch
> > Subject: [R] SEM - standardized path coefficients?
> >
> > Hello -
> >
> > Does anybody know how to get the SEM package in R to return 
> > standardized path coefficients instead of unstandardized ones? Does 
> > this involve changing the covariance matrix, or is there an 
> argument 
> > in the SEM itself that can be changed?
> >
> > Thank you,
> > Tim
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code. 
> 
> Steve Powell
> 
>  
> proMENTE social research
> research | evaluation | training & consulting Kranjčevićeva 
> 35, 71000 Sarajevo
> mobile: +387 61 215 997 | office: +387 33 556 865 | fax: +387 
> 33 556 866
> skype: stevepowell99
> www.promente.org  |  www.mojakarijera.com  |  www.psih.org  
> 
> No virus found in this outgoing message.
> Checked by AVG Free Edition. 
> Version: 7.5.487 / Virus Database: 269.13.22/1015 - Release 
> Date: 18.09.2007
> 11:53
>  
> 
> 



More information about the R-help mailing list