Canviant d’idioma l’RCommander

L’RCommander i l’IDE de R apareixen automàticament en l’idioma del sistema operatiu. Si en necessiteu posar en un idioma diferent podeu fer el següent (en Windows):

  • A l’escriptori copieu la icona de R.
  • Cliqueu sobre la icona copiada amb el botó dret del ratolí i al menú que s’obre cliqueu “Propietats”.
  • A la casella “Destinació” (pestanya “Drecera”) hi veureu el nom i la ruta del fitxer, entre cometes. A continuació, després de les cometes, hi heu d’afegir un espai i Language= i el codi de l’idioma (per exemple, Language=ca o Language=de).
  • Cliqueu “D’acord”.

Ara quan entreu a R amb la icona que heu modificat i obriu RCommander de la manera habitual estarà en l’idioma que hàgiu posat. Els menús de l’IDE de R també es traduiran si existeixen en l’idioma en qüestió, però en la majoria dels que he provat no estan traduïts i segueixen sortint en anglès (he vist que estan traduïts en alemany i en castellà, però no en català ni en francès).

Simpson’s paradox in a Google spreadsheet

There are plenty of resources on the net about the Simpson’s paradox, Simpson-Yue paradox or Simpson’s reversal. I used a Google spreadsheet and a couple of paper folders to explain it.

I will spend most of my time going through an imaginary example to see what is the Simpson’s paradox and how we deal with it, and then I will discuss some real occurrences of it.

Please imagine that I must undergo heart surgery and, since a hearth surgery is a serious issue, I want to select the best available surgeon. The hearth surgeons in my local hospital are Dr. A and Dr. B and I need to know which of them is the best one.

folders without labelsFortunately, a close friend of mine works in the hospital and he smuggles this two folders to me. Here are records of the last operations performed in the hospital. Then I just need to see the outcome of the operations performed by each doctor to find which is better. In fact, I nearly don’t need statistics, I just need counting.

I take every record from folder number 1 and I write down if the patient survived the operation and which doctor performed it. You can see survivors in green, and deceased patients in red, and here is the result: out of 12 patients of Dr. A, 2 died, but out of 34 patients of Dr. B, 8 died. It clearly seems safer to be operated on by Dr. A.

Here is the data, although it can be better viewed at this spreadsheet.

First     dead total       dead total  
folder Dr. A   2 12 16,7%   Dr. B 8 34 23,5%
dead alive alive dead dead alive alive
alive alive alive alive alive alive dead
alive alive alive dead alive alive alive
alive alive dead alive alive dead alive
dead alive alive alive
alive alive alive alive
dead alive alive alive
alive alive alive alive
dead alive
Second     dead total       dead total  
folder Dr. A   19 42 45,2%   Dr. B 3 6 50,0%
dead dead alive dead alive alive dead
alive alive dead alive dead dead alive
dead dead dead dead dead alive dead
alive alive alive alive alive
dead alive dead dead alive
alive dead dead dead alive
dead alive alive alive alive
alive alive alive alive alive
dead dead
  dead total       dead total  
Total     21 54 38,9%     11 40 27,5%

Just to make sure, I take folder 2, and the results are similar: it’s safer to be operated by Dr. A.

Anyway, if I count together all records from both folders, I get a surprising result: it’s safer to be operated on by Dr. B.

That is: when you compare proportions in records from each folder, more patients of Dr. A survive, but if you compare all records together, more patients of Dr. B survive: that is Simpson’s paradox.

Before seeing how we solve the paradox, I would like to outline why there is a paradox. In fact, it’s not a paradox but two contradicting results that according to our intuition should agree.

For each surgeon, the global proportion of deaths lies somewhere between the proportions for folder 1 and folder 2. Therefore, we intuitively expect that any comparison made from both folders would hold for the whole. Anyway, global proportion doesn’t lie in the middle: it can be more close to folder 1 for one doctor and to folder 2 for the other doctor.

How can we solve the paradox and, more important, which surgeon should I choose?

In principle, our decision shouldn’t be based on how records are distributed among folders, because they are placed in an arbitrary way. In fact, if we move some records from folder 1 to folder 2, the paradox disappears. You can try by going to the spreadsheet and moving rows 4 and 5 from the first folder to the second and checking the percentages again.

Indeed, if we place records at random in both folders, most times we won’t get any paradox, and each folders will lead to the same conclusion that we get by considering the whole set of records.

