在回归中,我试图为单位特定的时间趋势建模,但是我一直遇到困难。
在R
中,当我估算具有像lm(y~x+factor(unit)+factor(time))
这样的单位和年份固定效应的模型时,我得到的是完全正常的结果。但是,当我尝试执行lm(y~x+factor(unit)*factor(year))
时,由于产生了NA's
,我遇到了麻烦。
使用一些模拟数据来说明:
# Unit of analysis are countries
country<-c(rep("Isthmus",10),rep("Nambutu",10),rep("San Monique",10))
ccode<-c(rep(1,10),rep(2,10),rep(3,10))
year <- c(rep(2000:2009,3)) # Time
x1<-rnorm(30)*ccode
x2<-runif(30)
y<-0.5*x1-0.3*x2+rnorm(30) # Outcome variable
df=data.frame(country,ccode,year,y,x1,x2)
使用固定效应分别针对单位和时间,国家/地区和年份估算模型:
m0<-lm(y~x1+x2+factor(ccode)+factor(year),df);summary(m0)
# Part of the regression output:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.92780 0.68231 -1.360 0.1928
x1 0.59290 0.10058 5.895 0.0000226 ***
x2 -0.36457 0.96036 -0.380 0.7092
factor(ccode)2 0.95383 0.48675 1.960 0.0677 .
factor(ccode)3 0.46050 0.46475 0.991 0.3365
factor(year)2001 0.15222 0.87295 0.174 0.8638
没问题现在,我使用特定于单位的时间趋势来估算模型:
m1<-lm(y~x1+x2+factor(year)*factor(ccode),df);summary(m1)
# Part of the regression output:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.3408 NA NA NA
x1 3.3104 NA NA NA
x2 0.5239 NA NA NA
factor(ccode)2 -2.0544 NA NA NA
factor(ccode)3 -12.2971 NA NA NA
factor(year)2001:factor(ccode)1 -3.4409 NA NA NA
factor(year)2002:factor(ccode)1 -0.6348 NA NA NA
在这种特殊情况下,
NA's
似乎是模型中变量过多的结果,因为没有剩余自由度。使用larger dataset时,也会发生相同的问题。我不完全确定这里出了什么问题。我认为这与我使用factor
建模单位特定时间趋势的方式有关,但到目前为止,我还无法解决它。有谁知道如何正确执行此操作?
欢迎任何建议。
最佳答案
您正在尝试估算比数据更多的参数,即n < p
。在示例数据集中,您有
R> nrow(df)
[1] 30
数据点,并正在尝试估算30个参数。正如Ben所指出的,您估计每年会有不同的参数。如果要假设线性趋势,则只需
lm(y ~ x1 + factor(ccode)*time, data=df)
或包含二次趋势
lm(y ~ x1 + factor(ccode)*I(time^2), data=df)
关于r - R-单位特定时间趋势回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24243666/