Hykleri

Hykleri er at foregive at have en særlig tro, holdning, værdisæt, følelse, kvalitet eller standard, som man ikke har.

Dobbeltmoral: indstilling der fordømmer visse forhold og samtidig accepterer visse andre, lige så forkastelige forhold

Og jeg hader begge dele.

Weird behavior of is.numeric()

An interesting observation. Please note that I have absolutely no idea about why this happens. (at least not at the time of first writing this)

In our datalab, ingeniuously named “Datalab” (the one at KUB-North, because contrary to the labs at the libraries for social sciences, and for the humanities, we are not allowed to have a name), we were visited by at student.

She wanted to make a dose-response plot. Something about the concentration of something, giving some clotting of some blood. Or something…

Anyway, she wanted to do a 4-parameter logistic model. Thats nice, I had never heard about that before, but that is the adventure of running a datalab, and what makes it fun.

Of course there is a package for it, dr4pl. After an introduction to the wonderful world of dplyr, we set out to actually fit the model. This is a minimal working example of what happened:

library(tidyverse)
library(dr4pl)

data <- tibble(dose= 1:10, response = 2:11)

dr4pl(data, dose, response)
## Error in dr4pl.default(dose = dose, response = response, init.parm = init.parm, : Both doses and responses should be numeric.

WTF? “Both doses and responses should be numeric”?. But they are!

is.numeric(data$dose)
## [1] TRUE
is.numeric(data$response)
## [1] TRUE

The error is thrown by these lines in the source:

if(!is.numeric(dose)||!is.numeric(response)) {
    stop("Both doses and responses should be numeric.")
  }

Lets try:

if(!is.numeric(data$dose)||!is.numeric(data$response)) {
    stop("Both doses and responses should be numeric.")
  } else {
    print("Where did the problem go?")
  }
## [1] "Where did the problem go?"

No idea. Did it disappear? No:

dr4pl(data, dose, response)
## Error in dr4pl.default(dose = dose, response = response, init.parm = init.parm, : Both doses and responses should be numeric.

Looking at the data might give us an idea of the source:

str(data)
## Classes 'tbl_df', 'tbl' and 'data.frame':    10 obs. of  2 variables:
##  $ dose    : int  1 2 3 4 5 6 7 8 9 10
##  $ response: int  2 3 4 5 6 7 8 9 10 11

Both dose and response are integers. Might that be the problem?

data <- tibble(dose= (1:10)*1.1, response = (2:11)*1.1)
dr4pl(data, dose, response)
## Error in dr4pl.default(dose = dose, response = response, init.parm = init.parm, : Both doses and responses should be numeric.

Nope. Both dose and response are now definitely numeric:

str(data)
## Classes 'tbl_df', 'tbl' and 'data.frame':    10 obs. of  2 variables:
##  $ dose    : num  1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11
##  $ response: num  2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11 12.1

But the problem persists.

Might this be the reason?

head(data,2)
## # A tibble: 2 x 2
##    dose response
##   <dbl>    <dbl>
## 1   1.1      2.2
## 2   2.2      3.3

It is a tibble. And the variables are reported to be doubles.

But according to the documentation:

“numeric is identical to double (and real)”

That should not be a problem then.

However. In desperation, I tried this:

c <- data %>% 
  as.data.frame() %>% 
  dr4pl(dose, response)

And it works!

Why? Absolutely no idea!

Or do i?

The problem is that subsetting a tibble returns a new tibble. Well, subsetting a dataframe returns a dataframe as well?

It does. Unless you subset out a single variable or observation.

In a dataframe, df$var returns a vektor, containing the values of var in df.

If, however, df is a tibble, df$var will return a tibble, with just one variable.

Hvor mange brune mennesker er der i Danmark?

Eller, er det urimeligt at der kun er en brun minister i den nye regering?

Jeg er faktisk ikke meget for at opdele folk efter hudfarve. Den bør være ret ligegyldig. Med mindre den er grøn eller blå. Eller postkasserød. I så fald vil jeg nok ringe til Niels Bohr Institutet, og spørge om de har et direkte nummer til en relevant international organisation, der håndterer gæster fra andre planeter.

Anyway. Jeg så nogen beklage sig over at der kun er 1 “brun” minister blandt de 20. Altså 5% “brune”.