folders with labelsAnyway, I flipped the folders and I saw some labels on it that changed the whole situation: folder 1 contents records of easy operations and folder 2 contents records of difficult operations. Now our folders became a new meaningful variable. If we read again our results, now we can say that Dr. A is better at easy operations, and that Dr. A is better at difficult operations, too. What does the overall result mean? It just says that Dr. B performs mostly easy operations and Dr. A deals with difficult cases. That’s the reason so patients of Dr. B survive more often, even if Dr. A is better.

My story of two doctors and two folders is just an example I invented, but there are real life occurrences of the Simpson’s paradox, and some of them have lead to big problems. In fact, my example is inspired by data in a real study about two methods of removing kidney calculi where the paradox arise. The two doctors in my example would be the two methods, and the two folders would be small and big calculi.

A real case of troubles caused by misunderstanding the Simpson’s paradox happened when in 1973 Berkeley University was sued for sex discrimination in rejecting applications. The university was rejecting admission to a higher proportion of women than men when numbers were looked globally. However, when rejections were counted by department, there wasn’t discrimination in none of them – in fact there was even a small but significant bias favouring women in some departments. The fact was just that most women were applying to the most difficult to enter departments, and that was the only reason for women being rejected in a higher proportion than men.

Other examples are found in social sciences when analysing wage rates or school results in societies with mixed ethnic groups. Often scores rise for every ethnic group while dipping when the whole population is considered, due to change in ethnic composition of the society: if the groups with lower scores increase in size, global scores dip even when increasing for each group.

However, there could be found examples in the opposite way: when groups of observations are of little meaning, comparisons should be made in a global way. Sport statistics are full of occurrences.

Now, let me conclude that whenever we are comparing proportions or averages using observations split in group, we should see if those groups are meaningful for us and decide to use aggregate data or split data.

Proposed exercise:

The following table shows an extremely simplified recreation of the Berkeley University case outlined before. You can take the data and compute which percent of men or women applications are rejected in the whole department and in the whole university. Do results by department and global results contradict each other?

admitted men rejected men admitted women rejected women
department 1 1 1 2 2
department 2 4 2 2 1

A few references:

Berkeley admission bias:

Other examples:

Acknowledgements:

I would like to thank my fellow participants in the June 2016 Basic Skills and Tools to Teach Content Subjects in English course in Universitat de Barcelona and our professor M. del Mar Suárez for their comments and encouragement.

Posant preu per llogar

Fa anys vaig fer un postgrau de viabilitat de promocions immobiliàries i un dels temes importants del curs eren els estudis de mercat per saber a quin preu es podia esperar vendre els pisos i locals. Explicada en poques paraules, la tècnica que ens van ensenyar consistia a buscar anuncis d’habitatges nous en venda a la zona i calcular el preu mitjà per metre quadrat de tots els anuncis, i després fer el mateix amb locals i places de pàrquing. No tinc motius per dubtar que aquesta tècnica funciona pel preu de venda de pisos i locals nous, o si més no que fa una dècada funcionava, per començar perquè els que me la van explicar en sabien molt de vendre pisos nous, però el que sí que us puc dir és que per llogar pisos de segona mà no funciona. Si més no, pels nostres no funciona.

Ni mitjana dels anuncis ni preu mitjà per metre quadrat

Perquè dic que no funciona agafar els anuncis de la zona i treure’n el preu mitjà per metre quadrat?

El nostre objectiu és saber a quin preu s’estan llogant els pisos com el nostre. Aleshores, sembla que mirar el preu mitjà a que es lloguen altres pisos de la nostra zona ha de ser un bon estimador del preu al que podem llogar, i sembla raonable també que la informació la traguem dels webs d’anuncis, on podem trobar una quantitat prou gran de pisos i els seus preus. Ara bé, ni els preus que s’anuncien són necessàriament els que es lloguen, ni els anuncis que trobem en un moment donat són una mostra representativa. És més, els pisos que trobem anunciats són els pisos que NO s’han llogat, perquè si s’haguessin llogat ja no hi seria l’anunci. Naturalment, qualsevol pis que s’anuncia i es lloga és durant un temps un pis que no s’ha llogat, de manera que tots els pisos passen pels webs d’anuncis, però el problema és que no tots hi passen el mateix temps, de manera que no tots tenen la mateixa probabilitat d’aparèixer a la mostra que fem servir.

O sigui, si un pis és massa car, es passarà molt de temps anunciat, i és molt probable que ens el trobem al web quan fem la mitjana. En canvi, si un pis és barat i triga molt poc a ser llogat serà difícil que el trobem quan nosaltres mirem el web.

