编写脚本来插入缺失的时间序列天气数据?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />对于每小时间隔的天气数据,偶尔会丢失数据点(漏读)。我想插入缺失的数据点——温度、湿度、气压通常在一天中逐渐变化。我想在列中的最后一个和下一个时间序列值之间进行插值,以获取缺失值来清理数据。使用“探索缺失值”进行插补会提供跨行查看的毫无意义的结果,我需要一种简单的方法来填充列中的缺失点,以便与其他计算(例如加热度数天数、冷却度数天数等)一起使用。
从概念上讲,逻辑似乎很简单:当在一列的下一行中遇到缺失值时,计算缺失数据点的数量,直到下一个值,然后根据缺失数据点的数量进行插值。逻辑似乎是:检查一列是否有丢失数据,如果有丢失数据,则对丢失的间隔进行计数,然后将(下一个值 - 最后一个值/丢失间隔的数量)添加到最后一个值来填充丢失的间隔。
任何比我拥有更好的脚本专业知识的人都可以提供解决方案吗?
这个问题已经解决了吗?或者 JMP 中是否已经内置了功能?
回复:编写脚本来插入缺失的时间序列天气数据?很多评论似乎都忽略了您拥有时间序列数据。 假设您的数据表现出自相关性,您可以使用 JSL 函数 INTERPOLATE。 如果需要非线性插值,则可以使用 SPLINE SMOOTH。

回复:编写脚本来插入缺失的时间序列天气数据?....如何编写样条曲线拟合脚本?
G
回复:编写脚本来插入缺失的时间序列天气数据?只因为你能做某事并不意味着你应该!
目前尚不清楚您希望从数据中获得什么信息,但如果您使用单一插补对数据进行任何推理(假设检验、置信区间等),您应该意识到您已经对参数估计值趋向于零,从而影响随后对数据执行的任何推论的质量。
也许永远不会对这些数据进行任何推断,这对您来说不是问题。在这种情况下,您可以随意估算。
回复:编写脚本来插入缺失的时间序列天气数据?如果偶尔丢失数据,最简单的解决方案可能是使用 Fit-Y-By-X 平台。 如果将时间列设置为 X(需要为数字连续)并将天气变量设置为 Y。 然后,您可以从热点菜单中拟合样条线(您需要试验要使用的更改 Lambda 的值)。
从样条热点选择保存预测。 这些新列将填充缺失值,您可以在其中进行计算(或者您可以编写一些脚本以仅在原始值缺失的情况下使用新值)。 由于天气数据通常是逐渐变化的,因此应该给出合理的估算。
回复:编写脚本来插入缺失的时间序列天气数据?关于 Ron 的上述建议,我只是想指出“RandomIndex()”将消除有多少值被减少的不确定性。 所以前几行就变成了:
dt =打开( “$SAMPLE_DATA/时间序列/CO2.jmp” ) ;
// 将 n 个 CO2 值设置为缺失
n = 25 ;
dt :二氧化碳[随机索引( N行( dt ) , n )] = 。 ;
关于一般方法,请参阅: https://community.jmp.com/message/217292#217292
回复:编写脚本来插入缺失的时间序列天气数据?你好桑顿1 ,
过去我做过类似你提到的事情。它不是最快或最简单的,但它可以完成这项工作。
一旦您有了持续时间列和差异列(以及您从源中获得的时间),您就可以根据需要使插补公式复杂化。
名称默认为此处( 1 ) ;
// 打开原始数据集
dt =打开( “$SAMPLE_DATA/时间序列/CO2.jmp” ) ;
//删除大约25个随机行
为了(我= 1 ,我<= 25 ,我++,
X =随机整数( 161 ) ;
dt :二氧化碳[ X ] = 。 ;
) ;
// 此时你只有一个缺少值的数据。
// 添加一列时间 - 如果有,则不需要它。
dt <<新专栏( “t” ) ;
对于每一行( : t =排() ) ;
// 这是你开始的地方
// 对原始表进行子集化并删除缺失值的行。
dtSub = dt <<子集(所有行,列( :二氧化碳, : t ) ) ;
dtSub <<删除行( dtSub <<获取行,其中(不见了( :二氧化碳) ) ) ;
//引入持续时间列
dtSub <<新专栏( “期间” ) ;
对于每一行( :期间=落后( : t , - 1 ) - : t ) ;
// 介绍行与行之间 co2 的变化。
dtSub <<新专栏( “二氧化碳变化” ) ;
对于每一行( :姓名( “二氧化碳变化” ) =落后( :姓名( “二氧化碳” ) , - 1 ) - :姓名( “二氧化碳” ) ) ;
// 将持续时间和差值更新到原表;
dt <<更新(和( dtSub ) ,匹配列( : t = : t ) ) ;
// 关闭子集表
关闭( dtSub ,没有保存) ;
// 填充缺失的行 - 下一步需要
对于每一行( :期间=如果(不见了( :期间) ,落后( :期间, 1 ) , :期间) ) ;
对于每一行( :姓名( “二氧化碳变化” ) =如果(不见了( :姓名( “二氧化碳变化” ) ) ,落后( :姓名( “二氧化碳变化” ) , 1 ) , :姓名( “二氧化碳变化” ) ) ) ;
// 现在您可以使用公式将缺失值填充到新列或现有列中
dt <<新专栏( “二氧化碳已满” ) ;
对于每一行(
:姓名( “二氧化碳已满” ) =如果(
排() == 1 , :二氧化碳,
:期间== 1 , :二氧化碳,
:期间> 1 ,落后( :姓名( “二氧化碳已满” ) , 1 ) + ( :姓名( “二氧化碳变化” ) / :期间)
)
) ;
回复:编写脚本来插入缺失的时间序列天气数据?嗨,jthornton1!
当我的逻辑看起来很简单时,我通常会开始担心!
如果一天中连续 24 小时缺失,您的插值想法似乎会遭受一些极端偏差。例如,我假设您对从午夜到午夜的温度插值会错过白天太阳的变暖效应。即使只缺少几个点,您提出的方法(称为单一插补)也不能正确反映未知缺失值的预测的不确定性,并且对这些数据的任何分析得出的参数估计的方差将出现错误的偏差趋向于零。即使您使用完整数据的每个时间段的一些统计数据(平均值、中位数等),这也是一个问题。
我认为当前解决您的问题的最先进方法是多重插补。多重插补不是为每个缺失的数据填充单个值,而是用一组合理的值替换每个缺失的值,这些值代表要插补的正确值的不确定性。 使用完整数据的标准程序对每个估算数据集进行分析,然后将这些分析的结果进行组合。多重插补并不尝试估计每个缺失值本身,而是尝试表示合理缺失值的随机样本。 此过程产生的统计推论可以更正确地反映由于缺失值而导致的不确定性。例如,您可以获得合理有效的参数置信区间。
SAS 有一些非常有效地实施多重插补的过程。JMP 与 SAS 集成良好。祝你好运!