編寫腳本來插入缺失的時間序列天氣數據?<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 集成良好。祝你好運!