Regression with log transformation of dependent variable that has negative values I am working with a dataset that contains:


*

*a dependent variable (DV) taking both positive and negative values

*a binary independent variable (IV). 


And I'm interested in the following specification:
$ ln(DV) = \beta\cdot IV + \epsilon $
The issue is that $ln(DV)$ is undefined where $DV \le 0$. 
I've read that a common workaround is to subtract the minimum value of $DV$ (a negative number) from all DV values to ensure all values of the $DV$ are positive. However, whilst this does not affect the statistical significance of $\beta$, it results in an estimate smaller than its true value (see illustration below). 
I'm wondering whether there is a standard procedure to adjust $\beta$ to reflect its true value. 
# Load packages 
library(tidyverse)
library(broom)
options(scipen = 9999999)

# Case where negative values are present. Estimated beta ~= .0057
    # Create Dataframe described above 
df1 <- 
  # Create DV
  data_frame(DV = rnorm(n = 1000000,10, 3)) %>% 
  # Create IV
  mutate(IV = row_number() %in%  sample(row_number(),max(row_number())/2,replace = F)) %>% 
  # Introduce effect of IV on DV
  mutate(DV =   DV + 0.01*abs(DV)*IV) %>%     
  mutate(DV =  DV + abs(min(DV- 1)))

   # Estimate beta 
lm(log(DV)~ IV,data = df1) %>% broom::tidy()
#> # A tibble: 2 x 5
#>   term        estimate std.error statistic  p.value
#>   <chr>          <dbl>     <dbl>     <dbl>    <dbl>
#> 1 (Intercept)  2.67     0.000306    8725.  0.      
#> 2 IVTRUE       0.00665  0.000433      15.4 2.60e-53


# Case where negative values are not present. Estimated beta ~= .01 
  # Create Dataframe described above 
df2 <- 
  # Create DV
  data_frame(DV = rnorm(n = 1000000,mean = 10,1.5)) %>% 
  # Create IV
  mutate(IV = row_number() %in%  sample(row_number(),max(row_number())/2,replace = F)) %>% 
  # Introduce effect of IV on DV
  mutate(DV =   DV + 0.01*DV*IV)

  # Estimate beta 
lm(log(DV)~ IV,data = df2) %>% broom::tidy()
#> # A tibble: 2 x 5
#>   term        estimate std.error statistic   p.value
#>   <chr>          <dbl>     <dbl>     <dbl>     <dbl>
#> 1 (Intercept)   2.29    0.000219   10475.  0.       
#> 2 IVTRUE        0.0101  0.000309      32.6 3.09e-233

Created on 2018-11-28 by the reprex package (v0.2.1)
 A: library(tidyverse)
library(broom)
options(scipen = 9999999)

df3 <- 
  # Create DV
  data_frame(DV = rnorm(n = 1000000,mean = 10,3)) %>% 
  # Create IV
  mutate(IV = row_number() %in%  sample(row_number(),max(row_number())/2,replace = F)) %>% 
  # Introduce effect of IV on DV
  mutate(DV =   DV + 0.01*DV*IV)


glm(DV~IV, family=gaussian(link="log"), data=df3,start = c(0,0) ) %>% 
  broom::tidy()
#> # A tibble: 2 x 5
#>   term        estimate std.error statistic  p.value
#>   <chr>          <dbl>     <dbl>     <dbl>    <dbl>
#> 1 (Intercept)  2.30     0.000426    5403.  0.      
#> 2 IVTRUE       0.00994  0.000600      16.6 1.21e-61

Created on 2018-12-01 by the reprex package (v0.2.1)
A: 
I'm taking the logarithm because I'm interested in estimating the effect of the independent variable on growth of the dependent variable.

Before you get to the issue with modelling and coding of the problem, I think you need to step back and think more about the coherence of the underlying measurement you are asking for.  The reason you are getting problems here is that measuring growth with a real number breaks down when you have negative values.  To see this, note that we generally measure growth either by a growth rate:
$$R_t = \frac{X_{t} - X_{t-1}}{X_{t-1}},$$
or the corresponding "force" of growth:
$$\delta_t = \ln(X_{t}) - \ln(X_{t-1}),$$
where the underlying series of values $\{ X_t | t \in \mathbb{Z} \}$ is non-negative.  (These measures of growth are related by $1+R_t = \exp(\delta_t)$ so both give the same information.)  You can see from these results that when $X_t > X_{t-1}$ you have positive growth and when $X_t<X_{t-1}$ you have negative growth.  The case of negative growth is already covered by a positive quantity getting smaller in magnitude.
If you want to extend this analysis to allow for negative values in the underlying series, you need to think about how you want this represented.  Usually this is done with complex numbers (i.e., by extending the logarithm function over the domain of all real numbers, which gives complex outputs for negative numbers).  I think you need to ask yourself what you actually want to measure here, and whether what you are asking to measure is actually coherent.
