📄 sfrancia.ado
字号:
*! version 2.0.8 28sep2004
* Originally written by P. Royston, updated by StataCorp
program define sfrancia, rclass byable(recall) sort
version 6, missing
syntax varlist [if] [in]
tempvar touse
mark `touse' `if' `in' /* but do not markout varlist */
tokenize `varlist'
#delimit ;
di in smcl in gr _n _col(19) /*
*/ "Shapiro-Francia W' test for normal data" _n
" Variable {c |} Obs" _col(30) "W'"
_col(41) "V'"
_col(52) "z Prob>z" _n
"{hline 13}{c +}{hline 49}"
;
#delimit cr
tempvar WD1
while "`1'"~="" {
/*
Calculate ranks
*/
capture drop `WD1'
quietly genrank `WD1' = `1' if `touse'
/*
Calculate number of good values
*/
quietly summarize `WD1'
local G=r(N)
if r(N)<5 {
local R .
local w .
local Z .
local sig .
ret scalar p = .
}
else {
quietly replace `WD1'=invnorm((`WD1'-0.375)/(`G'+0.25))
quietly corr `1' `WD1'
local X=log(`G')-5
local L=-0.0480157+`X'*(0.01971964-0.0119065*`X'*`X')
local M=-exp(1.6930674+`X'*(0.1441647 /*
*/ +`X'*(-0.01849276 /*
*/ +`X'*(0.031074485+`X'*0.0055717663))))
local S=exp(-0.510725+`X'*(-0.1160364 /*
*/ +`X'*(-0.006702098 /*
*/ +`X'*(0.054465944+`X'*0.0087397329))))
local Y=(((1-(r(rho))^2)^`L')-1)/`L'
local Z=(`Y'-`M')/`S'
local R=(r(rho))^2
local w=(1-`R')/( (`L'*`M'+1)^(1/`L') )
ret scalar p = normprob(-`Z')
local sig=max(return(p),.00001)
}
#delimit ;
di in smcl in gr %12s abbrev("`1'",12) " {c |}" in ye
%7.0f `G' " "
%8.5f `R' " "
%8.3f `w' " "
%8.3f `Z' " "
%7.5f `sig'
;
#delimit cr
mac shift
}
ret scalar N = `G'
ret scalar W = `R'
ret scalar V = `w'
ret scalar z = `Z'
/* Double saves */
global S_1 `return(N)' /* # observations */
global S_2 `return(W)' /* W' */
global S_3 `return(V)' /* V' */
global S_4 `return(z)' /* z */
global S_5 `return(p)'
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -