나는 ROA의 롤링 표준 편차를 추정하기 위해 Stata를 사용합니다 (전년도의 4 창 사용). 이제는 ROA에서 최소 3 회의 관측 (4 점 만점)이있는 롤링 표준 편차 만 유지하려고합니다. Stata를 사용하여 이것을 어떻게 할 수 있습니까?롤링 표준 편차
ROA roa_sd . .
. . . . .0108869.
.0033411. 나는 코멘트에 위의 링크 0.0030827 0.0043739 0.0029793 0.0038275
나는 ROA의 롤링 표준 편차를 추정하기 위해 Stata를 사용합니다 (전년도의 4 창 사용). 이제는 ROA에서 최소 3 회의 관측 (4 점 만점)이있는 롤링 표준 편차 만 유지하려고합니다. Stata를 사용하여 이것을 어떻게 할 수 있습니까?롤링 표준 편차
ROA roa_sd . .
. . . . .0108869.
.0033411. 나는 코멘트에 위의 링크 0.0030827 0.0043739 0.0029793 0.0038275
가 귀하의 질문은 blog post에 대한 답변 0.0032814 0.0053356
는 (그것은 단지 2 유효한 값을 사용하여 계산 된이 값이 누락되어야한다) . rolling
을 사용하고 관측 수가 임계 값을 충족시키지 못하면 σ를 제거하는 추가 화면을 추가 할 수 있습니다.
그러나 시그마 및 베타 (예 : 표준 편차 및 단 변수 회귀 계수)와 같은 간단한 계산의 경우 수동 방법을 사용하면 훨씬 효과적 일 수 있습니다. rolling
솔루션과 내 수동 솔루션을 비교하십시오.
/* generate panel by adpating the linked code */
clear
set obs 20000
gen date = _n
gen id = floor((_n - 1)/20) + 1
gen roa = int((100) * runiform())
replace roa = . in 1/4
replace roa = . in 10/12
replace roa = . in 18/20
/* solution with rolling */
/* http://statadaily.wordpress.com/2014/03/31/rolling-standard-deviations-and-missing-observations/ */
timer on 1
xtset id date
rolling sd2 = r(sd), window(4) keep(date) saving(f2, replace): sum roa
merge 1:1 date using f2, nogenerate keepusing(sd2)
xtset id date
gen tag = missing(l3.roa) + missing(l2.roa) + missing(l1.roa) + missing(roa) > 1
gen sd = sd2 if (tag == 0)
timer off 1
/* my solution */
timer on 2
rolling_sd roa, window(4) minimum(3)
timer off 2
/* compare */
timer list
list in 1/50
수동 솔루션이 훨씬 빠릅니다.
. /* compare */
. timer list
1: 132.38/ 1 = 132.3830
2: 0.10/ 1 = 0.0990
는 개인 고뇌 파일 디렉토리에
rolling_sd.ado
로 (또는 현재 작업 디렉토리를) 다음 저장합니다. 누군가이 코드를 간소화 할 수있을 것이라고 확신합니다. 이 코드는 창의 앞쪽 가장자리에서 최소 데이터 요구 사항을 충족한다는 추가 이점이 있습니다 (즉, 네 가지 모두를 기다리는 대신 처음 세 번 관측으로 시그마를 계산 함).
*! 0.2 Richard Herron 3/30/14
* added minimum data requirement
*! 0.1 Richard Herron 1/12/12
program rolling_sd
version 11.2
syntax varlist(numeric), window(int) minimum(int)
* get dependent and indpendent vars from varlist
tempvar n miss xs x2s nonmiss1 nonmiss2 sigma1 sigma2
local w = `window'
local m = `minimum'
* generate cumulative sums and missing values
xtset
bysort `r(panelvar)' (`timevar'): generate `n' = _n
by `r(panelvar)': generate `miss' = sum(missing(`varlist'))
by `r(panelvar)': generate `xs' = sum(`varlist')
by `r(panelvar)': generate `x2s' = sum(`varlist' * `varlist')
* generate variance 1 (front of window)
generate `nonmiss1' = `n' - `miss'
generate `sigma1' = sqrt((`x2s' - `xs'*`xs'/`nonmiss1')/(`nonmiss1' - 1)) if inrange(`nonmiss1', `m', `w') & !missing(`nonmiss1')
* generate variance 2 (back of window, main part)
generate `nonmiss2' = `w' - s`w'.`miss'
generate `sigma2' = sqrt((s`w'.`x2s' - s`w'.`xs'*s`w'.`xs'/`nonmiss2')/(`nonmiss2' - 1)) if inrange(`nonmiss2', `m', `w') & !missing(`nonmiss2')
* return standard deviation
egen sigma = rowfirst(`sigma2' `sigma1')
end
이 질문 때문에 오프 주제 것으로 보인다 "코드를 묻는 질문이 문제에 대한 최소한의 이해가 해결되는 것을 보여 주어야합니다. 그들은 작동하지 않은 이유를 시도 솔루션 및 예상 결과를 포함합니다." http://stackoverflow.com/help/on-topic –
여기에서 ROA에 대해 설명하지 않습니다. 질문에 부수적 인 것처럼 보이지만 동시에 답변 할 수있는 사람들이 당신과 똑같은 분야에서 일하고 있다고 가정하지 않는 것이 가장 좋습니다. –
다른 곳에서 교차 게시 한 적이 있나요? 이 정확한 질문에 대한 대답은 [여기 블로그에 있습니다] (http://statadaily.wordpress.com/2014/03/31/rolling-standard-deviations-and-missing-observations/)입니다. –