r - 提取 stat_xspline 拟合的方法
问题描述
我正在为少量点创建一个带有 geom_xspline 平滑器的图,我想获得 X 范围内所有整数值的平滑 y 值。知道如何获得它们吗?
library(ggplot2)
library(ggalt)
avgTheta<-c(-0.36,0.497085315,0.599960557,0.574336142,0.400831445,0.105615915,-0.250223072)
ageGroup<-c(11,16,23,33,43,53,63)
df <- data.frame(ageGroup, avgTheta)
p <- ggplot(df, aes(x = ageGroup, y = avgTheta))
p +
geom_xspline(spline_shape=-0.3, size=2, color='lightblue') +
geom_point(size=3)
解决方案
包中的xspline()
函数graphics
将返回积分。您应该可以使用该draw=FALSE
参数,但我仍然需要先调用plot.new()
它才能起作用。首先,制作数据。
library(ggplot2)
library(ggalt)
avgTheta<-c(-0.36,0.497085315,0.599960557,0.574336142,0.400831445,0.105615915,-0.250223072)
ageGroup<-c(11,16,23,33,43,53,63)
df <- data.frame(ageGroup, avgTheta)
其次,使用xspline()
函数并将结果转换为数据框。
plot.new()
xs <- xspline(x=df$ageGroup, y=df$avgTheta, shape=-0.3, draw=FALSE)
xs <- do.call(data.frame, xs)
中的值xs
是构成曲线的值。它们不仅仅是整数值,x
而且似乎没有办法让它们只是整数值。制作 ggplot 以显示这两个结果做同样的事情。
p2 <- ggplot() +
geom_line(data=xs, aes(x=x, y=y), size=2, color='lightblue') +
geom_point(data=df, aes(x = ageGroup, y = avgTheta), size=3)
p2
编辑
为了解决关于获取整数值的问题的另一部分,似乎不可能单独做到这一点xspline()
。但是,一旦获得曲线值,就可以将模型拟合到曲线的x
和y
值,并从中预测整数值。例如,一个相当简单的模型是黄土曲线。
lo <- loess(y ~ x, data=xs, span=.1)
cor(xs$y, fitted(lo))
# [1] 0.9999994
从上面可以看出,该模型的拟合值与曲线的观测y
值的相关性xspline()
约为 1。也就是说,黄土模型几乎完美地再现了曲线。现在,您可以预测 x 整数处的黄土曲线值。
pred.dat <- data.frame(x=seq(min(df$ageGroup), max(df$ageGroup), by=1))
fit <- predict(lo, newdata=pred.dat)
pred.dat$fit <- fit
head(pred.dat)
# x fit
# 1 11 -0.35999980
# 2 12 -0.17044086
# 3 13 0.01636747
# 4 14 0.19932127
# 5 15 0.37068414
# 6 16 0.49624180
推荐阅读
- javascript - 未捕获的 ReferenceError:在初始化之前无法访问“输入”
- r - 一次创建多个不同的文件夹
- android - Expo google登录重定向到google主页
- scala - 创建一个通常返回一个或两个参数的方法
- flutter - Dart 如何制作 MyClass.of(context) 方法
- java - 面向对象编程中的等效返回代码
- sql - SQL AZURE:在预期条件的上下文中指定的非布尔类型的表达式,靠近“)”
- docker - 由于预依赖问题,无法构建 docker 映像
- node.js - 没有 node_modules 的 Github 存储库
- c - 无符号整数除法示例