Использование пакета Simex для исправления ошибки измерения - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь использовать MCSIMEX-алгоритм для моделей ошибок измерения в пакете Simex R для исправления ошибки в скрытом назначении класса.Существует 8 скрытых классов, и я использовал средние вероятности скрытого класса для наиболее вероятного членства в классе, чтобы создать матрицу ошибок для симуляции классификационной переменной.Я реализовал анализ, используя соответствующие R-коды из этого [примера] [1].Когда я запустил анализ, я получил следующее сообщение об ошибке: «Ошибка в mcsimex (naive, mc.matrix = Data600, SIMEXvariable =« Class »): mc.matrix может содержать отрицательные значения для показателей меньше 1». Может кто-нибудь помочь сэто? Я включил некоторые фальшивые данные, чтобы дать вам представление о том, чего я пытаюсь достичь.

## Create Data set 
Y = sample(x=30:100, size = 500, replace= TRUE) ## Outcome variable
Class = sample(x=1:8, size=500, replace=TRUE) #Class membership variable
X2 = sample(x=0:100, size=500, replace=TRUE)## Control variable 
Data=cbind(Class, X2, Y)

Data2=as.data.frame(Data)

## Build matrix containing probabilities of most likely class membership
p6 <- matrix(c(0.852086,    0.002081,   0.145126,   0.000000,   0.000000,   0.000706,   0.000000,   0.000002,
               0.016235,    0.983277,   0.000453,   0.000034,   0.000000,   0.000001,   0.000000,   0.000000,
               0.001904,    0.000025,   0.992375,   0.000000,   0.000000,   0.005629,   0.000004,   0.000063,
               0.000010,    0.000001,   0.073121,   0.926070,   0.000002,   0.000001,   0.000793,   0.000001,
               0.000004,    0.000454,   0.005430,   0.025924,   0.926010,   0.040839,   0.000002,   0.001338,
               0.007274,    0.000003,   0.000294,   0.004842,   0.000000,   0.987587,   0.000000,   0.000000,
               0.000839,    0.325729,   0.270084,   0.001621,   0.000001,   0.000115,   0.401590,   0.000022,
               0.000000,    0.000000,   0.000750,   0.000000,   0.000000,   0.000013,   0.000000,   0.999237), 
             nrow = 8, byrow=FALSE)

check.mc.matrix(list(build.mc.matrix(p6)))


dimnames(p6) <- list(levels(Data2$Class),levels(Data2$Class))

## Check Data Structure 
str(Data2)

## Specify Class Variable as factor and other variables as numeric 
Data2$Class=as.factor(Data2$Class)

Data2$X2= as.numeric(Data2$X2)
Data2$Y= as.numeric(Data2$Y)

##Estimate Naive model 
naive=glm(Y ~., family=gaussian, data=Data2, x=T, y=T)

summary(naive)



##Model accounting for classification error
mod.Dis <- mcsimex(naive, mc.matrix = p6, SIMEXvariable = "Class")


  [1]: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.503.9789&rep=rep1&type=pdf

1 Ответ

0 голосов
/ 15 марта 2019

извините за задержку.Проблема заключается в вашей матрице:

вы используете build.mc.matrix() для проверки вашей матрицы, но вы используете "наивную" mc-матрицу для оценки.

Если вы строите исправленную mc-матрицувсе проходит гладко:

new_mc_matrix <- build.mc.matrix(p6)
dimnames(new_mc_matrix) <- list(levels(Data2$Class),levels(Data2$Class))

mod.Dis <- mcsimex(naive, mc.matrix = new_mc_matrix, SIMEXvariable = "Class")

С уважением

Вольфганг

...