What is an appropriate measure of determination in genetic studies?
I used to think that $R^2$ was such a measure, but I'm no longer so sure. Specifically, it seems that $R^2$ undermeasures low determination and overmeasures high determination.
The reason for my doubt in $R^2$ comes from the following simulation.
For simplicity, let us assume that a characteristic such as height (weight, Intelligence Quotient, Autism Quotient, etc.) of an individual is inherited from a mother and a father in the following fashion:
(fathersHeight * fathersInfluence + mothersHeight * (1 - fathersInfluence))/2,
fathersInfluence is a constant between 0 and 1.
To give a specific example, if mother is 170 cm and father is 190 cm, and
fathersInfluence is 0.5 then we know that their child will be exactly 180 cm.
Let us further assume that we can only measure the characteristic of any father and any son. We can not measure the characteristic of any mother.
Let us say that we'll try to predict son's height from father's height using good old linear regression, and report how much of son's height is determined from father's height. This can be done easily enough in python
_, _, r_value, _, _ = scipy.stats.linregress(fathers, sons)
Entire simulation can be wrapped up into the following python function:
def sonsHeight(sampleSize, fathersInfluence=0.5): # loc = mean # scale = standard deviation fathers = scipy.stats.norm.rvs(loc=170, scale=10, size=sampleSize) mothers = scipy.stats.norm.rvs(loc=170, scale=10, size=sampleSize) def weightedAvg(fathersHeight, mothersHeight): return (fathersHeight * fathersInfluence + mothersHeight * (1 - fathersInfluence))/2 sons = [weightedAvg(father, mother) for father, mother in zip(fathers, mothers)] _, _, r_value, _, _ = scipy.stats.linregress(fathers, sons) return r_value ** 2
If we take
fathersInfluence = 0.5 I would expect that any successful measure of determination would report that father's height determines son's height in 50%. $R^2$ passes this check, running the simulation with 1 million sons and fathers gives:
>>> size = 1000000 >>> print(sonsHeight(size, fathersInfluence=0.5)) >>> 0.500071151111
which seems reassuring. However, the values of $R^2$ for
fathersInfluence any different than 0.5, seems to converge in probability to unexpected values. In fact running the experiment 101 times, for values of
fathersInfluence from 0 to 1 in steps of 0.01 we get the following nice curve, which reassuringly passes close to $(0, 0)$ and $(1, 1)$, but surprisingly is not a straight line!
It becomes more disturbing though when particular values of $R^2$ are looked at, especially for
fathersInfluence close to 0 or close to 1 (all $R^2$ come from taking a sample of 1 million).
In particular, for small values of
$0.01$, $0.02$, $0.03$
the values of $R^2$ look close to
$0.01^2$, $0.02^2$, $0.03^2$.
fathersInfluence of $0.1$ the value of $R^2$ is scarcely above $1\%$!
fathersInfluence, R^2 0.01, 7.3243188318051775e-05 0.02, 0.00042435668897930067 0.03, 0.00097257546851807486 ..., ... 0.1, 0.012287962714812851 ..., ... 0.97, 0.99904501126494283 0.98, 0.9995837493389228 0.99, 0.99989808360606525
- Is there a measure of determination, which plotted against
fathersInfluencewould give me a nice straight line passing through $(0, 0)$, $(1/2, 1/2)$ and $(1, 1)$?
- Would such measure be desirable?
- What other measures of determination can be used, especially when the determination is low?
I realize that the presented model of how genetics works is probably too simplistic and perhaps not useful as stated. However, I believe it resembles a good model for genetics in several aspects:
- We have a thing that we can measure (e.g. gene expression level) and are observing as random noise important things we can't measure (environmental factors).
- The independent variable (gene expression level) may influence the dependent variable (height, IQ, etc) only slightly.
All the code used to run this simulation can be accessed on github.