我无法获得scipy.interpolate.UnivariateSpline在插值时使用任何平滑.根据功能的页面以及之前的一些帖子,我相信它应该提供s参数的平滑.
这是我的代码:
# Imports
import scipy
import pylab
# Set up and plot actual data
x = [0, 5024.2059124920379, 7933.1645067836089, 7990.4664106277542, 9879.9717114947653, 13738.60563208926, 15113.277958924193]
y = [0.0, 3072.5653360000988, 5477.2689107965398, 5851.6866463790966, 6056.3852496014106, 7895.2332350173638, 9154.2956175610598]
pylab.plot(x, y, "o", label="Actual")
# Plot estimates using splines with a range of degrees
for k in range(1, 4):
mySpline = scipy.interpolate.UnivariateSpline(x=x, y=y, k=k, s=2)
xi = range(0, 15100, 20)
yi = mySpline(xi)
pylab.plot(xi, yi, label="Predicted k=%d" % k) …Run Code Online (Sandbox Code Playgroud) 我习惯smooth.spline估计数据的三次样条.但是当我使用方程式计算90%的逐点置信区间时,结果似乎有点偏差.有人可以告诉我,如果我做错了吗?我只是想知道是否有一个函数可以自动计算与函数相关的逐点间隔带smooth.spline.
boneMaleSmooth = smooth.spline( bone[males,"age"], bone[males,"spnbmd"], cv=FALSE)
error90_male = qnorm(.95)*sd(boneMaleSmooth$x)/sqrt(length(boneMaleSmooth$x))
plot(boneMaleSmooth, ylim=c(-0.5,0.5), col="blue", lwd=3, type="l", xlab="Age",
ylab="Relative Change in Spinal BMD")
points(bone[males,c(2,4)], col="blue", pch=20)
lines(boneMaleSmooth$x,boneMaleSmooth$y+error90_male, col="purple",lty=3,lwd=3)
lines(boneMaleSmooth$x,boneMaleSmooth$y-error90_male, col="purple",lty=3,lwd=3)
Run Code Online (Sandbox Code Playgroud)

因为我不确定我是否正确使用它,所以我使用gam()了mgcv包中的函数.
它立即给了一个信心乐队,但我不确定它是90%还是95%CI或其他什么.如果有人可以解释,那将是很棒的.
males=gam(bone[males,c(2,4)]$spnbmd ~s(bone[males,c(2,4)]$age), method = "GCV.Cp")
plot(males,xlab="Age",ylab="Relative Change in Spinal BMD")
Run Code Online (Sandbox Code Playgroud)

我正在尝试从 GAM 模型中提取结的位置,以便将我的预测变量划分为另一个模型的类别。我的数据包含一个二元响应变量(已使用)和一个连续预测变量(开放)。
data <- data.frame(Used = rep(c(1,0,0,0),1250),
Open = round(runif(5000,0,50), 0))
Run Code Online (Sandbox Code Playgroud)
我这样拟合GAM:
mod <- gam(Used ~ s(Open), binomial, data = data)
Run Code Online (Sandbox Code Playgroud)
type=c("response", "lpmatrix")我可以在函数内获得预测值和模型矩阵等,predict.gam但我正在努力提取系数变化的结位置。任何建议真的很感激!
out<-as.data.frame(predict.gam(model1, newdata = newdat, type = "response"))
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我也有兴趣做类似的事情:
http://www.fromthebottomoftheheap.net/2014/05/15/identifying-periods-of-change-with-gams/
其中识别了样条的统计增加/减少,但是,我此时没有使用 GAMM,因此,在识别从 GAMM 模型中提取的 GAM 中的相似模型特征时遇到问题。第二项更多的是出于好奇。
library(splines)
x <- runif(100000)
spline <- ns(x, df=5)
Run Code Online (Sandbox Code Playgroud)
如何判断此脊椎对象中的结?
> spline ['knots']
[1] NA
Run Code Online (Sandbox Code Playgroud)
str 让我接近我需要的东西,但我希望能够提取样条曲线的矢量,格式化它,并在Sweave文档中打印它.
> str(sp)
ns [1:117542, 1:5] 0.527 0.474 0.455 0.472 0.498 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "1" "2" "3" "4" ...
- attr(*, "degree")= num 3
- attr(*, "knots")= Named num [1:4] 1.03 1.55 1.99 2.7
..- attr(*, "names")= chr [1:4] "20%" "40%" "60%" "80%"
- attr(*, "Boundary.knots")= num [1:2] 0.0214 4.9999
- attr(*, "intercept")= logi FALSE …Run Code Online (Sandbox Code Playgroud)