Poso un exemple simplificat. Suposem que en un barri tenim dos tipus d’anuncis de pisos: els cars, que triguen dos mesos a llogar-se, i els barats, que triguen una setmana, i suposem que cada dia es posa un anunci de cada tipus. Si un dia qualsevol mirem els pisos que hi ha anunciats, trobarem seixanta anuncis de pisos cars (els que s’han posat els darrers dos mesos, ja que els pisos cars triguen dos mesos a llogar-se) però només set dels barats (que només estan anunciats una setmana). Si fem la mitjana dels anuncis que trobem, el preu ens sortirà molt proper als dels anuncis de pisos cars, que són la majoria dels anuncis però no dels pisos, i que probablement acaben rebaixats abans de llogar-los a un preu semblant al dels barats. És a dir, la mitjana dels anuncis no ens serveix de gaire.

Dit a la manera dels estadístics, el conjunt dels anuncis visibles en un determinat moment no és  una mostra representativa dels pisos que s’anuncien.

L’altre aspecte que no ens serveix de la tècnica que em van explicar per promocions noves és el preu per metre quadrat. D’acord que el lloguer dels pisos grans són més cars que els petits, però el preu no és proporcional a la superfície ni molt menys, de manera que el preu per metre quadrat varia molt amb la mida dels pisos. El preu seria força proporcional a la superfície si els pisos fossin semblants i si l’oferta estigués adaptada a la demanda, i en barris consolidats de Barcelona no ho està. De fet, l’oferta està més o menys adaptada a la demanda de quan es van construir els pisos, i els pisos que demanaven els compradors i llogaters de fa cinquanta o cent anys pot no tenir gaire a veure amb el que demanen els d’ara. En general, tenim molts pisos grans quan la gent demana pisos petits. Més que petits, el que demana la gent són pisos barats, i un espai de més que no necessita, per barat que sigui sempre el trobarà car, sobretot si té un pressupost ajustat. Aleshores, el preu de lloguer per metre quadrat és molt més alt en pisos petits que en pisos grans. Si a més estem parlant de pisos grans en una casa sense ascensor, pensats originalment per a famílies, la diferència encara és més gran perquè la majoria de les famílies d’avui en dia no volen pisos sense ascensor.

Aleshores, si no podem fer la mitjana dels anuncis ni tenir en compte el preu per metre quadrat, no podem fer servir els anuncis com a referència?

En la pell del client

Sí que podem guiar-nos pels anuncis, però ho hem de fer d’una altra manera. Jo el que faig és:

  • Primer em miro el pis i penso quin tipus existents de client hi podria viure. Aquí la clau és “existent”, perquè anem a posar un preu que sigui atractiu per aquesta mena de llogater, i si busquem una mena de client que no existeix o és molt escassa, serà poc probable que cap client d’aquesta mena arribi a veure l’anunci. Per exemple, pel que m’he trobat, de famílies de quatre membres disposades a viure en un tercer pis sense ascensor n’hi deu haver alguna (bé sí, hi ha la meva), però llogant pisos no me n’he trobat mai cap, de manera que seria poc realista pensar en aquesta mena de llogater.
  • Un cop imaginat el llogater que podria viure al nostre pis, ens posem en la seva pell, anem a un web d’anuncis de pisos de lloguer (a mi m’agraden Fotocasa i Idealista), seleccionem pisos al nostre barri i cliquem el botó d’ordenar començant pels barats.
  • Amb els anuncis ordenats per preu, anem mirant la llista fins que comencem a trobar pisos que servirien al nostre llogater imaginari. De fet, podem continuar fins que trobem pisos que li anirien millor que el nostre a aquest llogater, i el preu d’aquests és el que no hem de passar: si hi ha un pis millor que el nostre a un preu més barat que el nostre, els llogaters que busquin pis es quedaran aquest altre i no el nostre.

La gràcia d’haver-nos posat en la pell d’un tipus concret de llogater imaginari és que el significat de “millor que el nostre” depèn de qui s’ho miri, i per això hem d’intentar veure-ho des del punt de vista del llogater potencial que busquem. Si creiem que el nostre pis aniria bé per parelles joves sense fills o per tres estudiants que vulguin compartir pis, comparem amb pisos que tinguin la mateixa utilitat que els nostres per viure-hi un grup així.

Un problema d’aquest mètode és que estem posant el preu a partir del mínim dels altres anuncis de pisos semblants, i el mínim pot dependre de molt pocs anuncis molt baixos, que poden ser barats per una pega oculta o directament ser anuncis falsos posats com a ganxo per alguna agència, que sembla mentida però això passa. Per això el que jo faig és mirar-me amb ull crític els anuncis molt barats i no tenir en compte els pisos més barats de tots, sobretot si s’aparten molt de la resta. Una cosa que normalment no faig però que hauria de fer és telefonar a aquests anuncis més barats o fins i tot anar a veure el pis, per comprovar si realment existeixen i són comparables amb el nostre.

