Introduction

Le revenu non agricole fait référence aux revenus générés par des activités économiques autres que l’agriculture. Il englobe généralement les revenus provenant de sources telles que l’emploi salarié dans les secteurs industriel et des services, les revenus d’entreprise, les revenus de location immobilière, les revenus de propriété intellectuelle, les pensions et les transferts sociaux, etc.

Lors du recensement de 2021, il a été collecté des données des entreprises non agricoles à travers le Sénégal, données regroupées dans les bases (a) et (b). Dans le but de déduire le revenu non agricole sénégalais, l’on doit faire usage de ces bases. Il est donc nécessaire de procéder à l’apurement des deux bases pour obtenir des résultats fiables.

L’objectif de ce document est d’expliquer le procédé par lequel ces bases ont été apurées.

Compréhension des bases de données

Pour le calcul du revenu non agricole, la section 10 est celle dont l’usage a été fait.

En effet, cette section est composé de deux bases (a) et (b). La base (a) est une base ménage et la section (b) est une base entreprise. Dans la base (a), les variables révèlent quant à la présence d’une entreprise non-agricole dans le ménage en répondant à des questions par Oui(1) ou Non(2). La base (b) est quant à elle, rassemble les informations sur les entreprises présentes dans le ménage.

Choix des variables d’intérêts

Dans la base (a), toutes les variables sont d’intérêt car renseignant sur la présence d’une entreprise.

Dans la base (b), le but de ce document étant le calcul des revenu non agricole, les variables d’intérêts sont logiquement les variables qui retracent le compte financier de l’entreprise. Cela implique les variables s10q46 à s10q57. En plus de ceux là, à des fins de statistiques descriptives, certaines variables ont été ajoutées, les variables qui donnent un aperçu de l’activité de l’entreprise, de la section, de la branche à laquelle elle appartient mais également les variables qui donnent la situation formelle de l’entreprise c’est à dire la possesion de numéro de téléphone, la forme légale de l’entreprise, la source de financement, la possession d’une comptabilité etc.

Cohérence des bases

Les bases, prises individuellement, sont cohérentes. Cependant, il peut y avoir incohérence entre les deux bases si le ménage renseigne n’avoir aucune entreprise dans la base (a) mais rempli la base (b). Il n’y a cependant pas de ces cas dans la section 10. Les bases sont donc tout à fait cohérentes entre elles.

Apurement de la base

En premier lieu, il est important de remarquer que tous les ménages qui ont au moins une entreprise ont bien répondu aux questions dans la base (b) sans valeurs manquantes. Les ménages où il n’y a pas d’entreprises, n’ont répondu à aucune question dans le base (b). Les valeurs manquantes, pour ces ménages, seront remplacés par des 0 pour les variables d’intérêt principal c’est à dire les variables s10q46 à s10q57 (pour pouvoir déduire le revenu agricole par ménage) et par des cases vides pour les autres variables étant donné que ce sont des variables pour lesquelles les techniques usuelles de gestion des NA ne sont pas fonctionnelles car étant ponctuelles (par exemple le code de section qui prend des valeurs spécifiques). Les ménages qui n’ont pas rempli la based (a) n’ont pas rempli la base (b) non plus.

Par conséquent, les ménages qui n’ont pas rempli la base (a) seuls seront retirés. Il est d’abord nécessaire de fusionner les deux bases avant d’effectuer l’opération.La base (b) est la base de référence pour la fusion.

Dans la base (b), il y a 3382 entreprises et dans la base (a), 2485 ménages. Il y a 5 ménages qui n’ont rempli ni la base (a) ni la base (b). Et parmi ceux qui ont rempli, 961 n’ont pas d’entreprises. La base apurée fait donc un total de 3377 répondants dont 961 n’ont pas d’entreprises.

Script

#Preparation des donnèes
library(haven)
library(dplyr)
library(psych)
path = ('C:/Users/user/Desktop/mtn/ENSAE/ISE/ISEP2/SEMESTRE 2/Informatique/R_2023/Projet_final/Ressources')
path_10a = paste0(path, '/s10a_me_SEN_2021.dta')
path_10b = paste0(path, '/s10b_me_SEN_2021.dta')
data_10a = read_dta(path_10a)
data_10b = read_dta(path_10b)



## Starting with the 10b base
data_10b_subset = subset(data_10b, select = c('interview__key', 's10q12a', 's10q16', 's10q17a',
                                              's10q17b', 's10q17c','s10q23', 's10q28', 's10q29', 's10q30', 's10q31', 's10q32',
                                              's10q33', 's10q34', 's10q46', 's10q47', 's10q48', 's10q49', 's10q50', 's10q51',
                                              's10q52', 's10q53', 's10q54', 's10q55', 's10q56', 's10q57'))
## Renaming the variables
new_names_10b = c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 'Activity_Code', 'Activity_local',
                  'Phone_number', 'Accounting', 'Taxation_phone', 'RC_Registered', 'Person_registered', 'Legal_form', 'Finance_source', 'Sold_product', 'Buy_product', 'Profit_product',
                  'Raw_materials_buy', 'Profit_services', 'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')

colnames(data_10b_subset) = new_names_10b
View(data_10b_subset)

