【发布时间】:2014-01-05 20:17:17
【问题描述】:
我错过了什么吗?
library(truncreg)
n <- 10^4
lambda <- 0.3 # Proba y is taken from component 0
df <- data.frame(x=rnorm(n))
df$y0 <- pmax(rnorm(n, 10 + df$x, 5), 0)
df$y1 <- pmax(rnorm(n, 2 - 5*df$x, 2), 0)
df$component <- ifelse(runif(n) < lambda, 0, 1)
df$y <- ifelse(df$component == 0, df$y0, df$y1) # Mixture of censored regressions
plot(df$x, df$y)
model <- truncreg(y ~ x, data=df) # All data
model.w <- truncreg(y ~ x, data=df, weights=component) # Only component 1, using weights
model.subset <- truncreg(y ~ x, data=subset(df, component == 1)) # Only component 1, using subset
identical(coefficients(model), coefficients(model.w)) # True -- I expected this to be false
identical(coefficients(model.w), coefficients(model.subset)) # False -- I expected this to be true
## For comparison, here is the same using lm:
model <- lm(y ~ x, data=df)
model.w <- lm(y ~ x, data=df, weights=component)
model.subset <- lm(y ~ x, data=subset(df, component == 1))
identical(coefficients(model), coefficients(model.w)) # False as expected
identical(coefficients(model.w), coefficients(model.subset)) # True as expected
【问题讨论】:
-
我不知道为什么您希望组件数据的子集具有相同的系数。但至于权重是否“起作用”,我首先绘制拟合模型(所有模型),看看曲线是否具有明显不同的形状。如果不是,那么你的权重组就不够“戏剧化”。
-
@CarlWitthoft 我做了一些编辑——现在是否更清楚为什么我希望 model.w 和 model.subset 具有相同的系数(就像它们对 lm 一样)?构造变量 df$component 以使它们相同。
-
另一个注意事项:
truncreg不会将weights参数视为公式的一部分,因此即使它确实使用了权重,您也必须将其输入为df$component-- 我通过debug验证了这一点
标签: r truncation