Un duro menys que la competència

En el fons tot aquest sistema no és més que aplicar el que sempre han dit els paletes vells sobre el millor preu d’un pressupost: un duro menys que la competència. Això sí, la gràcia del sistema és saber de tots els pisos que s’anuncien qui és la competència amb qui ens comparem. En qualsevol cas, la veritable prova de foc d’un preu és quan comencem a ensenyar el pis i veiem la reacció dels possibles llogaters. Si som capaços de reaccionar ràpid, una bona idea (que jo no practico gaire i que les agències practiquen en excés) pot ser posar l’anunci una mica més car per rebaixar-lo segons vegem. Pujar-lo un cop anunciat és més difícil, i per això va bé si d’alguna manera tenim interessats que vegin el pis abans de posar l’anunci per si la seva reacció ens fa canviar el preu cap amunt. Un sol llogater pot no ser representatiu, però té l’avantatge que sovint ha vist  molts pisos quan nosaltres probablement només hem vist anuncis.

Apèndix: la venda de pisos nous

M’he passat tot el post dient que calcular la mitjana del preu del metre quadrat dels anuncis no funciona per saber a quant podem llogar un pis. No m’agradaria acabar sense apuntar perquè sí que serveix per saber el preu de venda dels pisos nous.

En primer lloc, en pisos nous el preu de venda sí que és proporcional als metres quadrats, perquè l’oferta s’ajusta a la demanda: si poca gent vol pisos grans, abans que el preu del metre quadrat de pis gran baixi, els promotors fan més pisos més petits i les lleis del mercat funcionen, de manera que el preu del metre quadrat és força uniforme (en realitat el metre de pis gran és una mica més barat perquè a cada metre quadrat de pis gran li toca una proporció menor de banys, escales i ascensors, que són cars de construir, però això afecta només una mica el preu comparat amb el que passa amb els pisos de segona mà). La mida dels pisos de segona mà, per contra, està més o menys adaptada a la demanda de quan es van construir, en un temps de famílies més grans, preu del sòl més barat i potser fins i tot ascensor vist com un luxe prescindible.

En segon lloc els pisos de segona mà es lloguen d’un en un i els pisos nous es venen per promocions que poden incloure desenes de pisos i es van venent al llarg de setmanes o mesos. Aleshores, fins i tot si originalment els posessin els anuncis amb preus tan dispersos com els de lloguer, els venedors tenen temps d’anar veient com responen els potencials compradors i poden reaccionar ajustant els preus. Així, és menys probable que el preu mitjà quedi distorsionat per unes quantes ofertes fora de mercat, i tampoc tenim un temps de permanència tan divers entre els diferents anuncis.

Funció VBA per posar els números en català a l’Excel

L’Excel no té una funció per escriure els números en lletres, i de molt poques llengües en circulen per la xarxa solucions a mida. Fa anys, quan fèiem rebuts amb l’import en lletres em vaig cansar de canviar a mà la quantitat cada vegada que canviàvem alguna cosa de la factura i vaig fer-me una funció per escriure els números. No està especialment ben feta perquè va ser el meu primer programa amb VBA però funciona.

Per fer servir la funció la podeu copiar en cada llibre on la vulgueu fer servir i pot ser que per executar-les hàgiu de modificar la seguretat de les macros, i amb les darreres versions d’Excel haureu de guardar el llibre com a llibre habilitat per a macros.

  • Amb el llibre obert, obriu l’editor de Visual Basic amb ALT+F11.
  • Seleccioneu Insertar>Mòdul. Apareixerà un full en blanc.
  • Copieu-hi el text del codi que ve a continuació:
'Unitats del 1 al 9
Public Function unitat(num)

numb = unitats(num)
If numb = 0 Then
unitat = ""
Else
unitat = Choose(numb, "UN", "DOS", "TRES", "QUATRE", "CINC", "SIS", "SET", "VUIT", "NOU")

End If

End Function

'Valor de la xifra en una posició
Public Function xifra(num, pos)

intmes = Int(num / 10 ^ (pos + 1)) * 10
intnum = Int(num / 10 ^ pos)
xifra = intnum - intmes

End Function

'Desenes en lletra
Public Function desena(num)

numb = xifra(num, 1)
If numb = 0 Then
desena = ""
Else
desena = Choose(numb, "DEU", "VINT", "TRENTA", "QUARANTA", "CINQUANTA", "SEIXANTA", "SETANTA", "VUITANTA", "NORANTA", "CENT")
End If

