我成功地使用 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。可能会导致此问题的原因是什么?不够数据?
谢谢!
interp()
返回全零的问题可能是由于数据点不足(3×3矩阵)和频率值的低变异性。尝试这些解决方案:
df2$Var1 <- as.numeric(factor(df2$Var1, levels = unique(df2$Var1)))
df2$Var2 <- as.numeric(factor(df2$Var2, levels = unique(df2$Var2)))
interp(df2$Var2, df2$Var1, df2$Freq, linear = FALSE, extrap = TRUE, nx = 100, ny = 100)
akima::bicubic()
library(akima)
bicubic(df2$Var2, df2$Var1, df2$Freq)
希望,这有效!