Работата е там, че имам широк набор от данни с липсващи стойности и променливата на отговора е двоична, ДА ИЛИ НЕ за отговора. Трябва да го оценя чрез смесен логически модел, така че първо приписвам данните чрез пакет с мишки. След това прехвърлете данните в клас mlogit.data, направете оценка от gmnl. Резултатът от приблизителните стойности винаги е почти същият като първоначалните стойности... Това изглежда е резултат от градиента, който е близо до 0, така че изобщо няма оптимизация.
Използвам други по-прости данни от домашна работа (така че не е проблемът в данните според мен), за да проверя как върви. Странното е, че изтривам някои стойности от него, правя импутация, оценка, същия резултат, което означава, че може да има нещо нередно в импутацията? Но използването на оригиналния набор от данни без липсващи стойности дава същия резултат. В този случай просто чета данни, прехвърлям ги в клас mlogit, правя оценка, всичко чрез вградени функции в R. Какво може да не е наред? Сега съм напълно объркан и отчаян.
Има ли някой да ми помогне по въпроса? Оценявам всяка помощ и дискусия.
Простите данни изглеждат така: липсващите
Кодът е:
# use data having missing values
data1 <- read.table("train_Titanic.csv", sep = ",", header = T)
data1$Pclass <- as.factor(data1$Pclass)
data1$Male <- as.logical(data1$Male)
data1$SibSp <- as.factor(data1$SibSp)
data1$Parch <- as.factor(data1$Parch)
part <- data1[,3:8]
imputed <- mice(part,m=7,maxit = 2)
part2 <- complete(imputed,1)
data_imputed <- cbind(data1[,1:2],part2)
data_imputed <- na.exclude(data_imputed) # drop the data without response
reg_missing <- mlogit.data(data_imputed,choice = "Survived",shape = "wide",id.var = "PassengerId")
model_missing <- gmnl(Survived ~ Pclass+Male+SibSp+Parch+Age+Fare
| 1,
data = reg_missing,
model = "mixl",
reflevel = 2,
haltons = NA,
R = 150,
panel = TRUE,
print.init = TRUE,
print.level = 2,
ranp = c(Age = "n"),
correlation = FALSE,
iterlim = 500,
method = "bhhh",)
# use the original data having no missing values
data2 <- read.table("train_Titanic(1).csv", sep = ",", header = T) # Load whole data
reg_nomissing <- mlogit.data(data2,choice = "Survived",shape = "wide",id.var = "PassengerId")
model_nomissing <- gmnl(Survived ~ Pclass+Male+SibSp+Parch+Age+Fare
| 1,
data = reg_nomissing,
model = "mixl",
reflevel = 2,
haltons = NA,
R = 150,
panel = TRUE,
print.init = TRUE,
print.level = 2,
ranp = c(Age = "n"),
correlation = FALSE,
iterlim = 500,
method = "bhhh")
Резултатът за model_nomissing е (първият е подобен):
Starting Values:
0:(intercept) Pclass Male SibSp Parch Fare Age sd.Age
0.37776251 -0.03504190 -0.01583640 -0.01261044 -0.01048478 -0.74403561 -0.49059713 0.10000000
Estimating MIXL model
----- Initial parameters: -----
fcn value: -405.3734
parameter initial gradient free
0:(intercept) 0.37776251 4.710893e-11 1
Pclass -0.03504190 2.170486e-14 1
Male -0.01583640 4.385381e-15 1
SibSp -0.01261044 5.162537e-15 1
Parch -0.01048478 5.884182e-15 1
Fare -0.74403561 5.500045e-13 1
Age -0.49059713 1.878497e-13 1
sd.Age 0.10000000 -6.589781e-16 1
Condition number of the (active) hessian: 2.489843e+32
-----Iteration 1 -----
--------------
gradient close to zero
1 iterations
estimate: 0.3777625 -0.0350419 -0.0158364 -0.01261044 -0.01048478 -0.7440356 -0.4905971 0.1
Function value: -405.3734
Благодаря ви, че прочетохте.