我的原始数据集" 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
感谢您的帮助!
答案 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))
}