【问题标题】:Loess prediction for many groups of data多组数据的黄土预测
【发布时间】:2015-07-27 20:18:23
【问题描述】:

我正在使用loess 在各个绘图的测量日期之间插入数据。我想获得每年所有 48 个地块的每日分辨率。以下是我的数据集中的一个示例:

dput(vi.sample)

结构(列表(年 = c(2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L), 朱利安 = c(150L, 153L、157L、165L、173L、179L、186L、193L、201L、208L、226L、150L、 153L, 157L, 165L, 173L, 179L, 186L, 193L, 201L, 208L, 226L), jdx = c(2.573770492, 2.625245902, 2.693879781, 2.831147541, 2.968415301、3.07136612、3.19147541、3.311584699、3.448852459、 3.568961749、3.877814208、2.573770492、2.625245902、2.693879781、 2.831147541、2.968415301、3.07136612、3.19147541、3.311584699、 3.448852459, 3.568961749, 3.877814208), 站点 = 结构 (c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "东", class= "因子"), 类型=结构(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "b", class= "factor"), trt =结构(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "a", class= "factor"), 图 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), vi = c(0.41, 0.44, 0.52, 0.64, 0.66, 0.67, 0.64, 0.66, 0.61, 0.7, 0.7, 0.41, 0.45, 0.55, 0.61, 0.63, 0.66, 0.63, 0.64, 0.6, 0.7, 0.69)), .Names = c("年", “julian”、“jdx”、“站点”、“类型”、“trt”、“绘图”、“vi”)、class= “data.frame”、row.names = c(NA, -22L))

我需要在所收集数据的三个季节(2012 年 - 2014 年)的每一季中插入每个地块的数据。我已经通过使用subset 函数成功地做到了这一点。请注意,我使用的是朱利安日期,但我并不特别喜欢这种日期格式。

lo <- loess(vi~julian, 
               subset(vi.sample, year=="2012" & site=="east" 
               & type=="b" & trt=="a" & plot=="1"),
               model=TRUE,
               na.action=na.exclude)

问题:有没有一种方法可以自动化代码来插入来自每个绘图/年份组合的数据,而不必对每个数据进行子集化?我正在考虑使用| year/site/type/trt/plot 设计的nlsList 函数。

我的第二个问题涉及predict 函数。以下代码成功显示了上面指定图的拟合 vi 值。

pred <- predict(lo, seq(from =150, to =226, 
            by = 1), se=FALSE)

但是,对应的 x 值与原始儒略日期不同。
问题:如何获得预测值来表示黄土模型中使用的儒略日期?请注意,这些日期可能因每年/情节而异。

【问题讨论】:

    标签: r predict loess


    【解决方案1】:

    对于问题 1,这是一个标准的数据操作 - 拆分、应用、组合。 这里使用plyr

    library(plyr)
    fits <- dlply(vi.sample, .(year, site, type, trt, plot), .fun=function(samp)
        loess(vi ~ julian, model=T, na.action=na.exclude, data=samp))
    

    您按年份/站点/类型/trt/plot 将数据分组,应用 loess 函数,然后将结果组合回列表中。

    对于第二个问题,您在进行预测时选择了朱利安日期,也许我在那里遗漏了一些东西。

    【讨论】:

    • 感谢您的回答。后续:fits 生成一个无法强制转换为数据框的大列表。我试过unlist,但得到错误:incorrect number of dimensions。关于将其转换为数据框的任何指针?
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多