绘制R在一个循环中平方

时间:2014-05-02 10:28:14

标签: r loops correlation

我的原始数据集" d"包括26个站的13年的每月ndvi和降水数据:

head(d)

     row.names timestamp  station   year month   ndvi  landcover    altitude precipitation
1         1         1  A            2000   jan 0.4138 Mixed forest     2143          16.0
2      1769         2  A            2000   feb 0.4396 Mixed forest     2143           4.0
3      2055         3  A            2000   mar 0.4393 Mixed forest     2143          25.5
4      2341         4  A            2000   apr 0.6029 Mixed forest     2143          72.6
5      2627         5  A            2000   may 0.4756 Mixed forest     2143         241.7
6      2913         6  A            2000   jun 0.4969 Mixed forest     2143         505.9

下面的代码生成了6个图,显示了jan-jun cliff与august ndvi的相关性。 现在,我想将r平方值添加到每个绘图中,但是我在代码中执行的方式似乎不起作用并且导致每个绘图的r2 = NA。我试图以与p值相同的方式获得r2,但这也导致了NAs。

我为一个站做了同样的事情并且r2工作了。有没有人有任何想法,为什么它不适用于下面的代码?

d <- read.csv("a.csv", header = TRUE, sep = ",")
d <- na.omit(d)

for(m in c("jan","feb","mar","apr","may","jun")) {
  ndvi<-d$ndvi[d$month=="aug"]
  precip<-d$precipitation[d$month==m]
  r2<-cor(ndvi,precip)^2
  cat("month =",m,"P=",cor.test(ndvi,precip)$p.value,"\n")
  plot(ndvi~precip,main=m,
     sub=sprintf("r2=%.2f",r2)) 
  abline(lm(ndvi~precip))
}

我得到的错误是:

Error in cor(ndvi, precip) : incompatible dimensions

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题在于数据中的NAs - 您需要保留它们,直到您对观察结果进行配对,但是他们告诉cor()cor.test()如何处理NA数据 - 有点混乱,他们都有不同的方式来指定应该删除NA。

这现在适用于您的数据集吗?

d <- read.csv("a.csv", header = TRUE, sep = ",")
#d <- na.omit(d) #keep NAs for the moment

for(m in c("jan","feb","mar","apr","may","jun")) {
  ndvi<-d$ndvi[d$month=="aug"]
  precip<-d$precipitation[d$month==m]
  r2<-cor(ndvi,precip,use="complete.obs")^2
  cat("month =",m,"P=",cor.test(ndvi,precip,na.action=na.omit)$p.value,"\n")
  plot(ndvi~precip,main=m,
     sub=sprintf("r2=%.2f",r2)) 
  abline(lm(ndvi~precip))
}