gpt4 book ai didi

algorithm - 如何在 Stata 中获得最大运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:55 25 4
gpt4 key购买 nike

我想通过编写 Stata 代码来获得运行最大值。

我觉得我很接近:

gen ctrhigh`iv' = max(ctr, L1.ctr, L2.ctr, L3.ctr, ..., L`iv'.ctr)

如您所见,我的数据是时间序列,`iv' 代表窗口(例如 5、10 或 200 天)

唯一的问题是您不能将包含数字的 varlist 或字符串传递给 max。例如。以下是不可能的:

local ivs 5 10 50 100 200
foreach iv in `ivs' {
local vals
local i = 1
while (`i' <= `iv') {
vals "`vals' `i'"
local ++i
}
gen ctrhigh`iv' = max(varlist vals) //not possible
}

我该如何实现呢?

快速计算运行标准偏差的示例

* standard deviation of ctr, see http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods *
gen ctr_sq = ctr^2
by tid: gen ctr_cum = sum(ctr) if !missing(ctr)
by tid: gen ctr_sq_cum = sum(ctr_sq) if !missing(ctr_sq)
foreach iv in $ivs {
if `iv' == 1 continue
by tid: gen ctr_sum = ctr_cum - L`iv'.ctr_cum if !missing(ctr_cum) & !missing(L`iv'.ctr_cum)
by tid: gen ctr_sq_sum = ctr_sq_cum - L`iv'.ctr_sq_cum if !missing(ctr_sq_cum) & !missing(L`iv'.ctr_sq_cum)
by tid: gen ctrsd`iv' = sqrt((`iv' * ctr_sq_sum - ctr_sum^2) / (`iv'*(`iv'-1))) if !missing(ctr_sq_sum) & !missing(ctr_sum)
label variable ctrsd`iv' "Rolling std dev of close ticker rank by `iv' days."
drop ctr_sum ctr_sq_sum
}
drop ctr_sq ctr_cum ctr_sq_cum

注意:这不是一个精确的 sd,它是一个近似值。我意识到这与最大值有很大不同,但这可以作为如何处理大数据计算的说明。

最佳答案

您的示例是时间序列数据,这意味着您有 tsset 数据。你不说你是否也有面板或纵向结构。我将假设最坏的情况并假设后者,因为它不会使代码变得更糟。所以,假设 tsset id date。事实上,这与此处的代码无关,只是明确地假设 id 是一个标识符,date 是一个时间变量。

执行此操作的一种没有吸引力的方法是循环观察。假设窗口设置为 42。

  local window = 42 
gen max = .
tsset id date
quietly forval i = 1/`=_N' {
su ctr if inrange(date, date[`i'] - `window', date[`i']) & id == id[`i'], meanonly
replace max = r(max) in `i'
}

因此,用文字来说也是如此:总结 ctr 的值,如果 date 在窗口内 并且它在相同的面板(相同的 id),并将最大值放在当前观察中。

meanonly 选项没有正确命名。它计算除均值之外的一些其他量,最大值是一个。但是您确实希望 meanonly 选项使 summarize 尽可能快。

请参阅我 2007 年关于间隔事件的论文,可在 http://www.stata-journal.com/sjpdf.html?articlenum=pr0033 免费获得

我说没有吸引力,但这种方法确实有一个优点,一旦你理解它就很容易使用。

我没有为 max() 设置一个包含大量参数的表达式。您以 200 为例,没有说明您可能不会要求更多,据我所知,窗口长度可能没有上限,但表达式的复杂程度会有限制。

如果我想到更好的方法,我会发布。或者其他人会....

关于algorithm - 如何在 Stata 中获得最大运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com