End Function

'Separador entre la desena i la unitat
Public Function separa(num)

numb = talla99(num)
If xifra(numb, 0) = 0 Then
separa = ""
ElseIf numb > 30 Then
separa = "-"
Else
separa = "-I-"
End If

End Function

'Darreres dos xifres del número
Public Function talla99(num)

talla99 = Int(num) - 100 * Int(num / 100)

End Function

'Centena en lletres
Public Function centena(num)

cent = xifra(num, 2)
If cent = 0 Then
centena = ""
ElseIf cent = 1 Then
centena = "CENT"
Else
centena = unitat(cent) & "-CENTS"
End If

End Function

'Número de tres xifres en lletres
Public Function Num999(num)

Num999 = centena(num) & separacent(num) & num99(num)

End Function

'Darrera xifra del número
Public Function unitats(num)

unitats = xifra(num, 0)

End Function

'Separació darrera les centenes
Public Function separacent(num)

If xifra(num, 2) = 0 Or talla99(num) = 0 Then
separacent = ""
Else
separacent = " "
End If

End Function

'Nombres fins al 20 en lletres
Public Function num20(num)

numb = talla99(num)
If numb = 0 Then
num20 = ""
Else
num20 = Choose(numb, "UN", "DOS", "TRES", "QUATRE", "CINC", "SIS", "SET", "VUIT", "NOU", "DEU", "ONZE", "DOTZE", "TRETZE", "CATORZE", "QUINZE", "SETZE", "DISSET", "DIVUIT", "DINOU", "VINT")

End If

End Function

'Nombres fins al 100 en lletres
Public Function num99(num)

numb = talla99(num)
If numb < 20 
Then 
num99 = num20(numb) 
Else 
num99 = desena(numb) & separa(numb) & unitat(numb) 
End If 

End Function 

'Nombres fins al 999.999 en lletres 
Public Function nummil(num) 
miln = Int(num / 1000) 
resta = Int(num) - miln * 1000 
If resta > 0 
Then
restax = " " & Num999(num)
Else
restax = ""
End If
If miln = 0 Then
nummil = Num999(num)
ElseIf miln = 1 Then
nummil = "MIL" & restax
ElseIf miln > 1 Then
nummil = Num999(miln) & " MIL" & restax
End If

End Function

'Nombres fins al 999.999.999.999 en lletres en masculí
Public Function nummilio(num)

miln = Int(num / 1000000)
resta = Int(num) - miln * 1000000
If resta > 0 Then
restax = " " & nummil(num)
Else
restax = ""
End If
If miln = 0 Then
nummilio = nummil(num)
ElseIf miln = 1 Then
nummilio = "UN MILIÓ" & restax
ElseIf miln > 1 Then
nummilio = nummil(miln) & " MILIONS" & restax
End If

End Function

'Unitats en lletres en femení
Public Function unitatfem(num)

numb = unitats(num)
If numb = 0 Then
unitatfem = ""
Else
unitatfem = Choose(numb, "UNA", "DUES", "TRES", "QUATRE", "CINC", "SIS", "SET", "VUIT", "NOU")

End If

End Function

'Nombres fins al 20 en femení
Public Function num20fem(num)

numb = talla99(num)
If numb = 0 Then
num20fem = ""
Else
num20fem = Choose(numb, "UNA", "DUES", "TRES", "QUATRE", "CINC", "SIS", "SET", "VUIT", "NOU", "DEU", "ONZE", "DOTZE", "TRETZE", "CATORZE", "QUINZE", "SETZE", "DISSET", "DIVUIT", "DINOU", "VINT")

End If

End Function

'Nombres fins al 99 en femení
Public Function num99fem(num)

numb = talla99(num)
If numb < 20 
Then 
num99fem = num20fem(numb) 
Else 
num99fem = desena(numb) & separa(numb) & unitatfem(numb) 
End If 

End Function 

'Centenes en lletres en femení 
Public Function centenafem(num) cent = xifra(num, 2) 
If cent = 0 
Then 
centenafem = "" 
ElseIf cent = 1 
Then centenafem = "CENT" 
Else centenafem = unitatfem(cent) & "-CENTES" 
End If 

End Function 

'Nombres fins al 999 en femení 
Public Function Num999fem(num) 
Num999fem = centenafem(num) & separacent(num) & num99fem(num) 

