我正在使用R中的No Implicit conversion of String into Array
包来使GAM适应某些水文数据,如下所示:
// Function that returns a Promise for the FPS
const getFPS = () =>
new Promise(resolve =>
requestAnimationFrame(t1 =>
requestAnimationFrame(t2 => resolve(1000 / (t2 - t1)))
)
)
// Calling the function to get the FPS
getFPS().then(fps => console.log(fps));
当我得到从 $data = DB::table('pemesanan as p')
->select('p.tgl_pesan', DB::raw('SUM(dp.jumlah) as jumlah'))
->leftJoin('detail_pemesanan as dp', 'p.id_pemesanan', '=',
'dp.id_pemesanan')
->whereRaw('p.tgl_pesan >= DATE_ADD(NOW(), INTERVAL -6 DAY)')
->groupBy('p.tgl_pesan')
->get();
输出的图时,在y轴上它告诉我每个平滑函数的自由度,这些通常是非整数值。 我希望能够控制所使用的每个平滑函数的自由度,有没有办法做到这一点?
我已经看到了指定" knots"因此控制合适但我对GAM的概念相当新,我还没有找到任何明确的资源来解释这些是什么(如果它们甚至与我的问题有关)。
答案 0 :(得分:2)
我一直在密切关注你如何回答其他答案。从您的回复中可以看出,在GAM中了解了几个概念,然后我可以做出简短的回答。
不幸的是,没有。 mgcv
GAM不使用反向拟合进行估算,而是通过GCV或REML执行平滑参数的联合估算。因此,与旧版gam
包不同,您可以在其中为每个样条线术语指定df
,但无法在mgcv
中实现此目的。
在惩罚回归设置中控制平滑度的唯一方法是设置平滑参数sp
,但它与自由度的关系不是封闭的形式,你无法预见它
另一个答案是建议你做一个纯粹的回归样条而不会受到惩罚。通过设置等级k
和信令fx = TRUE
,您总是拥有等于等级减1的自由度(作为居中约束的结果),这是一个整数。
以下是我在平滑方面做出的其他一些答案。
smooth.spline(): fitted model does not match user-specified degree of freedom解释了如何在df
中设置smooth.spline
。请注意,这是反装配GAM的基础。
How to interpret lm() coefficient estimates when using bs() function for splines解释了纯回归样条的基础。当然,mgcv
提供了很多样条基础类,而不仅仅是splines::bs
使用的B样条。
答案 1 :(得分:1)
gam
文档中有很多参数可供您了解。
我认为对您的案例最有用的参数是k
,基础维度。从本质上讲,它设定了使用s
平滑的自由度的上限。 Here is some documentation
所以你可能会跑,例如:
gam(GWL ~ s(month, k = 4) + ...)
然后使用plot.gam
和gam.check
检查您的模型。如果诊断结果不佳,您可以向上或向下调整k
直到它们改善。
编辑:根据this answer,fx = TRUE
的{{1}}参数将适合具有固定自由度的回归样条。 k将等于总df和k-1 = edf。