Berechnung des p-Wertes aus einer beliebigen Verteilung

14

Ich hoffe, das ist keine dumme Frage. Nehmen wir an, ich habe eine willkürliche kontinuierliche Verteilung. Ich habe auch eine Statistik und möchte diese beliebige Verteilung verwenden, um einen p-Wert für diese Statistik zu erhalten.

Mir ist klar, dass es in R einfach ist, dies zu tun, solange Ihre Distribution zu einer der eingebauten passt, als ob es normal wäre. Aber gibt es eine einfache Möglichkeit, dies mit einer bestimmten Verteilung zu tun, ohne diese Annahme zu treffen?

Alan H.
quelle

Antworten:

12

Wenn Sie eine kumulative Verteilungsfunktion , ist die Berechnung des p- Wertes für eine gegebene Statistik T einfach 1 - F ( T ) . Dies ist in R einfach. Wenn Sie andererseits eine Wahrscheinlichkeitsdichtefunktion haben , dann ist F ( x ) = x - p ( t ) d t . Sie finden dieses Integral analytisch oder numerisch. In R wird dies so aussehen:FpT1F(T)F(x)=xp(t)dt

dF <- function(x)dnorm(x)
pF <- function(q)integrate(dF,-Inf,q)$value 

> pF(1)
[1] 0.8413448
> pnorm(1)
[1] 0.8413447

Sie können integratefür eine bessere Genauigkeit abstimmen. Dies kann natürlich in bestimmten Fällen fehlschlagen, wenn sich das Integral nicht gut verhält, es sollte jedoch für die Mehrzahl der Dichtefunktionen funktionieren.

Sie können natürlich Parameter übergeben pF, wenn Sie mehrere Parameterwerte zum Ausprobieren haben und nicht dFjedes Mal neu definieren möchten .

dF <- function(x,mean=0,sd=1)dnorm(x,mean=mean,sd=sd)
pF <- function(q,mean=0,sd=1)integrate(dF,-Inf,q,mean=mean,sd=sd)$value 

> pF(1,1,1)
[1] 0.5
> pnorm(1,1,1)
[1] 0.5

Natürlich können Sie auch Monte-Carlo-Methoden verwenden, wie in @suncoolsu beschrieben. Dies wäre nur eine weitere numerische Methode für die Integration.

mpiktas
quelle
Ich denke, Ihre Methode ist viel einfacher als die von mir vorgeschlagene, insbesondere wenn die von Ihnen zu integrierende Funktion nicht eingeschränkt ist. Die numerische Technologie ist mir nicht bekannt. in R.
suncoolsu
Ja, ich denke, das entspricht eher meinen derzeitigen Fähigkeiten. Vielen Dank!
Alan H.
Eigentlich bin ich mir nicht sicher, wie diese Funktionen funktionieren. Die Beispiele geben Ergebnisse für eine Normalverteilung an, aber wo stecke ich meine Wahrscheinlichkeitsdichtefunktion ein?
Alan H.
(Ich habe Tests durchgeführt und meine Daten scheinen nicht im entferntesten normal zu sein.)
Alan H.
@ Alan H., stecke deine Dichtefunktion in dF. Dies dFsollte den Wert der Dichtefunktion bei einem gegebenen Argument zurückgeben.
mpiktas
9

Ja, es ist möglich, eine beliebige Verteilung zu verwenden, um einen p-Wert für eine beliebige Statistik zu erhalten . Theoretisch und praktisch kann man mit dieser Formel den (einseitigen) p-Wert berechnen.

pvalue=P[T>Tobserved|H0holds]

TTobserved

TH0T

Die einzige Annahme, die Sie hier machen, ist - Sie kennen die Nullverteilung von T (die möglicherweise nicht in den Standardformaten für R-Zufallszahlengeneratoren vorliegt). Das war's - solange Sie die Nullverteilung kennen, kann der p-Wert berechnet werden.

suncoolsu
quelle
1
Ich muss bemerken - dies ist einer der Gründe, warum p-Werte so populär sind und leicht missverstanden werden. (IMHO)
suncoolsu
Ok, das macht Sinn. Was ich glaube, ist eine gute Schätzung der Nullverteilung. Irgendwelche Tipps, wie man dies in R umsetzt? Vielen Dank!
Alan H.
1
@Alan - Wissen Sie, wie Sie Zufallswerte aus Ihrer Nullverteilung generieren können? Wenn ja, nehmen wir an, dass - T = c (T1, ..., TN) aus der Nullverteilung gezogen wird - p-Wert = Summe (T> T_obs) / N. Wenn Sie nicht wissen, wie man erzeugt, müssen Sie möglicherweise Metropolis Sampling oder Gibbs Sampling verwenden, um T1 ... TN zu erhalten, aber es ist sehr machbar.
Suncoolsu