Köpa_lägenhet.R

Skulden på den gamla lägenheten är idag 2.1 miljoner. Om vi vet att lånelöftet ligger på 3.8 miljoner, och tror att priset på den gamla lägenheten kommer att ligga mellan 2.5 och 2.9 miljoner, då får vi följande samband mellan försäljningspriset på den gamla lägenheten (övre raden) och hur mycket den nya lägenheten maximalt kan kosta (under raden).

Sälj: 2.5 2.55 2.6 2.65 2.7 2.75 2.8 2.85 2.9
Köp: 2.33 2.67 3 3.33 3.67 4.0 4.33 4.5 4.55

Om vi däremot är osäkra på hur stort lånelöftet är, så kan vi låta det variera mellan 2.6 till 3.8 miljoner. Priset på gamla lägenheten kan vi återigen låta variera mellan 2.5 till 2.9 miljoner. Skulden är fortfarande 2.1 miljoner. Genom att variera såväl lånelöfte som säljpris får vi tabellen nedan som anger vad nya lägenhetens pris kan vara, givet ett visst lånelöfte (rader) och säljpriset (kolumner).

Lån \ Sälj 2.5 2.55 2.6 2.65 2.7 2.75 2.8 2.85 2.9
2.6 2.33 2.67 3 3.10 3.15 3.2 3.25 3.3 3.35
2.8 2.33 2.67 3 3.30 3.35 3.4 3.45 3.5 3.55
3 2.33 2.67 3 3.33 3.55 3.6 3.65 3.7 3.75
3.2 2.33 2.67 3 3.33 3.67 3.8 3.85 3.9 3.95
3.4 2.33 2.67 3 3.33 3.67 4.0 4.05 4.1 4.15
3.6 2.33 2.67 3 3.33 3.67 4.0 4.25 4.3 4.35
3.8 2.33 2.67 3 3.33 3.67 4.0 4.33 4.5 4.55

Hur priset för nya lägenheten (output) beror på lånelöfte och pris på gamla lägenheten (input) visualiseras i 3D plot nedan.

Koden (skriven i R) för att generera plot och tabell finns nedan.

## library

library(data.table)
library(knitr)
library(lattice)

## define function

# output: buy price you can affor. 
# input: sell price and the bank's debt promise.
calcer <- function(sellprice, debt_promise, cash_savings=0){
  debt_today = 2.1
  brokerfee = 50/1000
  cash_apartment = sellprice -  debt_today - brokerfee

  # total cash: cash from apartment sale + cash in savings account 
  cash_tot = cash_apartment + cash_savings

  kvot = debt_promise / (debt_promise + cash_tot)
  scenario = ifelse(kvot >= 0.85, 
                    1, 
                    2)
  buyprice = ifelse(scenario == 1, 
                    cash_tot/0.15,
                    cash_tot + debt_promise)
  return(buyprice)
}

# exempel 
calcer(2.9, 3)

# set params 
debt_list <- seq(2.6, 3.8, 0.2)
sellprice_list <- seq(2.5, 2.9, 50/1000)

# example 
calcer(sellprice_list, 3)
calcer(2.7, debt_list)

## tabulate a few alternative prices and debt levels  

# setup matrix 
n_debt <- length(debt_list)
n_salesprice <- length(sellprice_list)
pricematrix <- matrix(NA, nrow=n_debt, ncol=n_salesprice)

# save values to matrix 
for (row in 1:n_debt){
  for (col in 1:n_salesprice){
    sp <- sellprice_list[col]
    d <- debt_list[row]
    pricematrix[row, col] <- calcer(sp, d)
  }
}

# edit matrix 
rownames(pricematrix) <- debt_list
colnames(pricematrix) <- sellprice_list
pricematrix <- round(pricematrix, 2)

# show matrix 
pricematrix
kable(pricematrix) 

## 3d plot 

# convert matrix to dataframe format 
df <- CJ(debt_list, sellprice_list)
df <- as.data.frame(df)
df$debt <- df$V1
df$sellprice <- df$V2
df <- df[, c("debt", "sellprice")]
df$buyprice <- calcer(df$sellprice, df$debt)

# show plot 
wireframe(buyprice ~ sellprice * debt, data=df)

You'll only receive email when they publish something new.

More from jacob
All posts