Diferença entre coeficientes de regressão linear entre Python e R

Estou tentando executar uma regressão linear em Python que eu já fiz no R para encontrar variáveis com coeficientes 0. A questão que eu estou enfrentando é que a regressão linear em R retorna NAs para colunas com baixa variação, enquanto a regressão de aprendizado do scikit retorna os coeficientes. No código R, localizo e salvo essas variáveis salvando as variáveis com NAs como saída da regressão linear, mas não consigo descobrir uma maneira de imitar esse comportamento em python. O código que estou usando pode ser encontrado abaixo.

Código R:

a <- c(23, 45, 546, 42, 68, 15, 47)
b <- c(1, 2, 4, 6, 34, 2, 8)
c <- c(22, 33, 44, 55, 66, 77, 88)
d <- c(1, 1, 1, 1, 1, 1, 1)
e <- c(1, 1, 1, 1, 1, 1, 1.1)
f <- c(1, 1, 1, 1, 1, 1, 1.01)
g <- c(1, 1, 1, 1, 1, 1, 1.001)

df <- data.frame(a, b, c, d, e, f, g)
var_list = c('b', 'c', 'd', 'e', 'f', 'g')

target <- temp_dsin.df$a
reg_data <- cbind(target, df[, var_list])


if (nrow(reg_data) < length(var_list)){
  message(paste0('    WARNING: Data set is rank deficient. Result may be doubtful'))
}
reg_model <- lm(target ~ ., data = reg_data)

print(reg_model$coefficients)

#store the independent variables with 0 coefficients
zero_coef_IndepVars.v <- names(which(is.na(reg_model$coefficients)))

print(zero_coef_IndepVars.v)

Código Python:

import pandas as pd
from sklearn import linear_model

a = [23, 45, 546, 42, 68, 15, 47]
b = [1, 2, 4, 6, 34, 2, 8]
c = [22, 33, 44, 55, 66, 77, 88]
d = [1, 1, 1, 1, 1, 1, 1]
e = [1, 1, 1, 1, 1, 1, 1.1]
q = [1, 1, 1, 1, 1, 1, 1.01]
f = [1, 1, 1, 1, 1, 1, 1.001]


df = pd.DataFrame({'a': a,
                             'b': b,
                             'c': c,
                             'd': d,
                             'e': e,
                             'f': q,
                             'g': f})


var_list = ['b', 'c', 'd', 'e', 'f', 'g']

# build linear regression model and test for linear combination
target = df['a']
reg_data = pd.DataFrame()
reg_data['a'] = target
train_cols = df.loc[:,df.columns.str.lower().isin(var_list)]


if reg_data.shape[0] < len(var_list):
    print('    WARNING: Data set is rank deficient. Result may be doubtful')

# Create linear regression object
reg_model = linear_model.LinearRegression()

# Train the model using the training sets
reg_model.fit(train_cols , reg_data['a'])

print(reg_model.coef_)

Saída de R:

(Intercept)           b           c           d           e           f           g 
 537.555988   -0.669253   -1.054719          NA -356.715149          NA          NA 

> print(zero_coef_IndepVars.v)
[1] "d" "f" "g"

Saída do Python:

           b             c   d               e              f            g
[-0.66925301   -1.05471932   0.   -353.1483504   -35.31483504   -3.5314835]

Como você pode ver, os valores para as colunas 'b', 'c' e 'e' são próximos, mas muito diferentes para 'd', 'f' e 'g'. Para este exemplo de regressão, eu gostaria de retornar ['d', 'f', 'g'], pois suas saídas são NA de R. O problema é que a regressão linear sklearn retorna 0 para col 'd', enquanto retorna -35,31 para a col 'f' e -3,531 para a col 'g'.

Alguém sabe como R decide se deve retornar NA ou um valor / como implementar esse comportamento na versão Python? Saber de onde provêm as diferenças provavelmente me ajudará a implementar o comportamento R em python. Preciso dos resultados do script python para corresponder exatamente às saídas R.

questionAnswers(2)

yourAnswerToTheQuestion