【问题标题】:Plotting R squared in a loop在循环中绘制 R 平方
【发布时间】:2014-05-02 10:28:13
【问题描述】:

我的原始数据集“d”包括 13 年 26 个站点的月度 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 precip 与 august ndvi 的相关性。 现在,我想将 r 平方值添加到每个图,但是按照我在代码中所做的方式似乎不起作用,并且导致每个图的 r2=NA。我试图以与 p 值相同的方式获得 r2,但这也导致了 NA。

我为一个站点做了同样的事情,而 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

感谢您的帮助!

【问题讨论】:

  • 如果你的数据中有NAs,你的第二行必须是d &lt;- na.omit(d)。如果这不能解决问题,您需要向我们提供您的数据示例,或者使用dput(d),或者如果真实数据太大/机密无法共享,则以与您的数据类似的格式模拟 som .
  • @Miff 感谢您的回复!我刚刚添加了 head(d),这样你就可以看到我的数据是什么样子了。另外,我按照您的建议更改了第二行,但现在我收到了我编辑的问题中提到的错误。
  • 正如 Miff 所说,你能把dput(d) 的输出复制到这里吗,这里的问题并不明显,因为八月份的数据丢失了,还请查看minimum working example

标签: r loops correlation


【解决方案1】:

问题在于数据中的 NA - 您需要保留它们,直到您将观察结果配对,但他们告诉 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))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2019-04-28
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多