R 通过组合样本中位数来估计总体中值
R Estimating the population median value by combining sample medians
我需要通过合并每个时期 10 个不同样本的中位数(数据集中位数)来计算多个时间段的总体中位数。每个样本中位数都是通过不同数量的观察(数据集观察)获得的。
中位数 - 数据集
Time1 Time2 Time3 Time4 Time5
Sample1 60000 71139 70000 75000 75000
Sample2 80000 88000 87750 88500 90000
Sample3 66000 73325 73000 78126 75000
Sample4 60000 74000 72000 75500 73000
Sample5 50500 60000 60000 66750 81500
Sample6 60000 70000 72000 78500 80000
Sample7 50000 60000 59999 63000 60000
Sample8 53000 55000 58300 59995 64500
Sample9 92529 111000 115000 120063 118000
Sample10 92500 115000 101000 104100 110075
观察-数据集
Time1 Time2 Time3 Time4 Time5
Sample1 159 202 174 134 172
Sample2 148 178 148 121 140
Sample3 563 680 652 513 678
Sample4 554 634 518 512 595
Sample5 343 415 347 270 390
Sample6 738 954 769 720 825
Sample7 704 949 863 648 762
Sample8 595 681 640 517 663
Sample9 517 782 610 504 472
Sample10 627 733 621 493 512
我正在尝试用 Median[1:1] 重复 Observations[1:1] 次生成一个向量,这个向量需要连接到另一个向量 Median[1:2] 重复 Observations[1:2] ] 次,然后将向量连接到另一个向量 Median[1:3] 重复 Observations[1:3] 次,依此类推...
我的目标是生成 5 个向量(与列 - 周期一样多),每个向量的长度等于每个时间范围内样本观察的总数。
for (i in 1:ncol(Median)) {
for (j in 1:nrow(Median)) {
vector_median=(seq(as.numeric(Med[i,j]),as.numeric(Med [i,j]),length.out=as.numeric(Observations[i,j])))
}
}
考虑一个嵌套的 mapply
(apply 系列的多输入版本),您可以在其中传递 Med 和 Observations 成对迭代中的列,然后将成对迭代中对应的 Sample 值的每一列传递到 rep()
函数中:
数据
txt = " Time1 Time2 Time3 Time4 Time5
Sample1 60000 71139 70000 75000 75000
Sample2 80000 88000 87750 88500 90000
Sample3 66000 73325 73000 78126 75000
Sample4 60000 74000 72000 75500 73000
Sample5 50500 60000 60000 66750 81500
Sample6 60000 70000 72000 78500 80000
Sample7 50000 60000 59999 63000 60000
Sample8 53000 55000 58300 59995 64500
Sample9 92529 111000 115000 120063 118000
Sample10 92500 115000 101000 104100 110075 "
Med = read.table(text=txt, header=TRUE)
txt = "Time1 Time2 Time3 Time4 Time5
Sample1 159 202 174 134 172
Sample2 148 178 148 121 140
Sample3 563 680 652 513 678
Sample4 554 634 518 512 595
Sample5 343 415 347 270 390
Sample6 738 954 769 720 825
Sample7 704 949 863 648 762
Sample8 595 681 640 517 663
Sample9 517 782 610 504 472
Sample10 627 733 621 493 512"
Obs = read.table(text=txt, header=TRUE)
进程
replicate_medians <- function(m,o){
mapply(function(m_sub, o_sub) rep(m_sub, times=o_sub), m, o)
}
output <- mapply(function(x,y) unlist(replicate_medians(x,y)), Med, Obs, SIMPLIFY=FALSE)
# EQUIVALENT WITH Map() WRAPPER
output <- Map(function(x,y) unlist(replicate_medians(x,y)), Med, Obs)
输出 (returns 5 个命名数值向量的列表)
str(output)
# List of 5
# $ Time1: int [1:4948] 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 ...
# $ Time2: int [1:6208] 71139 71139 71139 71139 71139 71139 71139 71139 71139 71139 ...
# $ Time3: int [1:5342] 70000 70000 70000 70000 70000 70000 70000 70000 70000 70000 ...
# $ Time4: int [1:4432] 75000 75000 75000 75000 75000 75000 75000 75000 75000 75000 ...
# $ Time5: int [1:5209] 75000 75000 75000 75000 75000 75000 75000 75000 75000 75000 ...
length(output$Time1[output$Time1==60000])
#[1] 1451 <---- THREE SAMPLES WITH THIS MEDIAN: 159 + 554 + 738 = 1,451
length(output$Time1[output$Time1==80000])
# [1] 148
length(output$Time1[output$Time1==66000])
# [1] 563
我需要通过合并每个时期 10 个不同样本的中位数(数据集中位数)来计算多个时间段的总体中位数。每个样本中位数都是通过不同数量的观察(数据集观察)获得的。
中位数 - 数据集
Time1 Time2 Time3 Time4 Time5
Sample1 60000 71139 70000 75000 75000
Sample2 80000 88000 87750 88500 90000
Sample3 66000 73325 73000 78126 75000
Sample4 60000 74000 72000 75500 73000
Sample5 50500 60000 60000 66750 81500
Sample6 60000 70000 72000 78500 80000
Sample7 50000 60000 59999 63000 60000
Sample8 53000 55000 58300 59995 64500
Sample9 92529 111000 115000 120063 118000
Sample10 92500 115000 101000 104100 110075
观察-数据集
Time1 Time2 Time3 Time4 Time5
Sample1 159 202 174 134 172
Sample2 148 178 148 121 140
Sample3 563 680 652 513 678
Sample4 554 634 518 512 595
Sample5 343 415 347 270 390
Sample6 738 954 769 720 825
Sample7 704 949 863 648 762
Sample8 595 681 640 517 663
Sample9 517 782 610 504 472
Sample10 627 733 621 493 512
我正在尝试用 Median[1:1] 重复 Observations[1:1] 次生成一个向量,这个向量需要连接到另一个向量 Median[1:2] 重复 Observations[1:2] ] 次,然后将向量连接到另一个向量 Median[1:3] 重复 Observations[1:3] 次,依此类推...
我的目标是生成 5 个向量(与列 - 周期一样多),每个向量的长度等于每个时间范围内样本观察的总数。
for (i in 1:ncol(Median)) {
for (j in 1:nrow(Median)) {
vector_median=(seq(as.numeric(Med[i,j]),as.numeric(Med [i,j]),length.out=as.numeric(Observations[i,j])))
}
}
考虑一个嵌套的 mapply
(apply 系列的多输入版本),您可以在其中传递 Med 和 Observations 成对迭代中的列,然后将成对迭代中对应的 Sample 值的每一列传递到 rep()
函数中:
数据
txt = " Time1 Time2 Time3 Time4 Time5
Sample1 60000 71139 70000 75000 75000
Sample2 80000 88000 87750 88500 90000
Sample3 66000 73325 73000 78126 75000
Sample4 60000 74000 72000 75500 73000
Sample5 50500 60000 60000 66750 81500
Sample6 60000 70000 72000 78500 80000
Sample7 50000 60000 59999 63000 60000
Sample8 53000 55000 58300 59995 64500
Sample9 92529 111000 115000 120063 118000
Sample10 92500 115000 101000 104100 110075 "
Med = read.table(text=txt, header=TRUE)
txt = "Time1 Time2 Time3 Time4 Time5
Sample1 159 202 174 134 172
Sample2 148 178 148 121 140
Sample3 563 680 652 513 678
Sample4 554 634 518 512 595
Sample5 343 415 347 270 390
Sample6 738 954 769 720 825
Sample7 704 949 863 648 762
Sample8 595 681 640 517 663
Sample9 517 782 610 504 472
Sample10 627 733 621 493 512"
Obs = read.table(text=txt, header=TRUE)
进程
replicate_medians <- function(m,o){
mapply(function(m_sub, o_sub) rep(m_sub, times=o_sub), m, o)
}
output <- mapply(function(x,y) unlist(replicate_medians(x,y)), Med, Obs, SIMPLIFY=FALSE)
# EQUIVALENT WITH Map() WRAPPER
output <- Map(function(x,y) unlist(replicate_medians(x,y)), Med, Obs)
输出 (returns 5 个命名数值向量的列表)
str(output)
# List of 5
# $ Time1: int [1:4948] 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 ...
# $ Time2: int [1:6208] 71139 71139 71139 71139 71139 71139 71139 71139 71139 71139 ...
# $ Time3: int [1:5342] 70000 70000 70000 70000 70000 70000 70000 70000 70000 70000 ...
# $ Time4: int [1:4432] 75000 75000 75000 75000 75000 75000 75000 75000 75000 75000 ...
# $ Time5: int [1:5209] 75000 75000 75000 75000 75000 75000 75000 75000 75000 75000 ...
length(output$Time1[output$Time1==60000])
#[1] 1451 <---- THREE SAMPLES WITH THIS MEDIAN: 159 + 554 + 738 = 1,451
length(output$Time1[output$Time1==80000])
# [1] 148
length(output$Time1[output$Time1==66000])
# [1] 563