我是一名攻读论文的社会学博士生。在一些数据分析过程中,我遇到了以下问题。
我在一系列年份中有一些变量的测量值表。值计算,"某一年中某种类型的事件有多少"?以下是它的样子:
year var
1983 22
1984 55
1985 34
1986 29
1987 15
1988 20
1989 41
所以,例如1984年,全年发生了55起此类事件。
在[1983,1990]中用实数域表示这些数据的一种方法是使用分段函数f
:
f(x) = var if floor(x) == year, for all x in [1983, 1990).
此函数绘制一系列宽度为1的水平线,绘制变量的条形图。这些行中每条线下的面积等于该年中变量的值。但是,对于这个变量,我知道在每一年中,这一比率在全年都不是恒定的。换句话说,由于(不连续)函数f
似乎存在,事件不会在12月31日突然从一年的速率跳跃到另一个速率。我不确切地知道费率如何变化,但我希望每年都能顺利过渡。
所以,我想要的是一个函数g
,它在域[1983,1990]上连续且平滑(连续可微),也保留了年度总数。那是的,1984年至1985年g
的确定积分必须仍然等于55,其他所有年份都相同。 (因此,例如,击中条形的所有中点的n次多项式将不起作用。)此外,我希望g
成为分段函数,所有部分都相对简单 - - 样方是最好的,或者是正弦曲线。
总之:我希望g
成为每年定义的一系列抛物线,它们从一个平滑过渡到另一个(g'(x)
的左右极限在年界应该相等),每个抛物线下的面积等于上面数据给出的总面积。
I've drawn a crude version of what I want here.漫画使用与上面相同的数据,黑色曲线代表我希望的函数g
。对于正确的事情,事情变得特别糟糕,特别是1988年和1989年。但它只是为了展示我想要最终得到的结果。
感谢您的帮助,或者指出我认为可能有用的其他资源!
PS我已查看this paper内链接的this question.我同意作者(请参阅第4节),如果我可以用伪数据替换我的数据d'使用矩阵A,我可以非常简单地生成某种平滑函数,这将是很好的,但他们没有说明如何获得A.只是一些值得思考的东西。再次感谢!
PPS我需要的是一种可靠的生成g的方法,给定如上所述的任何数据表。我实际上有数百种这样的年度计数数据,所以我需要一个通用的解决方案。
答案 0 :(得分:3)
您需要曲线的积分来完成一组特定的点,由累计总数定义,所以......
在累积总数之间插值以获得积分曲线,然后 取出那个的衍生物来获得你正在寻找的功能。
由于你希望你的函数是连续和平滑的",即C1-连续,你插入的积分曲线需要是C2连续的,即它必须有连续的一阶和二阶导数。您可以使用多项式插值,sinc插值,足够程度的样条等
使用"自然"用于插入积分的三次样条将为您提供一个似乎满足您所有要求的分段二次导数。
这里有一个很好的自然三次样条描述:http://mathworld.wolfram.com/CubicSpline.html
答案 1 :(得分:0)
如果您的目标是将离散数据转换为连续表示,我建议您查找Kernel Density Estimation。 KDE基本上将每个数据点建模为(通常)高斯分布,并对分布求和,从而产生平滑的连续分布。 This blog使用SciPy模块对KDE进行了非常彻底的处理。
KDE的一个缺点是它不提供分析解决方案。如果这是您的目标,我建议您查看polynomial regression。