variables_avant_sold_product = c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 
                                 'Activity_Code', 'Activity_local', 'Phone_number', 'Accounting', 
                                 'Taxation_phone', 'RC_Registered', 'Person_registered', 'Legal_form', 'Finance_source')
variables_apres_sold_product = c('Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 
                                 'Profit_services', 'Other_CI', 'Home_spending', 'Services_fees', 
                                 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')

# Remplacer les valeurs manquantes par des chaînes vides pour les variables avant 'Sold_product'
data_10b_subset = data_10b_subset %>% 
  mutate(across(all_of(variables_avant_sold_product), ~ ifelse(is.na(.), "", as.character(.))))

# Remplacer les valeurs manquantes par des zéros pour les variables après 'Sold_product'
data_10b_subset = data_10b_subset %>% 
  mutate(across(all_of(variables_apres_sold_product), ~ ifelse(is.na(.), 0, as.numeric(.))))


## Now for the 10a base

data_10a_subset = subset(data_10a, select = c('interview__key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                                              's10q06', 's10q07', 's10q08', 's10q09', 's10q10'))
new_names_10a = c('interview_key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                  's10q06', 's10q07', 's10q08', 's10q09', 's10q10')
colnames(data_10a_subset) = new_names_10a
View(data_10a_subset)

## Merging the two dataset

data_10 <- merge(data_10a_subset, data_10b_subset, by = 'interview_key', all.y = TRUE)


# Traitement des variables

## Nombre de na

na_count = colSums(is.na(data_10))
print(na_count)
##     interview_key            s10q01            s10q02            s10q03 
##                 0                 5                 5                 5 
##            s10q04            s10q05            s10q06            s10q07 
##                 5                 5                 5                 5 
##            s10q08            s10q09            s10q10          Activity 
##                 5                 5                 5                 0 
##           Product      Section_Code       Branch_Code     Activity_Code 
##                 0                 0                 0                 0 
##    Activity_local      Phone_number        Accounting    Taxation_phone 
##                 0                 0                 0                 0 
##     RC_Registered Person_registered        Legal_form    Finance_source 
##                 0                 0                 0                 0 
##      Sold_product       Buy_product    Profit_product Raw_materials_buy 
##                 0                 0                 0                 0 
##   Profit_services          Other_CI     Home_spending     Services_fees 
##                 0                 0                 0                 0 
##    Other_spending           Patente             Taxes        Admin_fees 
##                 0                 0                 0                 0
##Like we can see with the na_count, there is no NA for the data_10b previous base. But we have some NA values in the 10a base.
## Therefore, we are going to drop these NA values from the data_10 base so that we only got persons who filled the form in the database.

data_10 <- data_10[complete.cases(data_10), ]
View(data_10) ## We now have 3377 lines in our chart. 5 less lines than the previous base. We dropped the NA values
## Let's check the number of NA values

na_count = colSums(is.na(data_10))
print(na_count) ## It's OK
##     interview_key            s10q01            s10q02            s10q03 
##                 0                 0                 0                 0 
##            s10q04            s10q05            s10q06            s10q07 
##                 0                 0                 0                 0 
##            s10q08            s10q09            s10q10          Activity 
##                 0                 0                 0                 0 
##           Product      Section_Code       Branch_Code     Activity_Code 
##                 0                 0                 0                 0 
##    Activity_local      Phone_number        Accounting    Taxation_phone 
##                 0                 0                 0                 0 
##     RC_Registered Person_registered        Legal_form    Finance_source 
##                 0                 0                 0                 0 
##      Sold_product       Buy_product    Profit_product Raw_materials_buy 
##                 0                 0                 0                 0 
##   Profit_services          Other_CI     Home_spending     Services_fees 
##                 0                 0                 0                 0 
##    Other_spending           Patente             Taxes        Admin_fees 
##                 0                 0                 0                 0
## Verification of the coherence of the data.
## In this case, this work is about seeing if someone filled the 10b data base even though he answered 'No' to all the 10a question

i = 0
error_filling = list()
variables_data_10 = c('s10q02', 's10q03', 's10q04', 's10q05', 's10q06', 's10q07', 's10q08', 's10q09', 's10q10')

for (row in 1:nrow(data_10)) {
  if (all(data_10[row, variables_data_10] == 2) && all(data_10[row, variables_apres_sold_product] != 0)) {
    i = i + 1
    error_filling = c(error_filling, row)
  }
}

print(i)
## [1] 0
print(error_filling)
## list()
### On voit donc qu'il n'existe pas d'éléments ayant rempli 'Non' à toutes les questions de 10a mais qui a rempli 10b

## Nombre de répondant n'ayant pas d'entreprises

count = 0
if (sum(apply(data_10[, variables_data_10], 1, function(x) all(x == 2))) > 0) {
  count = sum(apply(data_10[, variables_data_10], 1, function(x) all(x == 2)))
}
print(count)
## [1] 961
### Il y a donc 961 répondants qui n'ont pas d'entreprises.

## De ce fait la base est tout à fait cohérente.

Conclusion

En définitive, la base compte 3377 lignes qui seront analysés par des analyses univariées, bivariées afin de déduire le niveau de revenu non agricole du Sénégal.