so sánh các nhóm trong các biện pháp lặp lại mô hình FE, với thành phần lỗi lồng nhau, ước tính bằng cách sử dụng plm


8

Tôi đã ước tính một số biện pháp lặp lại các mô hình Hiệu ứng cố định, với thành phần lỗi lồng nhau, dựa trên các biến nhóm, tức là các mô hình không lồng nhau, sử dụng . Bây giờ tôi quan tâm đến

  1. kiểm tra xem các mô hình đầy đủ có khác nhau đáng kể hay không, tức là
    Ho:βFemmộttôie= =βMmộttôie
    trong đó là mô hình đầy đủ cho và là mô hình đầy đủ cho vàβFemmộttôieFemalesβMmộttôieMales
  2. sau đó kiểm tra các hệ số hồi quy được chọn giữa hai nhóm, tức là trong đó là hệ số hồi quy cho nữ at , và là hệ số hồi quy cho nam giới tại .
    Ho:βFemmộttôie==yemộtr1,5= =βMmộttôie==yemộtr1,5
    βFemmộttôie==yemộtr1,5year1.5βMmộttôie==yemộtr1,5year1.5

Tôi sẽ minh họa tình huống bằng cách sử dụng ví dụ làm việc dưới đây,

Đầu tiên, một số gói cần thiết,

# install.packages(c("plm","texreg","tidyverse","lmtest"), dependencies = TRUE)
library(plm); library(lmtest); require(tidyverse)

Thứ hai, chuẩn bị một số dữ liệu,

data(egsingle, package = "mlmRev")
dta <-  egsingle %>% mutate(Female = recode(female,.default = 0L,`Female` = 1L))

Thứ ba, tôi ước tính một bộ mô hình cho từng giới trong dữ liệu

MoSpc <- as.formula(math ~ Female + size + year)
dfMo = dta %>% group_by(female) %>%
    do(fitMo = plm(update(MoSpc, . ~ . -Female), 
       data = ., index = c("childid", "year", "schoolid"), model="within") )

Forth, hãy nhìn vào hai mô hình ước tính,

texreg::screenreg(dfMo[[2]], custom.model.names = paste0('FE: ', dfMo[[1]]))
#> ===================================
#>            FE: Female   FE: Male   
#> -----------------------------------
#> year-1.5      0.79 ***     0.88 ***
#>              (0.07)       (0.10)   
#> year-0.5      1.80 ***     1.88 ***
#>              (0.07)       (0.10)   
#> year0.5       2.51 ***     2.56 ***
#>              (0.08)       (0.10)   
#> year1.5       3.04 ***     3.17 ***
#>              (0.08)       (0.10)   
#> year2.5       3.84 ***     3.98 ***
#>              (0.08)       (0.10)   
#> -----------------------------------
#> R^2           0.77         0.79    
#> Adj. R^2      0.70         0.72    
#> Num. obs.  3545         3685       
#> ===================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05    #> 

Bây giờ, tôi muốn kiểm tra xem hai mô hình (OLS tuyến tính) này có khác nhau đáng kể không, xem điểm1 ở trên. Tôi đã xem qua SO và internet và một số gợi ý rằng tôi cần sử dụng plm::pFtest(), cũng đề xuất ở đây , điều mà tôi đã thử, nhưng tôi không bị thuyết phục. Tôi đã tưởng tượng một số thử nghiệm cho các mô hình không lồng nhau, thử nghiệm Cox có thể lmtest::coxtest, nhưng tôi không chắc chắn gì cả. Nếu ai đó ở đây có thể có thể giúp tôi.

Tôi đã thử

plm::pFtest(dfMo[[1,2]], dfMo[[2,2]])
# >
# > F test for individual effects
# >
# >data:  update(MoSpc, . ~ . - Female)
# >F = -0.30494, df1 = 113, df2 = 2693, p-value = 1
# >alternative hypothesis: significant effects

và,

lmtest::coxtest(dfMo[[1,2]], dfMo[[2,2]])
# > Cox test
# > 
# > Model 1: math ~ size + year
# > Model 2: math ~ size + year
# >                 Estimate Std. Error    z value Pr(>|z|)    
# > fitted(M1) ~ M2     0.32    1.66695     0.1898   0.8494    
# > fitted(M2) ~ M1 -1222.87    0.13616 -8981.1963   <2e-16 ***
# > ---
# > Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# > Warning messages:
# > 1: In lmtest::coxtest(dfMo[[1, 2]], dfMo[[2, 2]]) :
# >   models fitted on different subsets
# > 2: In lmtest::coxtest(dfMo[[1, 2]], dfMo[[2, 2]]) :
# >   different dependent variables specified

Thứ hai, tôi quan tâm để so sánh các hệ số hồi quy giữa hai nhóm. Nói, ước tính cho year1.53.04 có khác biệt đáng kể so với 3.17 không? Cf. điểm 2 ở trên.

Xin hỏi nếu bất kỳ điều nào ở trên không rõ ràng và tôi sẽ vui lòng giải thích. Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào!

Tôi nhận ra câu hỏi này là một chút lập trình như thế, nhưng ban đầu tôi đã đăng nó trong SO. Tuy nhiên, DWin đã rất tử tế khi chỉ ra rằng câu hỏi thuộc về CrossValidated và đã di chuyển nó ở đây.


@DWin, Cảm ơn. Tôi đã đăng nó trong SO vì trước đây tôi đã nhận được một số câu trả lời thực sự tốt về các loại mô hình này và plmgói, tại stackoverflow.com. Tôi sẽ chăm sóc nhiều hơn trong tương lai để gửi câu hỏi của tôi ở nơi thích hợp. Cảm ơn.
Eric Fail