End Function 'Milers en lletres en femení Public Function nummilfem(num) miln = Int(num / 1000) resta = Int(num) - miln * 1000 If resta > 0 Then
restax = " " & Num999fem(num)
Else
restax = ""
End If
If miln = 0 Then
nummilfem = Num999fem(num)
ElseIf miln = 1 Then
nummilfem = "MIL" & restax
ElseIf miln > 1 Then
nummilfem = Num999fem(miln) & " MIL" & restax
End If

End Function

'Nombres fins al 999.999.999.999 en lletres en femení
Public Function nummiliofem(num)

miln = Int(num / 1000000)
resta = Int(num) - miln * 1000000
If resta > 0 Then
restax = " " & nummilfem(num)
Else
restax = ""
End If
If miln = 0 Then
nummiliofem = nummilfem(num)
ElseIf miln = 1 Then
nummiliofem = "UN MILIÓ" & restax
ElseIf miln > 1 Then
nummiliofem = nummil(miln) & " MILIONS" & restax
End If

End Function

'Quantitats de pessetes en lletres
Public Function pessetes(num)

miln = Int(num / 1000000)
resta = Int(num) - miln * 1000000
If resta > 0 Then
pessetes = nummiliofem(num) & " pessetes"
ElseIf miln > 0 Then
pessetes = nummiliofem(num) & " de pessetes"
Else
pessetes = "ZERO pessetes"
End If

End Function

'Quantitats d'euros en lletres
Public Function euros(num)

miln = Int(num / 1000000)
resta = Int(num) - miln * 1000000
If resta > 0 Then
euros = nummilio(num) & " euros"
ElseIf miln > 0 Then
euros = nummilio(num) & " d'euros"
Else
euros = "ZERO euros"
End If
cent = num - Int(num)
cent = Int(cent * 100 + 0.5)
If cent > 0 Then
euros = euros & " amb " & nummilio(cent) & " cèntims"
End If

End Function

Amb això tindreu quatre funcions:

  • nummilio: els números en masculí
  • nummiliofem: els números en femení
  • euros: un import en euros i cèntims en lletres
  • pessetes: un import en pessetes en lletres

Exemples d’ús:

=nummilio(99987889789,22)

NORANTA-NOU MIL NOU-CENTS VUITANTA-SET MILIONS VUIT-CENTS VUITANTA-NOU MIL SET-CENTS VUITANTA-NOU

=nummiliofem(99987889789,22)

NORANTA-NOU MIL NOU-CENTS VUITANTA-SET MILIONS VUIT-CENTES VUITANTA-NOU MIL SET-CENTES VUITANTA-NOU

=euros(99987889789,22)

NORANTA-NOU MIL NOU-CENTS VUITANTA-SET MILIONS VUIT-CENTS VUITANTA-NOU MIL SET-CENTS VUITANTA-NOU euros amb VINT-I-DOS cèntims

=pessetes(99987889789,22)

NORANTA-NOU MIL NOU-CENTS VUITANTA-SET MILIONS VUIT-CENTES VUITANTA-NOU MIL SET-CENTES VUITANTA-NOU pessetes

Totes les funcions funcionen amb números inferiors al bilió i, excepte la funció euros, ignoren els decimals.

Si heu d’adaptar la funció a un altre idioma us suggereixo simplificar una mica el codi reescrivint la funció num99 (i num99fem si necessiteu números en femení) per que no faci servir funcions auxiliars, i així no haver-les d’adaptar. Podeu fer servir de mostra la funció num20 per posar una instrucció Case amb la llista de tots els números fins al noranta-nou. Així haureu d’escriure més però haureu de programar menys.

 

Important dades d’Excel a R-Commander amb el portapapers

L’R-Commander pot importar fulls de càlcul sencers com a data frames, però quan tenim un full amb dades poc estructurades (o barreja d’una part estructurada i una de no estructurada) o quan volem importar només una part del full, aleshores seleccionar, copiar i importar pot ser molt més pràctic. A més, la mateixa técnica serveix per importar taules des de pàgines web o qualsevol altra font.

Fa temps ho vaig explicar en un vídeo:

Pros i contres de llogar sols

Suposant que la comercialització no la fem millor nosaltres que una agència (que sovint sí), els primer avantatge que té prescindir d’intermediaris és l’atractiu que això té pel llogater, perquè s’estalvia un mes de lloguer que altrament perdria. De fet, quan poso els anuncis miro de posar ben clar i ben gros que és directe de propietaris i que el llogater s’estalvia els honoraris de l’agència. No he provat mai si això permet llogar més car (que potser també), però el que sí que he comprovat és que atreu més clients i ens permet llogar en molt menys temps, que és el nostre objectiu principal, perquè sempre és més rendible un pis llogat ara que un pis llogat una mica més car després de passar-se buit els propers mesos.

Òbviament, la primera pega és el respecte que fa llençar-nos a fer experiments amb una cosa valuosa com un pis, tenint en compte que si ens equivoquem i ens trobem amb un llogater problemàtic ens podem acabar trobant amb un problema difícil de resoldre que ens costi molt més del que anem a guanyar. Aquí la qüestió és assegurar-nos-en bé, igual que ho faríem si el llogater ens l’hagués portat una agència, i demanar justificants d’ingressos i avaladors i plantejar-nos si ens convé una assegurança d’impagats, que si tenim un sol pis i depenem del lloguer de cada mes per pagar-ne la hipoteca, una assegurança pot ser una bona idea.

En sentit contrari, el primer avantatge de tenir una agència és la feina que ens estalvia, feina poc agraïda que suposadament ens surt gratis, perquè els honoraris de l’agència (que solen ser el lloguer d’un mes o més) els paga el llogater. Sobre si és una feina agraïda o no, això va a gustos, però que surti gratis no està tan clar. Si lloguéssim en el mateix temps i amb les mateixes condicions amb agència, potser sí que sortiria gratis, però el que ens hem trobat nosaltres fins ara és que llogar amb agència ens porta més temps i, al principi sorprenentment, els llogaters d’agència demanen més sovint una carència com a condició imprescindible per llogar. Aleshores, si quan el llogater es troba amb que ha de pagar un mes de lloguer a l’agència demana pagar un mes menys al propietari, qui està pagant realment els honoraris de l’agència no és el llogater, sinó el propietari.

Un avantatge que podríem esperar en prescindir d’intermediaris és la possibilitat de posar-nos en el seu lloc i cobrar-ne nosaltres els seus honoraris. Ara bé, fent això estaríem perdent l’atractiu que per als llogater té el llogar directament de propietari. Personalment, crec que val la pena mantenir aquest atractiu i fer-lo servir per llogar abans i evitar carències, de manera que globalment hi guanyem no cobrant honoraris.

Un detall a tenir en compte si no tenim agència és que igualment cal fer i registrar el contracte, cosa que porta una feina i un cost. Una possibilitat és tenir un administrador de finques que el faci si aconseguim que ho faci per un preu reduït que no ens espatlli l’atractiu comercial d’evitar-li al llogater els honoraris de l’agència. És probable que amb l’administrador que us dugui la finca el contracte d’un pis barat pugui sortir per menys de 200 euros despeses incloses, tot i que pot ser que per defecte algun administrador pretengui cobrar el mateix que si hagués comercialitzat ell el pis. Una alternativa és fer-nos nosaltres mateixos el contracte a partir d’un model i l’imprès oficial, però hem de tenir en compte que més de la meitat dels 200 euros són impostos i impresos que no ens estalviarem.

Per últim, el fet de conèixer i tractar el llogater és un avantatge però pot tenir algun inconvenient. És un avantatge perquè, a més de permetre’ns fer-nos una idea de qui ens posem a casa, ens permet ser flexibles en la negociació i valorar si ens convé fer canvis de condicions que portin a tancar amb un llogater interessant. D’altra banda, segons diuen alguns agents, el tracte directe podria ser un inconvenient si després hi ha algun problema i s’hi barreja una relació personal, tot i que la veritat és que amb això no m’hi he trobat mai. A més, com visquem a la mateixa escala que on tenim el pis per llogar, al nostre llogater-veí l’acabarem coneixent de totes maneres, de manera que millor haver-lo triar.

D’avantatges i inconvenients de llogar amb una agència se’n podrien explicar molts més, però podeu estar segurs que tan aviat com sigui visible l’anunci del vostre vostre pis directe de propietari unes desenes d’agències us trucaran per explicar-vos els avantatges de fer servir la seva agència. De fet, el darrer inconvenient de llogar directament és precisament que els primers dos dies perdreu algunes hores atenent trucades de comercials a la caça d’un pis. Hauria de ser una molèstia, però pot ser divertit i tot si us ho preneu com un curs gratuït de tècniques viperines, pèrfides i fal·laces de màrqueting telefònic. A veure si un dia faig un post amb els apunts del darrer cop que m’hi vaig trobar.

Un parell de fractals senzills amb R

koch

Del temps en que jo estudiava, cap als anys noranta, i els fractals estaven de moda, m’ha quedat el vici de provar de dibuixar-ne cada cop que descobreixo les possibilitats gràfiques d’un nou llenguatge. Vaig començar amb QBasic i amb Autolist (veure una falguera fractal dibuixada punt a punt amb un plotter de plometes des de l’Autocad és una experiència llarga però inoblidable), i he arribat a dibuixar-ne fins i tot amb Scratch. Em quedava pendent l’R, i m’ha sorprès la simplicitat i compacitat dels programes resultants. Per exemple, el floc de neu de Koch:

