Bits of SPlus Code for analyses in 2003
get.roi.data.linear
get.roi.data.linear <- function(subj, cond, colnames) { file <- paste("C:\\Documents and Settings\\user\\My Documents\\People\\Matthew Brett\\Time Series\\roi_data_linear_", subj, "_", cond, ".wk1", sep = "") frame <- paste("data.", subj, ".", cond, sep = "") print(file) import.data(FileName = file, FileType = "Lotus", ColNames = colnames, TargetStartCol = "1", DataFrame = frame, StartCol = "1", EndCol = "END", StartRow = "1", EndRow = "END", Delimiters = ", \\t", SeparateDelimiters = F, PageNumber = "1", RowNameCol = "", StringsAsFactors = "Auto", VLabelAsNumber = F, DatesAsDoubles = F, Filter = "") source(text = paste("names(", frame, ")<-colnames", sep = "")) guiClose("DataFrame", frame) }
pacf
pacf <- function(s) { acf(s, type = "partial") }
loopMLlinear
loopMLlinear <- function() { graphsheet(page=T) results <- c() for (subj in subjects) { for (cond in conditions) { get.roi.data.linear(subj,cond,colnames) # dev.ask() dataname <- paste("data.", subj, ".", cond, sep = "") source(text=paste("attach(", dataname,")",sep="")) result <- actionML(dataname) results <- c(results, result) source(text=paste("detach(\"", dataname,"\")",sep="")) } } return(results=results) }
innovations
innovations <- function(x,theta=c()) { n <- length(x) p <- length(theta) common.times <- (p+1):n y <- x[common.times] if (p==0) { return(y) } for (k in 1:p) { y <- y - theta[k]*x[common.times-k] } return(y) }
meld
meld <- function(su,co) { paste("data.",su,".",co,sep="") }
gather_phiML
phisML <- c() for (subj in 1:12) { for (cond in 1:7) { datastart <- ((subj-1)*7+(cond-1))*6 phisML <- c(phisML, coef(resultsML[[datastart+4]]$modelStruct$corStruct,F)) } } phisMLt <- t(matrix(phisML,nrow=3)) export.data("phisMLt","phisMLlinear.xls","EXCEL")
gather_phis
# coef(results[[10]]$modelStruct$corStruct,F) phis <- c() for (subj in 1:12) { for (cond in 1:7) { datastart <- ((subj-1)*7+(cond-1))*12 phis <- c(phis, coef(results[[datastart+10]]$modelStruct$corStruct,F)) } }
gather_coeffsML
coeffsML <- c() for (subj in 1:12) { for (cond in 1:7) { datastart <- ((subj-1)*7+(cond-1))*6 coeffsML <- c(coeffsML, resultsML[[datastart+1]]$coefficients[2:3,1:2]) coeffsML <- c(coeffsML, resultsML[[datastart+4]]$tTable[2:3,1:2]) } }
gather_coeffs
coeffs <- c() for (subj in 1:12) { for (cond in 1:7) { datastart <- ((subj-1)*7+(cond-1))*6 coeffs <- c(coeffs, results[[datastart+1]]$coefficients[2:3,1:2]) coeffs <- c(coeffs, results[[datastart+4]]$tTable[2:3,1:2]) } } coeffs <- t(matrix(coeffs,nrow=8)) export.data("coeffs","coeffsOLS+MLlinear.xls","EXCEL") coeffsML <- t(matrix(coeffsML,nrow=2)) export.data("coeffsML","coeffsMLlinear.xls","EXCEL")
gather_sigmaML
sigmaML <- c() for (subj in 1:12) { for (cond in 1:7) { datastart <- ((subj-1)*7+(cond-1))*6 sigmaML <- c(sigmaML, resultsML[[datastart+1]]$sigma) sigmaML <- c(sigmaML, resultsML[[datastart+4]]$sigma) } } sigmaML <- t(matrix(sigmaML,nrow=2)) export.data("sigmaML","sigmaMLlinear.xls","EXCEL")
print.summary.gls
function(x, verbose = FALSE, digits = .Options$digits, ...) { dd <- x$dims verbose <- verbose || attr(x, "verbose") mCall <- x$call if(inherits(x, "gnls")) { cat("Generalized nonlinear least squares fit\n") } else { cat("Generalized least squares fit by ") cat(ifelse(x$method == "REML", "REML\n", "maximum likelihood\n")) } cat(" Model:", deparse(as.vector(mCall$model)), "\n") cat(" Data:", deparse(mCall$data), "\n") if(!is.null(mCall$subset)) { cat(" Subset:", deparse(asOneSidedFormula(mCall$subset)[[2]]), "\n") } print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik, row.names = " ")) if(verbose) { cat("Convergence at iteration:", x$numIter, "\n") } if(length(x$modelStruct)) { cat("\n") print(summary(x$modelStruct)) } cat("\nCoefficients:\n") xtTab <- as.data.frame(x$tTable) wchPval <- match("p-value", names(xtTab)) for(i in names(xtTab)[ - wchPval]) { xtTab[, i] <- format(zapsmall(xtTab[, i])) } xtTab[, wchPval] <- format(round(xtTab[, wchPval], 4)) if(any(wchLv <- (as.double(levels(xtTab[, wchPval])) == 0))) { levels(xtTab[, wchPval])[wchLv] <- "<.0001" } row.names(xtTab) <- dimnames(x$tTable)[[1]] print(xtTab) if(nrow(x$tTable) > 1) { corr <- x$corBeta class(corr) <- "correlation" print(corr, title = "\n Correlation:", ...) } cat("\nStandardized residuals:\n") print(x$residuals) cat("\n") cat("Residual standard error:", format(x$sigma), "\n") cat("Degrees of freedom:", dd[["N"]], "total;", dd[["N"]] - dd[["p"]], "residual\n") }
dwstat
dwstat <- function(resids, S, X, mu, max.lag = 1, simulate = TRUE, reps = 1000, method = c( "resample", "normal"), alternative = c("two.sided", "positive", "negative")) { method <- match.arg(method) alternative <- if(max.lag == 1) match.arg(alternative) else "two.sided" # resids <- residuals(model) if(any(is.na(resids))) stop("residuals include missing values") n <- length(resids) r <- dw <- rep(0, max.lag) den <- sum(resids^2) for(lag in 1:max.lag) { dw[lag] <- (sum((resids[(lag + 1):n] - resids[1:(n - lag)])^2))/den r[lag] <- (sum(resids[(lag + 1):n] * resids[1:(n - lag) ]))/den } if(!simulate) { result <- list(r = r, dw = dw) class(result) <- "durbin.watson" result } else { # S <- summary(model)$sigma # X <- model.matrix(model) # mu <- fitted.values(model) Y <- if(method == "resample") matrix(sample(resids, n * reps, replace = TRUE), n, reps) + matrix(mu, n, reps) else matrix(rnorm(n * reps, 0, S), n, reps) + matrix(mu, n, reps) E <- residuals(lm(Y ~ X - 1)) DW <- apply(E, 2, durbin.watson, max.lag = max.lag) if(max.lag == 1) DW <- rbind(DW) p <- rep(0, max.lag) if(alternative == "two.sided") { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] < DW[lag, ]))/reps p[lag] <- 2 * (min(p[lag], 1 - p[lag])) } } else if(alternative == "positive") { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] > DW[lag, ]))/reps } } else { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] < DW[lag, ]))/reps } } result <- list(r = r, dw = dw, p = p, alternative = alternative) class(result) <- "durbin.watson" result } }
durbin.watson.lm
durbin.watson.lm <- function(model, max.lag = 1, simulate = TRUE, reps = 1000, method = c( "resample", "normal"), alternative = c("two.sided", "positive", "negative")) { method <- match.arg(method) alternative <- if(max.lag == 1) match.arg(alternative) else "two.sided" resids <- residuals(model) if(any(is.na(resids))) stop("residuals include missing values") n <- length(resids) r <- dw <- rep(0, max.lag) den <- sum(resids^2) for(lag in 1:max.lag) { dw[lag] <- (sum((resids[(lag + 1):n] - resids[1:(n - lag)])^2))/den r[lag] <- (sum(resids[(lag + 1):n] * resids[1:(n - lag) ]))/den } if(!simulate) { result <- list(r = r, dw = dw) class(result) <- "durbin.watson" result } else { S <- summary(model)$sigma X <- model.matrix(model) mu <- fitted.values(model) Y <- if(method == "resample") matrix(sample(resids, n * reps, replace = TRUE), n, reps) + matrix(mu, n, reps) else matrix(rnorm(n * reps, 0, S), n, reps) + matrix(mu, n, reps) E <- residuals(lm(Y ~ X - 1)) DW <- apply(E, 2, durbin.watson, max.lag = max.lag) if(max.lag == 1) DW <- rbind(DW) p <- rep(0, max.lag) if(alternative == "two.sided") { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] < DW[lag, ]))/reps p[lag] <- 2 * (min(p[lag], 1 - p[lag])) } } else if(alternative == "positive") { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] > DW[lag, ]))/reps } } else { for(lag in 1:max.lag) { p[lag] <- (sum(dw[lag] < DW[lag, ]))/reps } } result <- list(r = r, dw = dw, p = p, alternative = alternative) class(result) <- "durbin.watson" result } }
botch
print.summary.corStruct <- function(x, ...) { class(x) <- attr(x, "oClass") stNam <- attr(x, "structName") form <- formula(x) if (!is.null(stNam)) { cat(paste("Correlation Structure: ", stNam, "\n", sep = "")) } if (!is.null(form)) { cat(paste(" Formula:", deparse(as.vector(form)),"\n")) } cat(" Parameter estimate(s):\n") print(coef(x, FALSE)) # return(coef(x, FALSE)) }
ar_4steps
par(mfrow=c(4,1)) d10.ols <- gls(bold~hrf,roi.data.990151.10,method="ML") summary(d10.ols) pacf(d10.ols$residuals) d10.AR1 <- gls(bold~hrf,roi.data.990151.10,correlation=corARMA(p=1),method="ML") summary(d10.AR1) pacf(d10.AR1$residuals) d10.AR2 <- gls(bold~hrf,roi.data.990151.10,correlation=corARMA(p=2),method="ML") summary(d10.AR2) pacf(d10.AR2$residuals) d10.AR3 <- gls(bold~hrf,roi.data.990151.10,correlation=corARMA(p=3),method="ML") summary(d10.AR3) pacf(d10.AR3$residuals) cor(d10.AR3$residuals,lag(d10.AR3$residuals,1))
actionML
actionML <- function(dataname) { par(mfrow = c(5, 3)) tsplot(bold, type = "l") title(paste(dataname,": Raw BOLD",sep="")) # First for the OLS ols <- lm(bold~hrf+dhrf) errors0 <- residuals(ols) fitted0 <- fitted.values(ols) tsplot(fitted0) title(paste(dataname,": Fitted(OLS)",sep="")) tsplot(errors0) title(paste(dataname,": Residuals(OLS)",sep="")) auto0 <- coef(ols) output0 <- acf(errors0, type = "partial", plot = T) dw0 <- dwstat(errors0, summary(ols)$sigma, model.matrix(ols), fitted.values(ols),max.lag=8) plot(cbind(dw0$r,dw0$p),main= 'Durbin Watson for OLS', xlab= 'Autocorrelation', ylab= 'P value') # Now try AR3 ar3 <- gls(bold~hrf+dhrf,correlation=corARMA(p=3),method="ML") auto3 <- coef(ar3$modelStruct$corStruct, F) errors3 <- innovations(ar3$resid,auto3) current <- as.data.frame(errors3) attach(current) tsplot(errors3) title(paste(dataname,": Innovations(AR3)",sep="")) output3 <- acf(errors3, type = "partial", plot = T) lm3 <- lm(errors3~1) errors3 <- residuals(lm3) sigma3 <- summary(lm3)$sigma modelmatrix3 <- eval(model.matrix(lm3)) fittedvalues3 <- fitted.values(lm3) dw3 <- dwstat(errors3, sigma3, modelmatrix3, fittedvalues3, max.lag=8) plot(cbind(dw3$r,dw3$p),main= 'Durbin Watson for AR3', xlab= 'Autocorrelation', ylab= 'P value') detach("current") return( AR0=summary(ols), dw0=dw0, Cols=coefficients(ols), AR3=summary(ar3), dw3=dw3, Car3=coefficients(ar3) ) }
action
action <- function(dataname) { par(mfrow = c(5, 3)) tsplot(bold, type = "l") title(paste(dataname,": Raw BOLD",sep="")) # First for the OLS ols <- lm(bold~hrf+dhrf) errors0 <- residuals(ols) fitted0 <- fitted.values(ols) tsplot(fitted0) title(paste(dataname,": Fitted(OLS)",sep="")) tsplot(errors0) title(paste(dataname,": Residuals(OLS)",sep="")) auto0 <- coef(ols) output0 <- acf(errors0, type = "partial", plot = T) dw0 <- dwstat(errors0, summary(ols)$sigma, model.matrix(ols), fitted.values(ols),max.lag=8) plot(cbind(dw0$r,dw0$p),main= 'Durbin Watson for OLS', xlab= 'Autocorrelation', ylab= 'P value') # Now try AR1 ar1 <- gls(bold~hrf+dhrf,correlation=corARMA(p=1)) auto1 <- coef(ar1$modelStruct$corStruct, F) errors1 <- innovations(ar1$resid,auto1) current <- as.data.frame(errors1) attach(current) tsplot(errors1) title(paste(dataname,": Innovations(AR1)",sep="")) output1 <- acf(errors1, type = "partial", plot = T) lm1 <- lm(errors1~1) errors1 <- residuals(lm1) sigma1 <- summary(lm1)$sigma modelmatrix1 <- model.matrix(lm1) fittedvalues1 <- fitted.values(lm1) dw1 <- dwstat(errors1, sigma1, modelmatrix1, fittedvalues1, max.lag=8) plot(cbind(dw1$r,dw1$p),main= 'Durbin Watson for AR1', xlab= 'Autocorrelation', ylab= 'P value') detach("current") # Now try AR2 ar2 <- gls(bold~hrf+dhrf,correlation=corARMA(p=2)) auto2 <- coef(ar2$modelStruct$corStruct, F) errors2 <- innovations(ar2$resid,auto2) current <- as.data.frame(errors2) attach(current) tsplot(errors2) title(paste(dataname,": Innovations(AR2)",sep="")) output2 <- acf(errors2, type = "partial", plot = T) lm2 <- lm(errors2~1) errors2 <- residuals(lm2) sigma2 <- summary(lm2)$sigma modelmatrix2 <- eval(model.matrix(lm2)) fittedvalues2 <- fitted.values(lm2) dw2 <- dwstat(errors2, sigma2, modelmatrix2, fittedvalues2, max.lag=8) plot(cbind(dw2$r,dw2$p),main= 'Durbin Watson for AR2', xlab= 'Autocorrelation', ylab= 'P value') detach("current") # Now try AR3 ar3 <- gls(bold~hrf+dhrf,correlation=corARMA(p=3)) auto3 <- coef(ar3$modelStruct$corStruct, F) errors3 <- innovations(ar3$resid,auto3) current <- as.data.frame(errors3) attach(current) tsplot(errors3) title(paste(dataname,": Innovations(AR3)",sep="")) output3 <- acf(errors3, type = "partial", plot = T) lm3 <- lm(errors3~1) errors3 <- residuals(lm3) sigma3 <- summary(lm3)$sigma modelmatrix3 <- eval(model.matrix(lm3)) fittedvalues3 <- fitted.values(lm3) dw3 <- dwstat(errors3, sigma3, modelmatrix3, fittedvalues3, max.lag=8) plot(cbind(dw3$r,dw3$p),main= 'Durbin Watson for AR3', xlab= 'Autocorrelation', ylab= 'P value') detach("current") # print(summary(ols)) # print(coefficients(ols)) # print(summary(ar1)) # print(coefficients(ar1)) # print(summary(ar2)) # print(coefficients(ar2)) # print(summary(ar3)) # print(coefficients(ar3)) return( AR0=summary(ols), dw0=dw0, Cols=coefficients(ols), AR1=summary(ar1), dw1=dw1, Car1=coefficients(ar1), AR2=summary(ar2), dw2=dw2, Car2=coefficients(ar2), AR3=summary(ar3), dw3=dw3, Car3=coefficients(ar3) ) }