【发布时间】:2015-04-13 15:24:49
【问题描述】:
我一直试图通过 for 循环将 segmented 包放入 R 中,但我收到与 psi 组件相关的错误,我无法解决。需要帮助。
这是我设置框架的方法:
library(segmented)
data <- read.csv("C:/Users/LM-SEAWIFS.csv")
graphpath <- "C:/Users/testing/"
数据如下:
regions year chla
NB-0-30 1998 0.130515091
NB-0-30 1999 0.140724909
NB-0-30 2000 0.135240833
NB-0-30 2001 0.138993817
NB-0-30 2002 0.163052182
NB-0-30 2003 0.121473367
NB-0-30 2004 0.143750958
NB-0-30 2005 0.119260133
NB-0-30 2006 0.139529473
NB-0-30 2007 0.125892445
NB-0-30 2008 0.143278167
NB-0-30 2009 0.119866363
NB-0-30 2010 0.1535188
SB-0-30 1998 0.154147909
SB-0-30 1999 0.149347182
SB-0-30 2000 0.146571583
SB-0-30 2001 0.130977867
SB-0-30 2002 0.139928364
SB-0-30 2003 0.126726222
SB-0-30 2004 0.133419183
SB-0-30 2005 0.119234256
SB-0-30 2006 0.134467273
SB-0-30 2007 0.137653236
SB-0-30 2008 0.154858143
SB-0-30 2009 0.124391663
SB-0-30 2010 0.137880678
基本上它是一个.csv,我想将线性模型和分段模型都拟合到每个图中并保存它。这个想法是 For 循环将使用 `.csv 中的 regions 列。文件以对数据进行分类并将上述回归拟合到其关联数据。
这是 For 循环:
for (region in unique(data$regions)) {
ok<-lm(data[data$regions == region, "chla"]~data[data$regions == region, "year"])
x <- data[data$regions == region, "year"]
o.seg<-segmented(ok,seg.Z=~data[data$regions == region, "year"],psi=2007)
fn <- paste0(graphpath, region, ".png")
png(filename= fn, width=7, height=3.2, units="in", pointsize=10, res=300)
plot(data[data$regions == region, "year"], data[data$regions == region, "chla"], xlim=c(1998,2010), ylim=c(0.08,0.2), main = paste(region, "Kd490"), xlab="Time(year)", ylab="Kd490")
points(data[data$regions == region, "year"],broken.line(o.seg,link=FALSE)$fit,col=2,pch=20)
#plot(o.seg, add=T, col="red")
abline(ok, col="blue")
dev.off()
}
这是错误:
Error in segmented.lm(ok, seg.Z = ~data[data$regions == region, "year"],:`psi' should be a list with more than one covariate in `seg.Z'
我什至试图给 psi 变量一个位于数据范围内的整数(如 2007),但我得到了相同的消息。好像我给它一个列表有问题。
如果我注释掉与segmented 相关的部分代码,则循环运行良好,并且所有具有线性拟合的图都五个我。
还是我将x 和y 分配给segmented 行的方式?
【问题讨论】:
-
help("segmented")中的示例清楚地展示了如何将list传递给参数。 -
谢谢,我之前看过帮助部分,我尝试将类似于
seg.Z的参数传递给psi,但得到了同样的错误。