说我有一个看起来像这样的数据集:
structure(list(z = c(8.98702764, 5.57518482, 6.98490607, 5.49062004,
6.29710557, 2.94919278, 6.92608989, 12.7289712, 14.40415287,
10.17410763, 11.668976, 10.591285, 11.99862788), y = c(97.6744227499797,
137.901039454029, 121.13581870045, 104.862400564151, 100.555349411331,
76.1737610946716, 73.0655202440326, 56.9068174248469, 54.9673280956043,
50.3012220744035, 44.659247762082, 56.0656699448102, 52.8735636084187
), x = c(5.9213978165422, 5.95607210189104, 5.9234210229403,
5.99177184112492, 6.01421304577101, 6.11577782296786, 6.12640154858096,
6.29193626680413, 6.34553237084864, 6.37503341918741, 6.47851248698575,
6.46627091526568, 6.44897610832035)), .Names = c("z", "y", "x"
), class = "data.frame", row.names = c(NA, 13L))
z y x
1 8.987028 97.67442 5.921398
2 5.575185 137.90104 5.956072
3 6.984906 121.13582 5.923421
4 5.490620 104.86240 5.991772
5 …
Run Code Online (Sandbox Code Playgroud) 背景
我试图复制《统计学习简介》一书中的图 2.6:
粗略的薄板样条拟合图 2.3 中的收入数据。这种拟合使训练数据的错误为零。
到目前为止我尝试过什么?
我尝试复制之前的图 2.5,平滑的薄板样条拟合,不确定是否成功。
income_2 <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Income2.csv")
library(mgcv)
model1 <- gam(Income ~ te(Education, Seniority, bs=c("tp", "tp")), data = income_2)
x <- range(income_2$Education)
x <- seq(x[1], x[2], length.out=30)
y <- range(income_2$Seniority)
y <- seq(y[1], y[2], length.out=30)
z <- outer(x,y,
function(Education,Seniority)
predict(model1, data.frame(Education,Seniority)))
p <- persp(x,y,z, theta=30, phi=30,
col="yellow",expand = 0.5,shade = 0.2,
xlab="Education", ylab="Seniority", zlab="Income")
obs <- trans3d(income_2$Education, income_2$Seniority,income_2$Income,p)
pred <- trans3d(income_2$Education, income_2$Seniority,fitted(model1),p)
points(obs, col="red",pch=16)
segments(obs$x, obs$y, pred$x, pred$y)
Run Code Online (Sandbox Code Playgroud)
双重问题
我有一个累积数据的数据集。我试图插入一些缺失的值,但在某些时候我得到了更高的值。这是我的数据的示例:
dat <- tibble(day=c(1:30),
value=c(278, 278, 278, NA, NA, 302, 316, NA, 335, 359, NA, NA,
383, 403, 419, 419, 444, NA, NA, 444, 464, 487, 487, 487,
NA, NA, 487, 487, 487, 487))
Run Code Online (Sandbox Code Playgroud)
我的数据集很长,当我使用 smooth.spline 插入缺失值时,我得到的值大于下一个观察值,考虑到我正在处理累积的数据,这是相当荒谬的。这是我得到的输出:
value.smspl <- c(278, 278, 278, 287.7574, 295.2348, 302, 316, 326.5689, 335,
359, 364.7916, 377.3012, 383, 403, 419, 419, 444, 439.765, 447.1823,
444, 464, 487, 487, 487, 521.6235, 526.3715, 487, 487, 487, 487)
Run Code Online (Sandbox Code Playgroud)
我的问题是:您能否以某种方式为插值设置边界,以便结果可靠?如果是这样,你怎么能做到呢?
我正在编写一个C++程序来为一组点生成三次样条轨迹.这些点不需要沿x轴排序.例如,它可能是一个圆圈等.
我在网上找到了一些库,例如,ALGLIB库或这里的类https://www.marcusbannerman.co.uk/index.php/home/42-articles/96-cubic-spline-class.html,但所有这些库都对数据点进行排序.我不需要这个,因为我想要生成的东西就像一个圆圈.反正有没有实现这个目标?
我检查了我的参考文献,在我看来,为了适应x和y的数据集,许多教程需要首先绘制x和y,然后拟合的线是图.正常程序如下:
## Calculate the fitted line
smoothingSpline = smooth.spline(tree_number[2:100], jaccard[1:99], spar=0.35)
plot(tree_number[2:100],jaccard[1:99]) #plot the data points
lines(smoothingSpline) # add the fitted spline line.
Run Code Online (Sandbox Code Playgroud)
但是,我不想绘制tree_number和jaccard,而是我只想在绘图中绘制拟合的样条线,我该怎么办?
我读过许多文章,描述了如何将基数或正则样条曲线转换为三次贝塞尔曲线,例如该曲线。
有没有办法做相反的事情,即将一组三次贝塞尔曲线转换为基数样条曲线?例如,我们知道每个曲线的端点都在样条线上。
我正在寻找的是一种在信息最少的情况下往返两种表示形式的方法。同样理想地,解应该是稳定的,以便从三次贝塞尔曲线=>基数样条=>立方贝塞尔曲线=>基数样条应在第二次操作后产生相同(或几乎相同)的曲线。
我似乎splines::ns()
在R中的函数有问题.
我创建了一个简单的虚拟问题
dat <- data.frame(t <- seq(0, 6, .01),
x <- rnorm(length(t), sd = 1),
y <- 5 + t - x^2 + rnorm(length(t), sd = .33))
lm(y ~ t + I(x^2), data = dat)
library(splines)
lm(y ~ t + ns(x, knots = c(0), Boundary.knots = c(-3, 3)), data = dat)
Run Code Online (Sandbox Code Playgroud)
虽然第一个模型工作正常,但第二个模型无法正确识别拦截.我在这里错过了什么?
我正在尝试使用R 中的 spline2 包来构建单调样条。
我在评估模型的自变量新值时遇到了麻烦。一般来说,我无法掌握“预测”的 R 处理及其与 spline2 的关系,以及如何使用生成的 bs 对象。
我试图遵循这个使用 spline1 的例子。我的数据位于名为 BRIyII 的数据框中,具有自变量 t 和因变量 P,因此:
plot(BRIyII$t,BRIyII$P)
Run Code Online (Sandbox Code Playgroud)
所以我这样做:
knots=c(9)
myMat=mSpline(BRIyII$t, knots = knots, degree = 3, intercept = TRUE)
mylm=lm(BRIyII$P~myMat)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们:
pr = predict(mylm,data.frame(BRIyII$t))
points(BRIyII$t,pr,col = "red")
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
1-由于最右边的预测值(红点)低于其左边的一个,我是否误解了 m 样条的“单调”性质?
2- 如何评估 BRIyII$t 中定义的值以外的样条曲线?我尝试了几种东西的组合,但我缺乏 R 语法知识。理想情况下,我想做类似的事情:
newdata=seq.int(0,41.5,0.1)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在R中实现三次样条函数.我已经使用了R库中可用的样条曲线,smooth.spline和smooth.Pspline函数,但我对结果并不满意所以我想说服自己通过"自制"样条函数得出结果的一致性.我已经计算了三次多项式的系数,但我不知道如何绘制结果......它们似乎是随机点.您可以在下面找到源代码.任何帮助,将不胜感激.
x = c(35,36,39,42,45,48)
y = c(2.87671519825595, 4.04868309245341, 3.95202175000174,
3.87683188946186, 4.07739945984612, 2.16064840967985)
n = length(x)
#determine width of intervals
h=0
for (i in 1:(n-1)){
h[i] = (x[i+1] - x[i])
}
A = 0
B = 0
C = 0
D = 0
#determine the matrix influence coefficients for the natural spline
for (i in 2:(n-1)){
j = i-1
D[j] = 2*(h[i-1] + h[i])
A[j] = h[i]
B[j] = h[i-1]
}
#determine the constant matrix C
for (i in 2:(n-1)){
j …
Run Code Online (Sandbox Code Playgroud) 我的应用程序要求创建样条图而不是线系列图。我知道 WPF 不直接提供样条序列。
如何自定义(模板)线系列图来显示曲线图,我不想使用任何第三方付费工具。
谢谢