Er det urimeligt? Det er lidt svært at svare på. Det er en socialdemokratisk regering. Dens ministre rekrutteres derfor overvejende fra den socialdemokratiske folketingsgruppe, som er på 46 medlemmer. Tre af dem er “brune”. For en passende værdi af brun. Ministeren, Mattias Tesfaye, er søn af en etiopisk far, og en etnisk dansk mor. Og han er åbenbart brun nok til at blive betegnet som brun (det giver mig nogle ubehagelige associationer til amerikansk sydstats-raceretorik, hvor blot en enkelt dråbe negerblod var nok til at du var et undermenneske. Eller noget). Men fair nok, han er mere brun end jeg er. På den anden side veksler jeg også mellem kridhvid og solskoldet, afhængig af årstiden, så det siger ikke ret meget.

Men hvis fordelingen af brune ministre skal afspejle fordelingen af brune socialdemokratiske folketingsmedlemmer, så burde 6,5% af ministrene være brune. Når 5% af dem er, må man sige at være ret tæt på det forventede.

Hvordan med hele folketinget?

Socialdemokratiet har som nævnt 3.

Venstre har 0, Dansk Folkeparti 0, Radikale Venstre 1, SF 1, Enhedslisten 0. Eller måske 1. Det kommer an på hvor rent hvidt blod man mener Victoria Velasquez har. Hun ser ret hvid ud, men hvad ved jeg. Konservative har 1, Alternativet 1, Nye Borgerlige 0, Liberal Alliance 0. De nordatlantiske mandater ved jeg ikke hvordan man skal gøre op. Men lad os bare sige at de grønlandske MF’ere er “brune”, og de færøske hvide.

Det giver ialt 10. Hvor vi altså går ud fra, at det spansk lydende navn er brunt nok, og at grønlændere også kan regnes som brune.

Så 5,6% af folketinget er brune. Højt sat.

At 5% af ministerlisten er “brune” er vist ikke udtryk for en kritisabel underrepræsentation.

Men afspejler folketingets sammensætning, eller den socialdemokratiske folketingsgruppe, befolkningen? Det er også lidt vanskeligt.

Danmarks Statistik har fine opgørelser. Bare ikke på hudfarve. Det er ikke så meget dem der har dansk oprindelse, der er interessante. Det er indvandrere og efterkommere. Man kan kigge på alle landene. Men det er ikke helt lige til. Indvandrere fra USA, kan sagtens være meget brune. Så kan man dele op på vestlige og ikke-vestlige lande. Er folk fra hviderusland brune? Hvad med Argentina? Eller Israel? De er alle ikke-vestlige. Anyway. Lad os beslutte os for at alle indvandrere og efterkommere fra ikke-vestlige lande er at regne som brune. Jeg er for doven til at trække tal for alle lande, og de bliver alligevel ikke tilstrækkeligt præcise.

Hele den danske befolkning er på 5,8 millioner. Og indvandrere og efterkommere fra ikke-vestlige lande, udgør 8,7% heraf. Det er ikke den helt rigtige fordeling. Børn under 18 er ikke valgbare!

Den del af befolkningen der er over 19 – ja, det burde være 18, men som nævnt er jeg doven og gad ikke trække så detaljerede tal ud – er i alt på 4,5 millioner. Og 8,3% er fra ikke vestlige lande.

Så hvis indvandrere og efterkommere fra ikke-vestlige lande skulle være helt fair repræsenteret på ministerlisten, skulle der altså være 8,3%. Jeg ved ikke helt om det er rimeligt at brokke sig over at andelen “kun” er 5%. Havde der været 2 brune ministre, havde de været overrepræsenteret. Tallet bliver i øvrigt mindre hvis vi kigger på hvem der har dansk statsborgerskab, og dermed er valgbare.

Med andre ord, der er et ret repræsentativt antal brune mennesker på ministerlisten – der er næppe noget reelt at brokke sig over i den sammenhæng (men rigeligt andet…)

Og så efterlades jeg igen med en let kvalme over symmetrien i anti-racisterne og racisternes virkelighedsbillede. Nej, der er ikke supermange brune mennesker i Danmark. Danmark er et bemærkelsesværdigt hvidt land. Antiracisterne er utilfredse fordi de åbenbart lever i en alternativ virkelighed hvor der er utroligt mange brune mennesker i Danmark, og hvis der kun er en enkelt brun person blandt 20 mere eller mindre tilfældigt udvalgte personer, så er det udtryk for undertrykkende racisme. Racisterne lever åbenbart i den samme alternative virkelighed, hvor landet næsten er overtaget af brune mennesker – hvorfor de allesammen skal smides ud.

Og så tror jeg det er tid til at jeg går i bad. Den der opdeling af mennesker efter hudfarve får mig til at føle mig beskidt.

Project Euler 61

Project Euler 61

OK, this was a bit of a challenge.

