❶ stata非平衡面板怎麼進行logit
目錄
1.xtbalance 命令的使用
2.xtbalance 的流程
2.1 生成連續時間的非平衡面板
2.2 不用xtbalance命令的處理成平衡面板的方法
2.3 xtbalance的使用
3.非連續時間的非平衡面板的處理
3.1 生成數據
3.2 處理成平衡面板
3.3 使用 xtbalance
4.非平衡面板非連續時間也沒有固定間隔
1.xtbalance 命令的使用
首先,這個命令是stata外部命令,需要先下載安裝才能使用。下載安裝的命令為ssc install xtbalance,當你下載安裝後,你就可以通過使用help xtbalance來查看該命令的幫助文檔了解該命令的使用方法。
xtbalance命令的具體用法:xtbalance, range(numlist) [ miss(varlist) ]
請注意,在使用該命令之前你需要設置你的面板數據,你可以通過xtset panelvar timevar或者tsset panelvar timevar來設置你的面板。
當你設置完後,你可以根據你所需要的時間段來處理數據,比如我需要1992-1998年的面板,那麼命令就是xtbalance, range(1992 1998)。
缺陷:當你的timevar不是 1991、1992、??2000這樣的連續時間時,而是1992、1994、1996??2000這種非連續時間的時候,你使用xtbalance, range(1992 1998)的結果將會刪除你的整個樣本,你相信么?
當我對我的非連續時間的平衡面板1992(2)2000,進行上述命令的時候,出來的結果如下:
( observations deleted e to out of range)
( observations deleted e to discontinues)
即,該命令首先將不在你選定的時間段內的樣本刪掉,其次,它在清理每個id的時候,將組內沒有1998-1992+1數量的id刪掉,但為什麼我的平衡面板會被全部刪除呢?因為我的不是連續時間,那麼我們的時間間隔不一樣,每個組內的樣本數是不一樣的,我的每個id應該只有 1+ (1998-1992)/2 個,它按照連續時間來計算的話會比我多,所以它認為我的組內缺失了樣本,不是平衡的,所以會將這些也刪掉。結果,我的數據就全被刪了。
2.xtbalance 的流程
我們這里就不貼xtbalance命令的源代碼,但是我通過自己編寫的一個do文件來展示具體操作流程。
2.1 生成連續時間的非平衡面板
我們首先生成一個id為0(1)99,year為1991(1)2000的平衡面板:
clear
set obs 1000
gen id =int(_n/10.000001)
bysort id :gen year =1990+ _n
xtset id year
/*
panel variable: id (strongly balanced)
time variable: year, 1991 to 2000
delta: 1 unit
*/
然後,我們生成均勻分布的隨機數,將隨機數小於0.2的樣本刪掉,即每條都有20%的概率被刪掉,剩下的樣本為非平衡的樣本
drop if runiform()<0.2
xtset id year
/*
panel variable: id (unbalanced)
time variable: year, 1991 to 2000, but with gaps
delta: 1 unit
*/
同時,通過tab id我們可以看每個id的樣本數(受限於編輯器,這里只列出幾行)都不一樣
idFreq.PercentCum.091.171.17191.172.34281.043.38370.914.29
注意:這時候,如果在1991(1)2000時間段上是平衡面板的話,每個id應該有2000-1991+1=10條記錄
2.2 不用xtbalance命令的處理成平衡面板的方法
實際上,xtbalance命令的操縱是這樣的:
刪除不在時間段內的樣本;
計算每個id的樣本數,如果每個id組內缺少樣本,則將這個id的樣本都刪除。
假如,我們需要將上述數據id :0(1)99 year: 1991(1)2000的非平衡面板轉為id :0(1)99 year: 1992(1)1998的平衡面板的話,我們需要知道當轉為平衡面板後,每個id相對應的只有1998-1992+1=7條記錄
drop if year >1998| year <1992
//(228 observations deleted)
bysort id :keep if _N ==7
//(436 observations deleted)
xtset id year
/* panel variable: id (strongly balanced)
time variable: year, 1992 to 1998
delta: 1 unit
*/
2.3 xtbalance的使用
xtbalance ,range(19921998)
/*
(228 observations deleted e to out of range)
(436 observations deleted e to discontinues)
*/
xtset id year
/*
panel variable: id (strongly balanced)
time variable: year, 1992 to 1998
delta: 1 unit
*/
3.非連續時間的非平衡面板的處理
本節將介紹有固定間隔時間的非平衡面板的處理
實際過程中,有許多資料庫並不是連續時間的面板,這可能是因為多種原因,比如,某個資料庫在調查數據時候,分別在1990、1992、1994每兩年調查一次的,其實,這種滿好的,因為有固定間隔,然而,當不是固定間隔的時候,處理數據的時候你可能需要多留意。
3.1 生成數據
先生成平衡面板(不是連續時間)
obs : 1000
id :1 (1) 99
year:1991 (2) 2009
/生成非連續時間的平衡面板/
clear
set obs 1000
gen id =int(_n/10.000001)
bysort id :gen year =1990+2*_n -1
xtset id year
/* panel variable: id (strongly balanced)
time variable: year, 1991 to 2009, but with gaps
delta: 1 unit
*/
xtset id year,delta(2)
/*
panel variable: id (strongly balanced)
time variable: year, 1991 to 2009
delta: 2 units
*/
tsset id year,delta(2)
/*
panel variable: id (strongly balanced)
time variable: year, 1991 to 2009
delta: 2 units
*/
tab year
/*
year | Freq. Percent Cum.
------------+-----------------------------------
1991 | 100 10.00 10.00
1993 | 100 10.00 20.00
1995 | 100 10.00 30.00
1997 | 100 10.00 40.00
1999 | 100 10.00 50.00
2001 | 100 10.00 60.00
2003 | 100 10.00 70.00
2005 | 100 10.00 80.00
2007 | 100 10.00 90.00
2009 | 100 10.00 100.00
------------+-----------------------------------
Total | 1,000 100.00
*/
/xtbalance的缺陷/
preserve
count
/*
1000
*/
xtbalance ,range(19932005)
/*
(300 observations deleted e to out of range)
(700 observations deleted e to discontinues)
*/
count
/*
0
*/
restore
注意:
1.xtset id year與tsset id year都可以同時設置面板
2.因為是非連續時間的平衡面板,所以xtset id year命令會提示說你的數據strongly balanced但是時間有gap,如果你的面板time variable是有固定間隔的,那麼你可以在xtset id year,delta()的delta()中設置。
3.通過上述xtbalance命令,我們可以看到,我們的非連續時間的平衡面板用xtbalance被清光了23333
再通過隨機刪除部分樣本,使其成為非平衡面板:
drop if runiform()<0.2
/*
(226 observations deleted)
*/
xtset id year,delta(2)
/*
panel variable: id (unbalanced)
time variable: year, 1991 to 2009, but with gaps
delta: 2 units
*/
3.2 處理成平衡面板
我們所需要的樣本時間段為1993( 2 ) 2005:
先查看一下數據:
/*
year | Freq. Percent Cum.
------------+-----------------------------------
1991 | 73 9.43 9.43
1993 | 76 9.82 19.25
1995 | 78 10.08 29.33
1997 | 82 10.59 39.92
1999 | 75 9.69 49.61
2001 | 85 10.98 60.59
2003 | 77 9.95 70.54
2005 | 73 9.43 79.97
2007 | 75 9.69 89.66
2009 | 80 10.34 100.00
------------+-----------------------------------
Total | 774 100.00
*/
我們所需要的是1993(2)2005的時間段的話,每個id在1993(2)2005時間段內的樣本數應該是1+(2005-1993)/2 = 7,所以,我們的操作流程就是:
1.先只保留1993-2005年的所有樣本,不在時間段內的刪除掉;
2.計算每個id的樣本數,只包括樣本數為7的。
drop if year>2005| year <1993
/*(228 observations deleted)*/
bysort id :drop if _N !=7
/*(441 observations deleted)*/
xtset id year,delta(2)
/*
panel variable: id (strongly balanced)
time variable: year, 1993 to 2005
delta: 2 units
*/
3.3 使用 xtbalance
這種情況下,通過對數據進行部分處理,也是可以使用xtbalance的。這個處理主要是將非連續的時間轉為連續的時間。
xtset id year,delta(2)
/*
panel variable: id (unbalanced)
time variable: year, 1991 to 2009, but with gaps
delta: 2 units
*/
sum year
gen new_year =1+(year - r(min))/2
那麼1993年在new_year中就是2,而2005年就是8 ,然後用新的時間來設置面板,再使用xtbalance,range(2 8)就OK了
xtset id new_year
/*
panel variable: id (unbalanced)
time variable: new_year, 1 to 10, but with gaps
delta: 1 unit
*/
xtbalance,range(28)
/*
(228 observations deleted e to out of range)
(441 observations deleted e to discontinues)
*/
xtset id year,delta(2)
/*
panel variable: id (strongly balanced)
time variable: year, 1993 to 2005
delta: 2 units
*/
注意:除了用gen new_year = 1 + (year - r(min))/2生成新的連續變數外,你還可以通過別的方法來實現,比如說,先將year變數destring成文本變數,然後有encode將其變為數值型也是可以的,這個還加了值標簽的。
4.非平衡面板非連續時間也沒有固定間隔
實際上,本質都一樣
❷ 求助:stata時間序列數據缺失值的處理
用xtbalance命令平衡一下。再回歸。否則,你缺失的數據只有補齊,如果不能補齊,當然只有平衡一下了。
❸ 寫完xtbalance代碼出現varlist not allowed,為什麼怎麼解決
欄位長度太小的原因啊 試試 控制面版找到BDE ADMINISTRATOR 單擊打開 先不要管裡面是什麼啦,按ctrl+N 彈出個對話框 如果是STANDARD 直接點OK,然後在左邊找到你創建的STANDARD(左邊顯示的是STANDARD1)改名字為HeroDB,然後點下他看右邊攔
❹ 寫完xtbalance代碼出現varlist not allowed,為什麼怎麼解決
應有逗號吧,在xtbalance和range之間。
❺ stata怎麼刪除缺失值
xtbalance命令平衡一下。再回歸。否則,你缺失的數據只有補齊,如果不能補齊,當然只有平衡一下了。
❻ 用STATA可以怎樣把面板數據中不平衡的部分找出來並且刪掉
這個問題我已答了幾次了,呵呵,看來這個命令還很有用啊。
h xtbalance
打開的頁面中點第一個網址鏈接,然後安裝。
命令格式:
xtbalance, range(numlist) [ miss(varlist) ]
選項:
range(numlist) specifies sample range to be transfored. numlist must be two integers and specified in ascending order.
miss(varlist) forces to drop the observations if any one of the variable in varlist has missing value
❼ 怎樣在stata上安裝 xtbalance
可以用下面命令:
ssc install xtbalance