【问题标题】:Interpolation of loess.smooth in RR中的loess.smooth插值
【发布时间】:2018-02-22 11:25:28
【问题描述】:

在运行 spline 方法后,我正在运行 loess.smooth 方法。 下面给出的输入是我运行样条方法后得到的数据。 但是我在 loess.smooth 方法上出错了。整个第一列以浮点格式返回输出,但我需要它以整数格式,增量为 1。

任何帮助将不胜感激。

谢谢

**input:** spline_file
1   0.157587435
2   0.146704412
3   0.129899285
4   0.138925582
5   0.104085676

out <- loess.smooth(spline_file$x, spline_file$y, span = 1, degree = 1, 
family = c("gaussian"), length.out = seq(1, max_exp, by = 1), surface= 
"interpolate", normalize = TRUE, method="linear") 

**OUTPUT:**
0           0.150404703
1.020408163 0.154413716
2.040816327 0.158458172
3.06122449  0.162515428
4.081632653 0.166562839
5.102040816 0.170577762

**OUTPUT REQUIRED:**
x   y
1   0.225926707
2   0.226026551
3   0.226241194
4   0.2265471
5   0.226920733

【问题讨论】:

    标签: r loess


    【解决方案1】:

    不确定以下内容是否完全回答了您的问题,但可能会有所帮助。下面是一些代码、演示情节和一些解释/建议。

    1. 您不应该使用 1 的degree,您的数据需要更高的度数。
    2. 您应该通过?loess.smooth 检查允许的参数。我认为您混淆了scatter.smoothloess.smooth 的一些参数,并进一步使用了该函数不存在的一些参数(例如normalize - 如果我监督了什么,请纠正我)。

    无论如何,样条平滑函数的输出具有比原始数据更多的数据点是有道理的。为了能够绘制平滑曲线,平滑功能会在您的数据点之间生成额外的点。检查以下代码末尾生成的图。如果合身好,是另一个问题...

    spline_file <- read.table(text = "
                       1   0.157587435
                       2   0.146704412
                       3   0.129899285
                       4   0.138925582
                       5   0.104085676
                       ", stringsAsFactors = FALSE)
    colnames(spline_file) <- c("x", "y")
    
    spline_loess <- loess.smooth(spline_file$x, spline_file$y, span = 1, degree = 2, 
                 family = c("gaussian")
                 ,surface= "interpolate"
                 , statistics = "exact"
                 ) 
    
    spline_loess
    # $x
    # [1] 1.000000 1.081633 1.163265 1.244898 1.326531 1.408163 1.489796
    # [8] 1.571429 1.653061 1.734694 1.816327 1.897959 1.979592 2.061224
    # [15] 2.142857 2.224490 2.306122 2.387755 2.469388 2.551020 2.632653
    # [22] 2.714286 2.795918 2.877551 2.959184 3.040816 3.122449 3.204082
    # [29] 3.285714 3.367347 3.448980 3.530612 3.612245 3.693878 3.775510
    # [36] 3.857143 3.938776 4.020408 4.102041 4.183673 4.265306 4.346939
    # [43] 4.428571 4.510204 4.591837 4.673469 4.755102 4.836735 4.918367
    # [50] 5.000000
    # 
    # $y
    # [1] 0.1586807 0.1571512 0.1556485 0.1541759 0.1527367 0.1513344
    # [7] 0.1499721 0.1486533 0.1473813 0.1461595 0.1449911 0.1438795
    # [13] 0.1428280 0.1417881 0.1406496 0.1394364 0.1381783 0.1369053
    # [19] 0.1356473 0.1344341 0.1332957 0.1322619 0.1313626 0.1306278
    # [25] 0.1300873 0.1297791 0.1297453 0.1299324 0.1302747 0.1307066
    # [31] 0.1311626 0.1315769 0.1318839 0.1320181 0.1319138 0.1315054
    # [37] 0.1307273 0.1295270 0.1281453 0.1266888 0.1251504 0.1235232
    # [43] 0.1218002 0.1199744 0.1180388 0.1159866 0.1138105 0.1115038
    # [49] 0.1090594 0.1064704
    
    plot(spline_file)
    lines(spline_loess) 
    

    【讨论】:

    • 感谢您指出需要使用更高的degree。还有你对normalize 参数的权利,我似乎把它和scatter.smooth 混在一起了。我同意你的观点,会产生额外的点,同样的情况也发生在我运行spline 方法时,我通过使用xout = seq(0, 100, by = 1) 传递参数来修复它,所以即使生成了额外的点,它们也在范围内并且会增加一个。
    • 我的回答是否解决了您的问题或者是否有任何开放点?如果它解决了所有问题,请考虑接受答案或至少投赞成票。谢谢。否则我会尝试回答任何未解决的问题。
    • 不,很抱歉,我仍然遇到同样的问题,即输出以浮点格式返回相同的输出。
    • 平滑后不能只有 5 个整数值作为输出,请参阅我的解释。您可能仍会从输出中选择单个数据点,其中 x 等于您所需的整数值,然后在 x 上使用 as.integer。这有帮助吗?
    • 不,我知道我需要传递至少 50 个整数值作为输出。我也确实在 x 上尝试了 as.integer,但它在 loess.smooth 方法中不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2012-08-25
    相关资源
    最近更新 更多