Я что-то упустил?Являются ли веса в пакете truncreg сломанным?
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 $ сконструирован так, чтобы сделать их идентичными. – Adrian
Еще одно примечание: 'truncreg' не обрабатывает аргумент' weightights' как часть формулы, поэтому, даже если он использовал весы, вам нужно будет ввести его как 'df $ component' - я проверил это через 'debug' –