Berechnen Sie den selbstausgeschlossenen Stichprobenmittelwert nach Gruppe

Berechnen Sie den selbstausgeschlossenen Stichprobenmittelwert nach Gruppe: egen (stata cmd) berechnet eine zusammenfassende Statistik nach Gruppen und speichert sie in einer neuen Variablen. Zum Beispiel haben die Daten drei Variablen, id, time und y. Wir möchten den Mittelwert von y für jede ID berechnen und ihn dann als neue Variable mean_y speichern.

In stata wäre der Befehl

egen mean_y = mean (y), by (id)

In R kann diese Aufgabe von ave erledigt werden

Datensatz generieren:

 

1
2
3
4
id <- rep(1:3,each=3)
t<-rep(1:3,3)
y<-sample(1:5,9,replace=T)
my_data<-data.frame(id=id,time=t,y=y)

Originale Daten:

1
2
3
4
5
6
7
8
9
10
11
> my_data
  id time y
1  1    1 4
2  1    2 1
3  1    3 4
4  2    1 2
5  2    2 3
6  2    3 3
7  3    1 4
8  3    2 4
9  3    3 3
1
2
3
4
5
6
7
8
9
10
11
> within(my_data, {mean_y = ave(y,id)} )
  id time y   mean_y
1  1    1 4 3.000000
2  1    2 1 3.000000
3  1    3 4 3.000000
4  2    1 2 2.666667
5  2    2 3 2.666667
6  2    3 3 2.666667
7  3    1 4 3.666667
8  3    2 4 3.666667
9  3    3 3 3.666667

Die Standardzusammenfassungsstatistik ist Mittelwert. Wir können jedoch eine bestimmte Funktion zum Berechnen der Zusammenfassungsstatistik zuweisen. Wenn wir zum Beispiel den sd von y nach id berechnen wollen, können wir haben

1
2
3
4
5
6
7
8
9
10
11
within(my_data, {sd_y = ave(y,id,FUN=sd)} )
  id time y      sd_y
1  1    1 4 1.7320508
2  1    2 1 1.7320508
3  1    3 4 1.7320508
4  2    1 2 0.5773503
5  2    2 3 0.5773503
6  2    3 3 0.5773503
7  3    1 4 0.5773503
8  3    2 4 0.5773503
9  3    3 3 0.5773503

Anmerkung: Das Innere wertet einen Ausdruck in einer Umgebung aus, die aus dem data.frame erstellt wurde. Außerdem wird der data.frame geändert und zurückgegeben (in unserem Fall werden neue Variablen erstellt, mean_y oder sd_y).

Hier ist eine andere Verwendung von ave. Wir möchten einen selbst ausgeschlossenen Stichprobenmittelwert nach Gruppe erstellen.

Angenommen, die Daten haben drei Variablen, id, time und y. Wir möchten den Mittelwert von y für jede ID berechnen, jedoch den Wert von y des aktuellen Zeitraums ausschließen.

 

1
2
3
4
id <- rep(1:3,each=3)
t<-rep(1:3,3)
y<-sample(1:5,9,replace=T)
my_data<-data.frame(id=id,time=t,y=y)

Orignal data Berechnen Sie den selbstausgeschlossenen Stichprobenmittelwert nach Gruppe:

1
2
3
4
5
6
7
8
9
10
11
> my_data
  id time y
1  1    1 4
2  1    2 1
3  1    3 4
4  2    1 2
5  2    2 3
6  2    3 3
7  3    1 4
8  3    2 4
9  3    3 3

Erstens brauchen wir eine Funktion, um den selbst ausgeschlossenen Mittelwert zu berechnen. Diese Funktion verwendet einen Vektor und eine Funktion (Standard ist Mittelwert) als Argument. Es wendet die Funktion auf den Vektor an, bei dem eines der Elemente entfernt wird. Der Rückgabewert ist ein Vektor, dessen i-tes Element durch FUN (x [-i]) gegeben ist.

1
2
3
4
5
6
7
8
9
excludeSelfSummary<-function(x,FUN=mean){
    sapply(1:length(x), function(i) FUN(x[-i]))
}
> excludeSelfSummary(1:5,mean)
[1] 3.50 3.25 3.00 2.75 2.50
> excludeSelfSummary(1:5,min)
[1] 2 1 1 1 1
> excludeSelfSummary(1:5,max)
[1] 5 5 5 5 4

Dann übergeben wir die excludeSelf-Zusammenfassung, um sie als Argument zu speichern.excludeSelfSummary into ave as argument.

1
2
3
4
5
6
7
8
9
10
11
> within(my_data, {sd_y = ave(y,id,FUN=excludeSelfSummary)} )
  id time y sd_y
1  1    1 4  2.5
2  1    2 1  4.0
3  1    3 4  2.5
4  2    1 2  3.0
5  2    2 3  2.5
6  2    3 3  2.5
7  3    1 4  3.5
8  3    2 4  3.5
9  3    3 3  4.0

Natürlich könnten wir das selbstausgeschlossene Minimum oder Maximum berechnen.

1
2
3
4
5
6
7
8
9
10
11
> within(my_data, {sd_y = ave(y,id,FUN=function(x) excludeSelfSummary(x,min) )})
  id time y sd_y
1  1    1 4    1
2  1    2 1    4
3  1    3 4    1
4  2    1 2    3
5  2    2 3    2
6  2    3 3    2
7  3    1 4    3
8  3    2 4    3
9  3    3 3    4

TszKin Julian Chan

 

Leave a Reply