Diese Antwort besteht aus zwei Hauptteilen: Erstens der Verwendung linearer Interpolation und zweitens der Verwendung von Transformationen für eine genauere Interpolation. Die hier beschriebenen Ansätze eignen sich für die Handberechnung, wenn nur begrenzte Tabellen verfügbar sind. Wenn Sie jedoch eine Computerroutine zum Erzeugen von p-Werten implementieren, sollten Sie stattdessen viel bessere Ansätze verwenden (wenn dies von Hand mühsam ist).
Wenn Sie wüssten, dass der kritische Wert von 10% (einseitig) für einen Z-Test 1,28 und der kritische Wert von 20% 0,84 betrug, würde eine grobe Schätzung des kritischen Werts von 15% auf halbem Weg zwischen - (1,28 + 0,84) liegen. / 2 = 1,06 (der tatsächliche Wert ist 1,0364), und der 12,5% -Wert könnte auf halbem Weg zwischen diesem und dem 10% -Wert (1,28 + 1,06) / 2 = 1,17 (tatsächlicher Wert 1,15+) erraten werden. Dies ist genau das, was die lineare Interpolation tut - aber statt "auf halbem Weg zwischen" wird ein beliebiger Bruchteil des Weges zwischen zwei Werten betrachtet.
Univariate lineare Interpolation
Betrachten wir den Fall der einfachen linearen Interpolation.
Wir haben also eine Funktion (z. B. von x ), die ungefähr linear in der Nähe des Werts ist, den wir approximieren möchten, und wir haben einen Wert der Funktion auf beiden Seiten des gewünschten Werts, z. B. wie folgt:
x81620y9.3y1615.6
Die beiden Werte, deren y wir kennen, liegen 12 (20-8) auseinander. Sehen Sie, wie der x- Wert (für den wir einen ungefähren y- Wert wünschen ) diese Differenz von 12 im Verhältnis 8: 4 (16-8 und 20-16) aufteilt? Das heißt, es ist 2/3 der Entfernung vom ersten bis zum letzten x- Wert. Wenn die Beziehung linear wäre, würde der entsprechende Bereich von y-Werten im gleichen Verhältnis liegen.xyxyx
So sollte ungefähr gleich16-8 seiny16−9.315.6−9.3 .16−820−8
Das ist y16−9.315.6−9.3≈16−820−8
Neuordnung:
y16≈9.3+(15.6−9.3)16−820−8=13.5
Ein Beispiel mit statistischen Tabellen: Wenn wir eine t-Tabelle mit den folgenden kritischen Werten für 12 df haben:
(2-tail)α0.010.020.050.10t3.052.682.181.78
Wir wollen den kritischen Wert von t mit 12 df und einem Zwei-Schwanz-Alpha von 0,025. Das heißt, wir interpolieren zwischen der 0.02- und der 0.05-Zeile dieser Tabelle:
α0.020.0250.05t2.68?2.18
Der Wert bei " " Ist der Wert von t 0,025 , den wir mit linearer Interpolation approximieren möchten. (Mit t 0.025 meine ich eigentlich den 1 - 0.025 / 2- Punkt des inversen cdf einer t 12 -Verteilung.)?t0.025t0.0251−0.025/2t12
Wie zuvor teilt das Intervall von 0,02 bis 0,05 im Verhältnis ( 0,025 - 0,02 ) bis ( 0,05 - 0,025 ) (dh 1 : 5 ) und der unbekannte t- Wert sollte den t- Bereich 2,68 bis 2,18 im gleichen Verhältnis teilen ; äquivalent dazu tritt 0,025 auf ( 0,025 - 0,02 ) / ( 0,05 - 0,02 ) = 1 /0.0250.020.05(0.025−0.02)(0.05−0.025)1:5tt2.682.180.025(0.025−0.02)/(0.05−0.02)=1/6th des Weges entlang der -Reihe, so das Unbekannte t -Wertes auftreten sollte 1 / 6 entlang der th des Weges txt1/6t -Reihe.
Das ist oder gleichwertigt0.025−2.682.18−2.68≈0.025−0.020.05−0.02
t0.025≈2.68+(2.18−2.68)0.025−0.020.05−0.02=2.68−0.516≈2.60
2.56α=0.5
Bessere Approximationen durch Transformation
loglog
α0.020.0250.05log(α)−3.912−3.689−2.996t2.68t0.0252.18
Jetzt
t0.025−2.682.18−2.68≈=log(0.025)−log(0.02)log(0.05)−log(0.02)−3.689−−3.912−2.996−−3.912
oder äquivalent
t0.025≈=2.68+(2.18−2.68)−3.689−−3.912−2.996−−3.9122.68−0.5⋅0.243≈2.56
Which is correct to the quoted number of figures. This is because - when we transform the x-scale logarithmically - the relationship is almost linear:
Indeed, visually the curve (grey) lies neatly on top of the straight line (blue).
In some cases, the logit of the significance level (logit(α)=log(α1−α)=log(11−α−1)) may work well over a wider range but is usually not necessary (we usually only care about accurate critical values when α is small enough that log works quite well).
Interpolation across different degrees of freedom
t, chi-square and F tables also have degrees of freedom, where not every df (ν-) value is tabulated. The critical values mostly† aren't accurately represented by linear interpolation in the df. Indeed, often it's more nearly the case that the tabulated values are linear in the reciprocal of df, 1/ν.
(In old tables you'd often see a recommendation to work with 120/ν - the constant on the numerator makes no difference, but was more convenient in pre-calculator days because 120 has a lot of factors, so 120/ν is often an integer, making the calculation a bit simpler.)
Here's how inverse interpolation performs on 5% critical values of F4,ν between ν=60 and 120. That is, only the endpoints participate in the interpolation in 1/ν. For example, to compute the critical value for ν=80, we take (and note that here F represents the inverse of the cdf):
F4,80,.95≈F4,60,.95+1/80−1/601/120−1/60⋅(F4,120,.95−F4,60,.95)
(Compare with diagram here)
† Mostly but not always. Here's an example where linear interpolation in df is better, and an explanation of how to tell from the table that linear interpolation is going to be accurate.
Here's a piece of a chi-squared table
Probability less than the critical value
df 0.90 0.95 0.975 0.99 0.999
______ __________________________________________________
40 51.805 55.758 59.342 63.691 73.402
50 63.167 67.505 71.420 76.154 86.661
60 74.397 79.082 83.298 88.379 99.607
70 85.527 90.531 95.023 100.425 112.317
Imagine we wish to find the 5% critical value (95th percentiles) for 57 degrees of freedom.
Looking closely, we see that the 5% critical values in the table progress almost linearly here:
(the green line joins the values for 50 and 60 df; you can see it touches the dots for 40 and 70)
So linear interpolation will do very well. But of course we don't have time to draw the graph; how to decide when to use linear interpolation and when to try something more complicated?
As well as the values either side of the one we seek, take the next nearest value (70 in this case). If the middle tabulated value (the one for df=60) is close to linear between the end values (50 and 70), then linear interpolation will be suitable. In this case the values are equispaced so it's especially easy: is (x50,0.95+x70,0.95)/2 close to x60,0.95?
We find that (67.505+90.531)/2=79.018, which when compared to the actual value for 60 df, 79.082, we can see is accurate to almost three full figures, which is usually pretty good for interpolation, so in this case, you'd stick with linear interpolation; with the finer step for the value we need we would now expect to have effectively 3 figure accuracy.
So we get: x−67.50579.082−67.505≈57−5060−50 or
x≈67.505+(79.082−67.505)⋅57−5060−50≈75.61.
The actual value is 75.62375, so we indeed got 3 figures of accuracy and were only out by 1 in the fourth figure.
More accurate interpolation still may be had by using methods of finite differences (in particular, via divided differences), but this is probably overkill for most hypothesis testing problems.
If your degrees of freedom go past the ends of your table, this question discusses that problem.