在 R 中,使用 akima 包中的 interp() 函数进行插值,结果全部为 0 值

问题描述 投票:0回答:1

我成功地使用 akima 的 interp() 来插值 4 x 5 矩阵数据集,但是当我以相同的方式将该函数应用于 3 x 3 矩阵数据集时,结果值全部为 0。工作数据如下如下(df):

变量1 变量2 频率
A A 16609.28
B A 18357.76
C A 10304.00
D A 16783.36
A B 13573.12
B B 15303.68
C B 9676.80
D B 13342.72
A C 10490.88
B C 11407.36
C C 8947.20
D C 10997.76
A D 10920.96
B D 16389.12
C D 10644.48
D D 12538.88
A E 13575.68
B E 23480.32
C E 22056.96
D E 14264.32

工作代码如下:

interp(as.numeric(df$Var2), as.numeric(df$Var1), as.numeric(df$Freq), linear = TRUE, extrap = TRUE, nx = 100, ny = 100)

破坏的数据如下(df2):

变量1 变量2 频率
A A 26.3750
B A 27.0000
C A 26.9375
A B 27.1875
B B 26.5000
C B 25.7500
A C 26.5000
B C 26.8750
C C 26.3750

该数据的代码(在上述代码不起作用后尝试专门设置x、y和z):

x <- as.numeric(df2[[i]]$Var2)
y <- as.numeric(df2[[i]]$Var1)
z <- as.numeric(df2[[i]]$Freq)

interp(x, y, z, linear = TRUE, extrap = TRUE, nx = 100, ny = 100)

X 和 Y 正确填充到 1 到 3 之间的 100 个值(a、b、c (1, 2, 3) 的数值转换。但是,这些值都是 0。可能会导致此问题的原因是什么?不够数据?

谢谢!

r interpolation
1个回答
0
投票

interp()
返回全零的问题可能是由于数据点不足(3×3矩阵)和频率值的低变异性。尝试这些解决方案:

  1. 确保正确的数字转换:
df2$Var1 <- as.numeric(factor(df2$Var1, levels = unique(df2$Var1)))
df2$Var2 <- as.numeric(factor(df2$Var2, levels = unique(df2$Var2)))
  1. 使用双三次插值代替线性:
interp(df2$Var2, df2$Var1, df2$Freq, linear = FALSE, extrap = TRUE, nx = 100, ny = 100)

  1. 或者使用
    akima::bicubic()
library(akima)
bicubic(df2$Var2, df2$Var1, df2$Freq)

希望,这有效!

© www.soinside.com 2019 - 2024. All rights reserved.