确定两个动态变化的分布的范围并排显示
determining a range for two dynamically changing distributions to show side by side
我有一个 R 函数,它为用户参数 d
、n1
和 n2
绘制两条叠加曲线。这两条曲线(图)都与“d”有关。
我的问题是如何最好地管理范围(即 curve
内的 from
和 to
),以便此范围始终允许两条曲线正确显示?
我尝试使用规则:
从=min.d = d-(15*d.SE)
到=max.d = d+(15*d.SE)
(其中 d.SE
是 "d" 的 标准错误。但此规则在许多情况下都无效。)
d.sampling = function(d, n1, n2 = NA){
N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2))
df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2)
d.SE = 1/sqrt(N)
min.d = d-(15*d.SE) ; max.d = d+(15*d.SE)
curve( dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2)
curve( dt(x*sqrt(N), df, d*sqrt(N) )*sqrt(N), n = 1e4, lty = 2, col = 4, add = T )
}
# Example of use:
d.sampling(n1 = 86, d = 1) # shows fine now, but change `d` to 2 and it fails
这样的事情会产生您期望的结果吗?
d.sampling = function(d, n1, n2 = NA){
N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2))
df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2)
d.SE = 1/sqrt(N)
min.d = d.SE*min(qt(0.0001, df), qt(0.0001, df, d*sqrt(N))) #d-(15*d.SE)
max.d = d.SE*max(qt(0.9999, df), qt(0.9999, df, d*sqrt(N))) #d+(15*d.SE)
curve( dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2)
curve( dt(x*sqrt(N), df, d*sqrt(N) )*sqrt(N), n = 1e4, lty = 2, col = 4, add = T )
}
# Example of use:
d.sampling(n1 = 86, d = 2)
我有一个 R 函数,它为用户参数 d
、n1
和 n2
绘制两条叠加曲线。这两条曲线(图)都与“d”有关。
我的问题是如何最好地管理范围(即 curve
内的 from
和 to
),以便此范围始终允许两条曲线正确显示?
我尝试使用规则:
从=min.d = d-(15*d.SE)
到=max.d = d+(15*d.SE)
(其中 d.SE
是 "d" 的 标准错误。但此规则在许多情况下都无效。)
d.sampling = function(d, n1, n2 = NA){
N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2))
df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2)
d.SE = 1/sqrt(N)
min.d = d-(15*d.SE) ; max.d = d+(15*d.SE)
curve( dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2)
curve( dt(x*sqrt(N), df, d*sqrt(N) )*sqrt(N), n = 1e4, lty = 2, col = 4, add = T )
}
# Example of use:
d.sampling(n1 = 86, d = 1) # shows fine now, but change `d` to 2 and it fails
这样的事情会产生您期望的结果吗?
d.sampling = function(d, n1, n2 = NA){
N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2))
df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2)
d.SE = 1/sqrt(N)
min.d = d.SE*min(qt(0.0001, df), qt(0.0001, df, d*sqrt(N))) #d-(15*d.SE)
max.d = d.SE*max(qt(0.9999, df), qt(0.9999, df, d*sqrt(N))) #d+(15*d.SE)
curve( dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2)
curve( dt(x*sqrt(N), df, d*sqrt(N) )*sqrt(N), n = 1e4, lty = 2, col = 4, add = T )
}
# Example of use:
d.sampling(n1 = 86, d = 2)