Penalized multinomial regression with missing values I would like to fit some models on a dataset where I have a lot of missing values. I am especially interested in comparing models fit with and without imputed values, because the dataset has so many missing values (>50%) that it seems unlikely to me that any imputation procedure is going to yield sensible results. 
I’m looking for a software package, ideally in R/Python, that could do all three of the following:


*

*penalized regression (l1/l2/ElasticNet loss);

*multinomial, linear, and logistic models;

*handles missing values


In base R I can fit simple models using na.exclude. But neither scikit-learn nor glmnet can handle missing values. I know some methods, especially nearest-neighbor or decision tree-based methods, can naturally handle missing values, e.g. by adding another type of split or by omitting missing values in pairwise comparisons. Is there a package that can do all three of the above or is it just not possible? 
 A: One option to consider could be to do multiple imputation (MI) that would reflect the uncertainty around the imputed values. The Amelia R package can handle all the types of variables you mention. After creating $M$ imputations (let's say $M=100$), you then do an analysis (e.g. using glmnet) for each imputed dataset and then you aggregate the results (e.g. if you are interested in the value of a regression coefficient, you do so using Rubin's rule). That's quite a generic approach that can be applied in many settings (without knowing more about you example, it's hard to comment on more complex approaches like hierarchical/mixed effects models that might handle some types of missingness implicitly).
Note that doing an imputation - such as MI - that fully reflects the added uncertainty is likely preferrable to just deleting missing values. Deleting them makes incredibly strong assumptions ("missing completely at random" or "MCAR"), while imputing them makes less strong assumptions (a default MI assumes "missing at random, but you can adapt them to specific missing not at random scenarios you want to deal with). If how you handle missing data meaningfully affects the conclusions of your analysis, then I'd argue that you have a setting where assuming MCAR is unlikely to be acceptable. Of course, details of a specific setting may make some particular assumptions more or less plausible.
A: You seem to ask how to use just one package in either Python or in R to do all the three tasks. This can be done in a "pipeline", in which you need to do some "pre-processing" to handle the missing values before you fit the model. 
You can get the model fitting the training data in either Python or R.
In Python, you can use "sklearn":
from sklearn.preprocessing import Imputer
from sklearn.linear_model import LogisticRegression
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
mlg = LogisticRegression(multi_class='multinomial', penalty='l2')
model = Pipeline([('imputation', imp), ('multilogit', mlg)])

In R, you can use "caret":
library(caret)
model <- train(
x = X_var, y = y_var,
trControl = trainControl(method="cv", number=10, repeats=3, classProbs= TRUE,
summaryFunction = multiClassSummary)
      method = "multinom",  # this specifies 'Penalized Multinomial Regression'
      preProcess = "knnImpute"
    )

As you say, xgboost (gradient boosted trees) is also robust to missing values. You can use the "xgboost" module/library in either Python or R to give it a try.
