Thank you very much for the example. I think interactively I could get
something.
But my obstacle is to write an R script that processes my set of data
automatically.
My difficulty is to extract the information that appears on the screen, when
R is operated interactively, from a scripts.
Let me go over some steps to make sure I am doing things right.
Assume my data have been read into the matrix xx. Such a matrix contains a
number of curve samples. I call each curve a cycle.
I am processing one cycle at a time and using regression analysis to find
the frequencies in the single cycle. Since I have many, I have to come up
with an automatic way to do that. The main phases are:
1) run a regression analysis including all possible frequencies
2) use "step" to cut off the non significant frequencies
3) input remaining frequencies from phase (2) to "regsubsets"
In the following I have cut and pasted some code and the information I get
from phase (2) and phase (3). To start with I would like to make sure that I
got the output from (3) right. The ouput of (3) tells me that the highest
R^2 value was reached after 8 iterations and there are only 8 significant
predictors in this model ??? In addition the only significant frequencies
(predictors) left are:
cos1, cos2, cos4, cos7, sin1,sin2, sin3, sin5
I got this information interactively. But I'm in troubles at extracting it
automatically.
Any suggestion ?
Question: Do I have to run "step" in advance of "regsubsets"
for a
first-pass model pruning or may I run "regsubsets" on the original
model
bringing in all possible frequencies (88 in all as sums of sinuoids) ?
Thank you so much.
Kind regards,
Maura
********************************************************************
T <- xx$timestamp[end] - xx$timestamp[start]
nsamples <- end +1 - start
nfr <- ceiling(nsamples/2)
yy <- xx[start:end,"amplitude"]
tt <- xx[start:end,"timestamp"]
cosmat <- matrix(nrow=nsamples,ncol=nfr)
coscol <- NULL
sinmat <- matrix(nrow=nsamples,ncol=nfr)
sincol <- NULL
for(i in 1:nfr){
cosmat[,i] <- cos(tt*2*pi*i/T)
coscol <- c(coscol,paste("cos",i,sep=""))
sinmat[,i] <- sin(tt*2*pi*i/T)
sincol <- c(sincol,paste("sin",i,sep=""))
}
colnames(cosmat) <- coscol
colnames(sinmat) <- sincol
xnam1 <- NULL
xnam1 <-
paste(sep="","cosmat[,",1:nfr,"]",collapse="+")
xnam2 <- NULL
xnam2 <-
paste(sep="","sinmat[,",1:nfr,"]",collapse="+")
fmla <- as.formula(paste("yy ~ ",
paste(xnam1,"+",xnam2,sep="")))
FTmod <- lm(fmla)
stepmod <- step(FTmod, direction="both")
summary(stepmod)
*Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.237808 0.008728 27.248 < 2e-16 ***
cosmat[, 1] -1.011932 0.012390 -81.675 < 2e-16 ***
cosmat[, 2] -0.417265 0.012329 -33.844 < 2e-16 ***
cosmat[, 3] 0.020143 0.012318 1.635 0.106604
cosmat[, 4] 0.081425 0.012397 6.568 8.43e-09 ***
cosmat[, 6] -0.042804 0.012388 -3.455 0.000951 ***
cosmat[, 7] -0.044927 0.012340 -3.641 0.000526 ***
cosmat[, 9] 0.039322 0.012411 3.168 0.002298 **
cosmat[, 11] -0.020710 0.012375 -1.673 0.098831 .
cosmat[, 14] 0.016393 0.012390 1.323 0.190245
cosmat[, 17] -0.016482 0.012374 -1.332 0.187319
cosmat[, 19] 0.016537 0.012387 1.335 0.186306
sinmat[, 1] -0.460705 0.012296 -37.469 < 2e-16 ***
sinmat[, 2] -0.289316 0.012356 -23.416 < 2e-16 ***
sinmat[, 3] -0.049610 0.012367 -4.011 0.000153 ***
sinmat[, 4] 0.023937 0.012289 1.948 0.055551 .
sinmat[, 5] 0.045542 0.012406 3.671 0.000476 ***
sinmat[, 6] -0.017782 0.012298 -1.446 0.152790
sinmat[, 12] -0.016093 0.012325 -1.306 0.196038
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05
'.' 0.1 ' ' 1
Residual standard error: 0.08135 on 68 degrees of freedom
Multiple R-Squared: 0.9932, Adjusted R-squared: 0.9914
F-statistic: 549.8 on 18 and 68 DF, p-value: < 2.2e-16*
newmat <- cosmat[,-c(5,8,10,12,13,15,16,18,20:44)]
newmat <- cbind(newmat,sinmat[,-c(7:11,13:44)])
Regmod <- regsubsets(newmat, yy)
rs <- summary(Regmod)
which.max(rs$adjr)
*[1] 8
*rs$which[which.max(rs$adjr), ]
*(Intercept) cos1 cos2 cos3 cos4 cos6
TRUE TRUE TRUE FALSE TRUE FALSE
cos7 cos9 cos11 cos14 cos17 cos19
TRUE FALSE FALSE FALSE FALSE FALSE
sin1 sin2 sin3 sin4 sin5 sin6
TRUE TRUE TRUE FALSE TRUE FALSE
sin12
FALSE*
[[alternative HTML version deleted]]