func<-function (x) {c(x,x+60,x-60,x)}
v0<-func(func(func(func(func(func(0))))))
df=data.frame(dx=cos(v0*pi/180),dy=sin(v0*pi/180))
punts<-cumsum(df)
plot(x=punts$dx,y=punts$dy,type="l",asp=1)

D’acord que fer “func(func(func(func(func(func” és una mica un nyap, però diria que és més clar i potser fins i tot més curt que fer un for, i de fet el que volia fer és un programa compacte. Per la resta, la gràcia és l’enfoc de R cap a objectes sencers que estalvia uns quants for i simplifica molt la sintaxi.

Un altre exemple, una fulla construïda a partir de transformacions afins:

matriu1<-matrix(c(0.7,0.2,-0.1,0.92),2,2)
v1<-c(0.005,0.02)
matriu2<-matrix(c(0,-0.4,0.7,0.05),2,2)
v2<-c(0.06,0.003)
pfinal<-matrix(c(0,0),ncol=1,nrow=2)
f1<-function(v) {matriu1%*%v+v1}
f2<-function(v) {matriu2%*%v+v2}
func<-function(p) {cbind(f1(p),f2(p))}
for (i in 1:19) {pfinal<-func(pfinal)}
plot(x=pfinal[1,],y=pfinal[2,],asp=1,pch=46,axes=FALSE)

fulla

Aquí, a més d’aprofitar l’enfoc a objectes, s’aprofita que R ja pot multiplicar matrius tot sol, cosa que avui en dia no és gran cosa, però comparat amb el QBasic i l’Autolisp és una grans simplificació. Un altre canvi respecte aquell temps és que els llibres d’aleshores (i potser els d’ara) recomanaven fer aquests fractals a partir de transformacions afins aplicades aleatòriament i amb pesos segons les àrees. Ara, la potència de R fa molt més pràctic deixar de banda l’aleatoreïtat i aplicar totes les transformacions a la vegada, doblant el nombre de punts amb cada cicle.

L’aventura de llogar pel nostre compte

Teníem pisos però la cerca de llogaters l’havíem deixada sempre en mans de professionals, i la veritat és que tampoc ens anava malament amb l’agència que ens comercialitzava els pisos, perquè els llogaters que ens trobaven no ens havien donat mai cap problema i perquè ens semblava que de preus en sabien més que nosaltres. L’única pega és que trigaven a llogar, però tampoc teníem gaires referències de si unes setmanes (de vegades algun més) era molt o poc, i ens hi jugàvem massa com per tenir ganes de córrer el risc de canviar d’agència per trobar uns llogaters més ràpid però pitjors.

La cosa no va canviar fins que un primer d’agost teníem un pis buit i l’agència, després de no haver trobat llogater en un mes, plegava per vacances. Amb la perspectiva de tenir el pis buit tot el mes estava clar que no hi perdíem res per posar un anunci i ensenyar-lo, perquè el pitjor que podia passar és que tampoc el lloguéssim i l’agència continués ensenyant-lo el setembre, que és el mateix que hauria passat si no haguéssim fet res. A més, el pis era a la mateixa escala on tenim el despatx i a l’agost jo treballava, de manera que em costava poc aixecar-me de la taula quan convingués per pujar un moment a ensenyar-lo, i encara em feia gràcia.

Vaig fer unes fotos, vaig buscar els portals que vaig trobar per posar l’anunci, vaig assegurar-me que tenia qui em fes el contracte si calia i em vaig posar a rebre visites. Tot i que la mestressa de l’agència m’havia dit abans de marxar de vacances que l’activitat a l’agost era nul·la, en una setmana ja havia trobat llogater al mateix preu que l’agència l’havia estat anunciant, i a més m’hi havia divertit.

Des d’aleshores que cada pis que es queda buit el lloguem pel nostre compte, i no crec que lloguem més car que abans (potser més aviat al contrari) però el que és segur és que lloguem molt abans. I és veritat que em costa passar un setmana de vertigen que no em paga ningú amb visites a totes hores que no em deixen fer res més, però també és veritat que acostumat a treballar de cara a l’ordinador, aquesta setmana parlant amb la gent ve a ser com una setmana de vacances. Potser si cada setmana em passés quaranta hores ensenyant pisos no ho trobaria tan divertit, però una vegada de tant en tant és un bon canvi.