2
Đừng nghĩ thử nghiệm F sẽ hoạt động ở đây, vì hai mô hình hiện tại của bạn (nữ và nam) không được lồng nhau. Tại sao không bao gồm chạy plm với các điều khoản tương tác giữa các biến nữ và biến giải thích, ví dụ plm(math ~ Female * (x1 + x2)). Để kiểm tra giả thuyết null đầu tiên, bạn chỉ cần chạy thử nghiệm F cho tất cả các hệ số liên quan đến Female:x1, Female:x2. Để kiểm tra null thứ hai, bạn chỉ cần kiểm tra tham số liên quan đến Female:year1.5.
semibruin

1
Cảm ơn bình luận của bạn. Tôi đồng ý, liên quan đến bài kiểm tra F không phù hợp ở đây. Tôi đánh giá cao đề xuất của bạn, nhưng tôi phải thực hiện điều này trong bối cảnh mà giải pháp tương tác có thể không khả thi. Tuy nhiên, nếu bạn có thời gian, tôi khuyên bạn nên đăng giải pháp của mình như một câu trả lời. Có lẽ nó sẽ truyền cảm hứng cho những người khác có vấn đề tương tự.
Eric Fail

1
Gần đây tôi cũng đã nói về vấn đề này, nhưng không thể giải quyết nó trong R. Tôi đã sử dụng Stata sau đó, nơi chúng ta có thể áp dụng suestđể xem liệu hai mô hình có khác nhau đáng kể hay không. Có một suest()chức năng xung quanh trong một gói cho R nhưng tôi nghi ngờ rằng nó giống nhau. Trong Stata suestcó liên quan đến "Ước tính dường như không liên quan". Lưu ý, đó sureglà một số khác nhau. Tôi cũng quan tâm đến một giải pháp R. Hy vọng rằng sẽ giúp bằng cách nào đó.
jay.sf

1
@jaySf, cảm ơn bạn đã đóng góp. Có lẽ chúng ta cần chuyển câu hỏi này trở lại stackoverflow.com để tìm hiểu làm thế nào điều này được thực hiện trong r . Tôi đã không sử dụng stata trong nhiều năm. Bạn có thể chỉ vào một số tài liệu? Cảm ơn.
Eric Fail

Câu trả lời:


3

FemaleβFemmộttôie= =βMmộttôieplmβFemmộttôie:yemộtr= =1,5= =βMmộttôie:yemộtr= =1,5year=1.5, giá trị p là 0,32.

library(plm)  # Use plm
library(car)  # Use F-test in command linearHypothesis
library(tidyverse)
data(egsingle, package = 'mlmRev')
dta <- egsingle %>% mutate(Female = recode(female, .default = 0L, `Female` = 1L))
plm1 <- plm(math ~ Female * (year), data = dta, index = c('childid', 'year', 'schoolid'), model = 'within')

# Output from `summary(plm1)` --- I deleted a few lines to save space.
# Coefficients:
#                 Estimate Std. Error t-value Pr(>|t|)    
# year-1.5          0.8842     0.1008    8.77   <2e-16 ***
# year-0.5          1.8821     0.1007   18.70   <2e-16 ***
# year0.5           2.5626     0.1011   25.36   <2e-16 ***
# year1.5           3.1680     0.1016   31.18   <2e-16 ***
# year2.5           3.9841     0.1022   38.98   <2e-16 ***
# Female:year-1.5  -0.0918     0.1248   -0.74     0.46    
# Female:year-0.5  -0.0773     0.1246   -0.62     0.53    
# Female:year0.5   -0.0517     0.1255   -0.41     0.68    
# Female:year1.5   -0.1265     0.1265   -1.00     0.32    
# Female:year2.5   -0.1465     0.1275   -1.15     0.25    
# ---

xnames <- names(coef(plm1)) # a vector of all independent variables' names in 'plm1'
# Use 'grepl' to construct a vector of logic value that is TRUE if the variable
# name starts with 'Female:' at the beginning. This is generic, to pick up
# every variable that starts with 'year' at the beginning, just write
# 'grepl('^year+', xnames)'.
picked <- grepl('^Female:+', xnames)
linearHypothesis(plm1, xnames[picked])

# Hypothesis:
# Female:year - 1.5 = 0
# Female:year - 0.5 = 0
# Female:year0.5 = 0
# Female:year1.5 = 0
# Female:year2.5 = 0
# 
# Model 1: restricted model
# Model 2: math ~ Female * (year)
# 
#   Res.Df Df Chisq Pr(>Chisq)
# 1   5504                    
# 2   5499  5  6.15       0.29

Rất thú vị. Tôi sẽ thử nó trên dữ liệu sản xuất của tôi. Cảm ơn. Bạn có thể đăng câu trả lời tương tự ở đây stackoverflow.com/questions/28334298/ và nhận tiền thưởng ở đó.
Eric Fail

Câu hỏi nhanh, bạn có nghĩ rằng có thể viết lại -c(1:5)khối theo cách nào đó làm cho mã chung hơn không? Tôi có các vectơ kích thước thay đổi đi vào và ra và một câu trả lời chung chung hơn cũng có thể có lợi cho người khác.
Eric Fail

@EricFail Tôi thay thế -c(1:5)bằng biểu thức thông thường. Nó là chung chung hơn bây giờ. Nói chung, bạn muốn sử dụng greplđể khớp các mẫu với sự có mặt của rất nhiều biến.
semibruin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.