我有一系列x和y值(但不是函数本身)。我想通过x和y值的样条插值得到未知函数的导数(得到导数......)。 我的例子 EDITED
x<-c(1,2,3,4,5,6,7,8,9,10)
y<-c(0.1,0.3,0.8,0.9,0.91,0.93,0.95,0.98,0.99,0.999)
是否有可能在R中进行插值并得到导数的函数形式? 我的问题是我只有cdf函数的x和y值,但需要获得概率denisty函数。所以我想通过样条插值得到导数...
问题的原因是我需要获取该cdf的pdf,所以我试图对cdf的xy值进行样条插值 - 请注意这是一个简单的例子而不是真正的cdf
答案 0 :(得分:0)
在他的书“{回归建模策略”中阅读the explanation by Frank Harrell之后,我还没有发现限制三次样条的函数形式特别难以掌握。
require(rms)
df <- data.frame( x = c(1,2,3,4,5,6,7,8,9,10),
y =c(12,2,-3,5,6,9,8,10,11,10.5))
ols( y ~ rcs(x, 3), df)
#--------------
Linear Regression Model
ols(formula = y ~ rcs(x, 3), data = df)
Model Likelihood Discrimination
Ratio Test Indexes
Obs 10 LR chi2 3.61 R2 0.303
sigma 4.4318 d.f. 2 R2 adj 0.104
d.f. 7 Pr(> chi2) 0.1646 g 2.811
Residuals
Min 1Q Median 3Q Max
-8.1333 -1.1625 0.5333 0.9833 6.9000
Coef S.E. t Pr(>|t|)
Intercept 5.0833 4.2431 1.20 0.2699
x 0.0167 1.1046 0.02 0.9884
x' 1.0000 1.3213 0.76 0.4738
#----------
rms
包有一个奇怪的系统,用于存储某些特殊需要完成的摘要信息
dd <- datadist(df)
options(datadist="dd")
mymod <- ols( y ~ rcs(x, 3), df)
# cannot imagine that more than 3 knots would make sense in such a small example
Function(mymod)
# --- reformatted to allow inspection of separate terms
function(x = 5.5) {5.0833333+0.016666667* x +
1*pmax(x-5, 0)^3 -
2*pmax(x-5.5, 0)^3 +
1*pmax(x-6, 0)^3 }
<environment: 0x1304ad940>
pmax
函数中的零点基本上抑制了x值小于结点(在这种情况下为5,5.5和6)时对该总数的贡献
比较三节与四节(如果你想要平滑的曲线,那么为...-
添加一个更精细的Predict
数据参数):
png()
plot(df$x,df$y )
mymod <- ols( y ~ rcs(x, 3), df)
lines(df$x, predict(mymod) ,col="blue")
mymod <- ols( y ~ rcs(x, 4), df)
lines(df$x, predict(mymod) ,col="red")
dev.off()
答案 1 :(得分:0)
看一下单调立方样条,这些样条不会因结构而减少。网络搜索&#34;单调三次样条R&#34;出现了一些点击。我还没有使用过任何一个包。