Great!!! This works, many thanks!
************** using lsfit(x,y) instead of lm(y~x) produces a perfectly correct output. ***************
Thomas Lumley wrote:
On Tue, 4 May 2004, Christoph Scherber wrote:
it all works fine (the regression lines fit correctly to the data) as
long as there are not both missing values in j and k.
That's very strange. The lines for (k in 1:length(foranalysis[93:174,i])) number[k]_substring(plotcode[foranalysis[k,1]],1,5)
should set result in k being the scalar value 81 after the loop is over. In R (unlike S-PLUS), loop indices are just ordinary variables in the environment where the loop is executed. I'd expect this code to work in S-PLUS but not in R.
That loop is actually redundant, since substring() is vectorised: number <- substring(plotcode[foranalysis[93:174,1]],1,5) should work just as well.
It's also strange that you create a data frame df from j and k but don't use it in the lm() call (or AFAICS anywhere else).
What suggestions would you have for this? Or, more precisely, how would
you create multiple graphs from subsequent columns of a data.frame?
I'd probably use lsfit. The following is obviously not tested, since I don't have the data (or even understand fully the data layout).
L <- length(93:174) for(i in p) { X<-foranalysis[93:174, i] Y<-foranalysis[93:174, i+1] corr<-cor(X,Y) corrtrunc<-cor(X[X<0.9], Y[X<0.9]) mainlab <- paste(substring(names(foranalysis[i]), 2, 8), "; corr.:", corr, ";excl.Mono", corrtrunc)) plot(X,Y,main=mainlab, xlab="% of total biomass",ylab="% of total cover",pch="n") number <- substring(plotcode[foranalysis[1:L,1]], 1, 5) text(X, Y, number) model <- lsfit(X,Y) abline(model) abline(0, 1, lty=2) }
-thomas
par(mfrow=c(5,5)) p_seq(3,122,2) i_0 k_0 number_0 for (i in p) { j_foranalysis[93:174,i+1] k_foranalysis[93:174,i] df_data.frame(j,k) mainlab1_substring(names(foranalysis[i]),2,8) mainlab2_"; corr.:" mainlab3_round(cor(j,k,na.method="available"),4) mainlab4_"; excl.Mono:" mainlab5_round(cor(j[j<0.9],k[j<0.9],na.method="available"),4) mainlab_paste(mainlab1,mainlab2,mainlab3,mainlab4,mainlab5) plot(k,j,main=mainlab,xlab="% of total biomass",ylab="% of total cover",pch="n") for (k in 1:length(foranalysis[93:174,i])) number[k]_substring(plotcode[foranalysis[k,1]],1,5) text(foranalysis[93:174,i],foranalysis[93:174,i+1],number) ********************************** model_lm(j~k,na.action=na.exclude]) ********************************** abline(model) abline(0,1,lty=2) }
Does anyone have any suggestions on this?
Best regards Chris.,
Liaw, Andy wrote:
By (`factory') default that's done for you automagically, because options("na.action") is `na.omit'.
If you really want to do it `by hand', and have the data in
a data frame,
you can use something like:
lm(y ~ x, df[complete.cases(df),])
HTH, Andy
From: Christoph Scherber
Dear all,
I have a data frame with different numbers of NA�s in each column, e.g.:
x y 1 2 NA 3 NA 4 4 NA 1 5 NA NA
I now want to do a linear regression on y~x with all the NA�s removed. The problem now is that is.na(x) (and is.na(y) obviously gives vectors with different lengths. How could I solve this problem?
Thank you very much for any help.
Best regards Chris
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Thomas Lumley Assoc. Professor, Biostatistics [EMAIL PROTECTED] University of Washington, Seattle
Thomas Lumley Assoc. Professor, Biostatistics [EMAIL PROTECTED] University of Washington, Seattle
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
