【问题标题】:Segmented linear fit in for loop分段线性拟合 for 循环
【发布时间】: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 相关的部分代码,则循环运行良好,并且所有具有线性拟合的图都五个我。

还是我将xy 分配给segmented 行的方式?

【问题讨论】:

  • help("segmented") 中的示例清楚地展示了如何将list 传递给参数。
  • 谢谢,我之前看过帮助部分,我尝试将类似于seg.Z 的参数传递给psi,但得到了同样的错误。

标签: r csv for-loop


【解决方案1】:

这演示了正确的语法:

region <- "SB-0-30"
ok <- lm(chla ~ year, data = data[data$regions == region,])
o.seg <- segmented(ok, seg.Z = ~year, psi = list(year = 2007))

注意这是如何使用lmdata 参数的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2014-03-28
    • 2016-03-09
    • 2013-08-21
    相关资源
    最近更新 更多