2017-02-10 59 views
0

編輯:一個工作示例被進一步向下設置後估計命令分類變量

ORIGINAL:阿交估計命令可以被用來預測因變量的值。這裏是一個例子,你可以在這裏輸入_b [_cons] + _b [x1] * 1 + _b [x2]來獲得Y的實際值。對於Stata上的大多數示例,這些值都是假的或連續的。如果我有一個難以手動變換成多個假人的分類變量(如52周)會怎麼樣?我是否可以保留所有分類變量,並通過告訴Stata選擇正確的值來執行後面的估算命令?

regress write female read 

     Source |  SS  df  MS    Number of obs =  200 
-------------+------------------------------   F( 2, 197) = 77.21 
     Model | 7856.32118  2 3928.16059   Prob > F  = 0.0000 
    Residual | 10022.5538 197 50.8759077   R-squared  = 0.4394 
-------------+------------------------------   Adj R-squared = 0.4337 
     Total | 17878.875 199 89.843593   Root MSE  = 7.1327 

------------------------------------------------------------------------------ 
     write |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
     female | 5.486894 1.014261  5.41 0.000  3.48669 7.487098 
     read | .5658869 .0493849 11.46 0.000  .468496 .6632778 
     _cons | 20.22837 2.713756  7.45 0.000  14.87663 25.58011 
------------------------------------------------------------------------------ 
and then ask 

gen _b[_cons] + _b[female]*1 + _b[read]*52 

display _b[_cons] + _b[female]*1 + _b[read]*52 
55.141383 

工作實施例:爲了說明我的觀點,這裏是包含一個分類變量(pack),一個連續可變(price)和一個二分指示(type)一個小的數據樣本。運行迴歸之後,我想運行一個後期估算命令(如predict或簡單的gen),它可以生成預測值。爲此,我目前發現的唯一Stata代碼只能使用連續變量和二元變量來預測y,但不能用於分類。您是否知道可以解決包含pack而不將pack轉換爲多個二進制變量的問題的代碼?

clear 
input units price pack type 
32 4 6 1 
2 20 18 1 
34 5 6 1 
32 8 6 0 
29 5 6 0 
5 10 12 0 
7 10 12 0 
1 10 18 0 

end 

reg units price type i.pack 
predict yhat 
*OR 
gen yhat=_b[_cons]+_b[_type]+....??pack?? 
+1

請注意,您的'generate'語句不是合法代碼。這是一個關於基礎知識的廣泛問題:「幫助估計」是一個開始的地方。 –

+0

嗨,尼克。我很難找到一個後期評估命令,選擇一個適當的分類值。它只適用於假人和連續變量。任何可以找到它的建議? – Olga

+1

對不起,我根本不懂。除了通過一系列指標之外,我不知道如何擁有分類預測指標。類似於你的更廣泛的話題性問題在Statalist上更好,但基於數據和代碼的精確示例更有可能在任何論壇中獲得良好答案。 –

回答

2

這是不是立即明確你的意思是「正確」的價值。 predict使用當前數據中的任何值,並將其乘以相應的係數(假設您使用因子變量表示法)。

然而,margins有一個半記錄的generate()選項,可以給你靈活選擇協變量值的個人預測。它可能會給你任何你心中的願望。

下面是一個使用你的數據爲例:

clear 
input units price pack type 
32 4 6 1 
2 20 18 1 
34 5 6 1 
32 8 6 0 
29 5 6 0 
5 10 12 0 
7 10 12 0 
1 10 18 0 
end 

reg units price type i.pack, coefl 
predict double yhat1 
margins, predict(xb) gen(yhat2) // match predict #1 
margins, predict(xb) gen(yhat3) at((asobserved) price type pack) // match predict #2 
gen double yhat4=_b[_cons] + _b[price]*price + _b[type]*type + _b[12.pack]*12.pack + _b[18.pack]*18.pack //match predict #3 
margins, predict(xb) gen(yhat5) at(price = 5 type=1 pack=6) // choose some values 
gen double yhat6=_b[_cons] + _b[price]*5 + _b[type]*1 + _b[12.pack]*0 + _b[18.pack]*0 // yhat5 by hand 
list yhat*, clean noobs 

對於第一種方法的預測都是相同的;第五和第六的將是不同於前四和所有完全相同,因爲我們是在特定值固定所有的協變量:

. list yhat*, clean noobs 

     yhat1  yhat21  yhat31  yhat4  yhat51  yhat6 
    32.773585 32.773585 32.773585 32.773585 32.764151 32.764151 
    2.4622642 2.4622642 2.4622642 2.4622642 32.764151 32.764151 
    32.764151 32.764151 32.764151 32.764151 32.764151 32.764151 
    30.716981 30.716981 30.716981 30.716981 32.764151 32.764151 
    30.745283 30.745283 30.745283 30.745283 32.764151 32.764151 
      6   6   6   6 32.764151 32.764151 
      6   6   6   6 32.764151 32.764151 
    .53773585 .53773585 .53773585 .53773585 32.764151 32.764151 

help margins generatehelp undocumented瞭解更多信息。

+0

是的,謝謝,這大概是我在找的東西。 – Olga

+1

@Olga你可以在()選項中混合不同的邊距,還有很多其他的我沒有進入這裏。 –

+0

Dimitriy,我發現了一個額外的代碼片段,可以與'margin'一起使用,其中您可以將特定變量設置爲零,如'(x1 = 0 x2 = 0 x3 = 0)'。 – Olga