Find six four-digit numbers that are cyclical. As in: The last two digits of the first number is equal to the first two digits of the second number, the last two digits for the second number is equal to the first two digits in the second number. Etc. The last two digits in the final sixth number must be equal to the first two digits in the first number.

Also, one number must be triangle, one square, one pentagonal, one hexagonal, one heptagonal and on octagonal.

Lets begin by making lists of the different kinds of numbers:

Four-digit triangle-numbers:

P3 <- function(x){
  x*(x+1)/2
}
L3 <- P3(45:140)

Square numbers:

P4 <- function(x){
  x*x
}
L4 <- P4(32:99)

Pentagonal:

P5 <- function(x){
  x*(3*x -1)/2
}
L5 <- P5(26:81)

Hexagonal

P6 <- function(x){
  x*(2*x-1)
}
L6 <- P6(23:70)

Heptagonal:

P7 <- function(x){
  x*(5*x-3)/2
}
L7 <- P7(21:63)

Octagonal:

P8 <- function(x){
  x*(3*x-2)
}
L8 <- P8(19:58)

Lets get them all into a list:

values <- list(L8, L7, L6, L5, L4, L3)

And this is where it gets complicated.

I take each value in L8, which is now values[[1]]

For each of them, I run through each of the other elements of values, 2:6.

For each values[[i]], I check if there are any of the numbers, where the first two digits is equal to the last two in the element in L8 I’ve come to.

If there is, I run through all of them (the ones where the first two digits is equal to the last two in the element in L8 I’ve come to.)

For each of these, I run through each of the remaining list elements, setdiff(2:6, b), where b is the iterator in 2:6

For each of those, I check that there are numbers where the first two digits etc etc etc.

When I get to the last number, I check that the last two digits are the same as the first two digits in the number in the first loop. Then I sum the numbers I’ve found, and get the answer.

It is not difficult. As such. But there are a lot of nested for-loops, and I have to check that there is a possible next number, and, if not, go to the next element.

It took quite a lot of time to get it right…

for(i in values[[1]]){
  for(b in 2:6){
    if(length(values[[b]][(values[[b]] %/% 100) == (i %% 100)])==0){
        next()
      }
    for(j in values[[b]][(values[[b]] %/% 100) == (i %% 100)]){
      for(c in setdiff(2:6, b)){
       if(length( values[[c]][(values[[c]] %/% 100) == (j %% 100)]  )==0){
         next()
       }
       for(k in values[[c]][(values[[c]] %/% 100) == (j %% 100)]){
         for(d in setdiff(2:6, c(b,c))){
           if(length( values[[d]][(values[[d]] %/% 100) == (k %% 100)]  )==0){
         next()
       }
           for(l in values[[d]][(values[[d]] %/% 100) == (k %% 100)]){
             for(e in setdiff(2:6, c(b,c,d))){
               if(length( values[[e]][(values[[e]] %/% 100) == (l %% 100)]  )==0){
         next()
       }
               for(m in values[[e]][(values[[e]] %/% 100) == (l %%100)]){
                  for(f in setdiff(2:6, c(b,c,d,e))){
                    if(length( values[[f]][(values[[f]] %/% 100) == (m %% 100)]  )==0){
                    next()
                     } else{
                    for(n in values[[f]][(values[[f]] %/% 100) == (m %% 100)]){
                          if((n %% 100) == (i %/% 100)){
                        answer <- sum(i,j,k,l,m,n)
                        break()
                      }}
                    }
                  }   
               }
             } 

           }
          }
       }
     }
    }
  }
}

Neat. But there must be an easier way.

Statistik er svært

Eller, det er svært at blive enige om. Eller også er det svært at acceptere konsekvenserne.

Danmark er, ifølge Wikipedia, 86,3% etnisk dansk. I 1980 var tallet 97%. Så hvis magthaverne, virksomheds- og organisationslederne etc. i Danmark overvejende er hvide DJØF-mænd, så bør det ikke overraske. Jo, det med mænd. Det er skævt. Men at ledende stillinger overvejende er besat af personer der har taget en uddannelse der er målrettet de stillinger, bør ikke overraske. Og at de overvejende er hvide, i et land der stadig er overvejende hvidt. Det bør slet ikke overraske.

De personer der sidder i disse ledende stillinger, begyndte den uddannelse der ledte til stillingen for 30-40 år siden. Så ledende stillinger i Danmark er besat med personer der nogenlunde bør afspejle befolkningssammensætningen for 30-40 år siden. Var den hvid? Ja, det var den. Hvis man ønsker en anden sammensætning af hudfarver på de ledende poster i Danmark, må man arbejde på at ændre sammensætningen af hudfarver i Danmark i dag, og så tålmodigt vente på at de bliver gamle nok, har fået uddannelse nok, og ancinnitet nok til at nå de ledende poster.

 

