我一直试图通过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
行的方式是什么?
答案 0 :(得分:0)
这证明了正确的语法:
region <- "SB-0-30"
ok <- lm(chla ~ year, data = data[data$regions == region,])
o.seg <- segmented(ok, seg.Z = ~year, psi = list(year = 2007))
请注意它如何使用data
的{{1}}参数。