# [R] left.solve

Stephen R. Laniel laniel at stat.cmu.edu
Thu Oct 21 06:44:54 CEST 1999

```I have sort of an emergency question for the list.  One of my professors
for an S-Plus intensive class distributed a function to produce partial
regression plots.  I need to run it under R, because I'm doing the
homework on my home computer with a modem; hence I don't have the speed
required to emulate X-Windows and run S Plus off one of the campus
servers.  Bottom line: I'm using R.

So I tried to run the professor's partreg.q file (attached to this

Error: couldn't find function "left.solve"

The offending code is in line 62:

Q_left.solve(R, cbind(rep(1,length(x)),x))

Second bottom line (if such a thing is possible): how do I make this code
work under R?  Is the cause hopeless?

Thanks very much for any help anyone can provide.

--Steve

Stephen R. Laniel            |    "I've got a match:
Carnegie Mellon University   |     Your embrace and my collapse."
laniel at stat.cmu.edu          |     --They Might Be Giants
-------------- next part --------------
# Partial regression (added variable) plot
# H. Seltman  9/30/99
# Creates a partial regression plot
# Reference: Hamilton, Regression with Graphics, 1992, pp. 69, 125, 142
# Argument xlst= is a character vector of names of variables included
#   in the regression OR a numeric or logical index vector identifying
#   variables in "df"  (y variable is removed if included)
# Argument yname= is the quoted name of the y variable
# Argument outname= is the covariate whose added effect is to be plotted
# Argument df= is the data.frame containing the x and y variables
# Argument main= is a title; default is a model formula
# Argument tcex= is the character size of the title
# Argument cex= is the character size of the x and y axis labels
# Argument id=T is for identification mode: left click on points
#   to have them identified, middle click when done.
# Argument proportional=T plots points as circles proportional to DFBETAS
# Argument relsize changes proportional circles relative size
# Argument res=T plots residuals instead
# Argument f=2/3, e.g. sets neighbor fraction for lowess line

partreg_function(xlst, yname, outname, df, proportional=F, relsize=1,
main=NULL, tcex=1, cex=1, id=F, ares=F, f=NULL) {
jnk_par("fig")
relsize_relsize*(jnk-jnk)*(jnk-jnk)
if (!is.character(xlst))
xlst_names(df)[xlst]
if (!is.character(yname) || !is.character(outname))
stop("yname and outname must be in quotes")
if (length(xlst[xlst==yname])==1)
xlst_xlst[xlst!=yname]
if (length(xlst[xlst==outname])!=1)
stop(paste(outname,"is not in",paste(xlst, collapse=", ")))
if (is.null(main)) {
nam_xlst
nam[nam==outname]_paste("(",outname,")",sep="")
main_paste(yname,"~",sep="",paste(nam,collapse="+",sep=""))
}
xlst_xlst[xlst!=outname]
xform_paste(xlst,collapse="+",sep="")
if (xform=="") xform_"1"
x_lm(formula(paste(outname,"~",xform)),df,na.action=na.omit)\$res
y_lm(formula(paste(yname,"~",xform)),df,na.action=na.omit)\$res
rslt_lm(y~x,na.action=na.omit)
xlab_paste(outname, "on others residual")
ylab_paste(yname, "on all but", outname, "residual")
if (!proportional) {
if (ares) {
plot(rslt\$fit, rslt\$res)
abline(h=0,lty=2)
if (!is.null(f)) lines(lowess(rslt\$fit,rslt\$res, f=f))
} else {
plot(x, y, xlab=xlab, ylab=ylab, cex=cex)
if (!is.null(f)) lines(lowess(x,y,f=f))
}
} else {
lms_summary(rslt)
e_rslt\$residuals
n_length(e)
beta_rslt\$coef
p_length(rslt\$coef)
R_rslt\$R
Q_left.solve(R, cbind(rep(1,length(x)),x))
h_as.vector((Q^2 %*% array(1, c(p, 1))))
h.res_(1 - h)
z_e/h.res
v1_e^2
z_t(Q * z)
v.res_sum(v1)
v1_(v.res - v1/h.res)/(n-p-1)
dbeta_backsolve(R, z)
si_sqrt(v1)
xxi_diag(lms\$cov.unscaled)
bi_t(beta-dbeta)
dfbetas_(t(coef(rslt)-t(bi)))/(si %o% xxi^.5)
symbols(x, y, circles=sqrt(p1), inches=0.2*relsize,
xlab=xlab, ylab=ylab, cex=cex)
}
title(main, cex=tcex)
if (!ares) abline(rslt)
if (id) identify(x, y, dimnames(df)[])
rtn_list(x=x,y=y,rslt=rslt)
if (proportional) rtn_list(x=x,y=y,rslt=rslt,dfbetas=dfbetas)
invisible(rtn)
}

```