Racisme. Sexisme. Eksklusion. Diversitet

Det er aldrig ok at forskelsbehandle folk på grund af deres hudfarve.

Det er aldrig ok at forskelsbehandle folk på grund af deres køn.

Det er aldrig ok at forskelsbehandle folk på grund af deres alder.

Eller – undertiden er det. Hvis folks hud er blå, har de adgang til andre sundhedstilbud, end folk hvis hud har en normal farve. Kvinder skal også have betydeligt bedre adgang til screening for livmoderhalskræft end mænd. Og pensioner udbetales altså ikke til folk under en vis alder.

Men hvis man vil slå sig op som en inkluderende organisation, så går det ikke at udtale sig negativt om folk på grund af deres køn, alder eller hudfarve. Eller kønsidentitet. Eller seksuel orientering. Og en lang række andre ting.

Du må ikke udskamme folk på grund af deres hudfarve. Heller ikke når de er hvide. Du må ikke udskamme folk på grund af deres køn. Heller ikke når de er mænd. Du må ikke udskamme folk på grund af deres alder. Heller ikke når de er midaldrende. Du må ikke udskamme folk på grund af deres seksuelle orientering. Heller ikke når de er bøsser. Du må ikke udskamme folk på grund af deres kønsidentitet. Heller ikke når de er ciskønnede.

Du må i øvrigt heller ikke udskamme folk for at spise småkager og drikke rose-vin.

Rasmus Paludan

Hold da op. Jeg havde hørt historier i det københavnske LGBT-miljø. Men for katten da.

Det bliver i hvert fald en valgkamp hvor jeg ikke orker at følge med. For det der lukkes ud fra det yderste højre i dansk politik er, ja, jeg savner ord. Til gengæld deler jeg flere foldere fra Radikale ud end jeg plejer.

Debatten er bekymrende. Sådan helt lavpraktisk har vi nu en deltager i partilederdebatterne, der reelt går ind for etnisk udrensning. Og som går videre. Hans utopia er helt frit for muslimer.

Det er mit sådan set også. Forskellen er at mit utopia også er helt frit for kristne, jøder, buddister, hinduer og andet godtfolk. Og så selvfølgelig at det lyder lidt som om Paludan mener at utopien skal nås med vold, mens jeg mener den skal nås ved at folk holder op med at tro på himmelnisser af forskellige varians, og melder sig ind i virkeligheden.

Hvad der bekymrer mig mest er den måde han håndteres på. Jeg er ikke sikker på at den effektive måde er at råbe nazisvin efter hans potentielle vælgere. Det virkede ikke supereffektivt for Hillary for 3 år siden, da hun kaldte Trumps vælgere for “deplorables”. Det er i hvert fald Trump der sidder i det hvide hus, ikke Clinton. Hvis hans tilslutning skal tolkes som en reaktion på at integrationsproblemerne stadig ikke er håndteret, og at de der lever med dem (og er utilfredse med det) bliver skammet ud i den offentlige debat – ja så er vejen frem nok ikke at udskamme dem yderligere.

Hvad man så skal gøre ved jeg ikke. Jeg har ingen anelse. Men jeg er dybt bekymret.

StarLog – The main character. Enterprise!

In what ways does the U.S.S. Enterprise function as a character, not just a vehicle in Star Trek? Does “she” have a personality? Do the other ships in the Star Trek universe have the same level of character development?

To be honest I do not think that the starships actually can be viewed as characters. Yes, Enterprise is named, gendered, and the “real” characters talk to her. And the computer responds. But as a general rule, the computer has no selfawareness, does not solve problems (only at the prompt of the real characters), and only has a personality to the extent that the real characters project their own perceptions and ideas on to the ship.

We like to talk about Enterprise as a character. And Star Trek would not have been Star Trek without Enterprise. But I flatly dismiss the idea that Enterprise is actually a character in her own right.

StarLog – the future of propulsion

Where do you think ion propulsion and future engine technology will take us? What are the dangers? Are there other applications?

It will take us further out in space! But where it will also take us is not places far out in space. But also to more local spaces. Solving problems related to it, will give us new technology. And we have no idea where that will take us, in the same way that we did not know how the general theory of relativity and quantum mechanics would bring us GPS-navigation.

The dangers? Hard to say. I would claim that we should be mindful of not using all our reserves of Xenon for this. Other than that. Probably none. Unless it turns out that ion propulsion damages subspace in some way.

Finally. All four pips: