我正在尝试绘制一条直接穿过我所有数据点的平滑线,并且具有基于另一个变量的渐变.理论上多项式插值可以完成工作,但我不确定如何使用ggplot.这是我到目前为止所提出的:
数据:
dayofweek hour impressions conversions cvr
1 0 3997982 352.0 8.80e-05
1 1 3182678 321.2 1.01e-04
1 2 2921004 248.6 8.51e-05
1 3 1708627 115.6 6.77e-05
1 4 1225059 98.4 8.03e-05
1 5 1211708 62.0 5.12e-05
1 6 1653280 150.0 9.07e-05
1 7 2511577 309.4 1.23e-04
1 8 3801969 397.8 1.05e-04
1 9 5144399 573.0 1.11e-04
1 10 5770269 675.6 1.17e-04
1 11 6936943 869.8 1.25e-04
1 12 7953053 996.4 1.25e-04
1 13 8711737 1117.8 1.28e-04
1 14 9114872 …Run Code Online (Sandbox Code Playgroud) 我试图将观察到的值绘制为与预期值相对的点,如下所示:
d <- data.frame(
ranks = 1:9,
observed = c(0.736, 0.121, 0.067, 0.034, 0.026, 0.015, 0.001, 0.001, 0.000),
expected = c(0.735, 0.136, 0.051, 0.025, 0.015, 0.009, 0.006, 0.005, 0.003)
)
ggplot(d, aes(x=ranks, y=observed)) +
geom_point(size=2.2) +
geom_line(aes(x=ranks, y=expected), size=0.8, colour='red')
Run Code Online (Sandbox Code Playgroud)
这是正确的,但我更希望线条很好地平滑(没有肘部)。使用geom_smooth()withloess或gam并没有真正帮助,因为两者都过度平滑(以不同的方式)。有什么建议吗?
更新:如果这很有用,以下是我生成预期值的方式:
# BACIS POWER FUNCTION:
fPow <- function(x, a, b) {a * x^b}
# INITIALIZE PARAMETERS:
est1 <- coef(nls(observed ~ fPow(ranks, a, b),
start=c(a=1, b=1), data=d))
# FITTING:
nlfit1 <- nls(observed ~ …Run Code Online (Sandbox Code Playgroud)