- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用组标识符 g
在 (y1,...,yN) 上对 ANOVA 进行排列检验.我应该使用 (1)/(g-1) (muhatj - muhat)^2 的总和作为测试统计量,而 muhatj 是第 j 组样本均值,和 muhat=(1/g)summation muhatj.
## data
y <- c(6.59491, 6.564573, 6.696147, 6.321552, 6.588449, 6.853832,
6.370895, 6.441823, 6.227591, 6.675492, 6.255462, 6.919716, 6.837458,
6.41374, 6.543782, 6.562947, 6.570343, 6.993634, 6.666261, 7.082319,
7.210933, 6.547977, 6.330553, 6.309289, 6.913492, 6.597188, 6.247285,
6.644366, 6.534671, 6.885325, 6.577568, 6.499041, 6.827574, 6.198853,
6.965038, 6.58837, 6.498529, 6.449476, 6.544842, 6.496817, 6.499526,
6.709674, 6.946934, 6.23884, 6.517018, 6.206692, 6.491935, 6.039925,
6.166948, 6.160605, 6.428338, 6.564948, 6.446658, 6.566979, 7.17546,
6.45031, 6.612242, 6.559798, 6.568082, 6.44193, 6.295211, 6.446384,
6.658321, 6.369639, 6.066747, 6.345537, 6.727513, 6.677873, 6.889841,
6.724438, 6.379956, 6.380779, 6.50096, 6.676555, 6.463236, 6.239091,
6.797642, 6.608025)
## group
g <- structure(c(2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 2L,
3L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L,
3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 1L, 3L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 1L,
2L), .Label = c("B1", "B2", "B3"), class = "factor")
这是我现在拥有的,但是当我更改它以测试样本均值而不是 F 统计量时,它不起作用。我很确定我需要将 T.obs
和 T.perm
更改为类似于 by(y, g, mean)
的内容但我认为我还缺少更多。
n <- length(y) #sample size n
T.obs<- anova(lm(y ~ g))$F[1] #Observed statistic
n.perm <- 2000 # we will do 2000 permutations
T.perm <- rep(NA, n.perm) #A vector to save permutated statistic
for(i in 1:n.perm) {
y.perm <- sample(y, n, replace=F) #permute data
T.perm[i] <- anova(lm(y.perm ~ g))$F[1] #Permuted statistic
}
mean(T.perm >= T.obs) #p-value
最佳答案
我真的不知道“它不工作”是什么意思。据我所知,它工作正常,只是有点慢。
set.seed(0)
n <- length(y) #sample size n
T.obs <- anova(lm(y ~ g))$F[1] #Observed statistic
n.perm <- 2000 # we will do 2000 permutations
T.perm <- rep(NA, n.perm) #A vector to save permutated statistic
for(i in 1:n.perm) {
y.perm <- sample(y, n, replace=F) #permute data
T.perm[i] <- anova(lm(y.perm ~ g))$F[1] #Permuted statistic
}
mean(T.perm >= T.obs)
# [1] 0.4915
这与理论值相当接近
anova(lm(y ~ g))$Pr[1]
# [1] 0.4823429
所以,是的,你做的都是正确的!
从您问题的第一段来看,我们似乎想自己计算 F 统计量,所以下面的函数就是这样做的。有一个开关 "use_lm"
。如果设置 TRUE
,它使用 anova(lm(y ~ g))
作为您在原始代码中所做的。 此函数旨在使 F 统计量和 p 值的计算变得透明。此外,手动计算比调用 lm
和 anova
快 15 倍(这是显而易见的...)。
fstat <- function (y, g, use_lm = FALSE) {
if (!use_lm) {
## group mean (like we are fitting a linear model A: `y ~ g`)
mu_g <- ave(y, g, FUN = mean)
## overall mean (like we are fitting a linear model B: `y ~ 1`)
mu <- mean(y)
## RSS (residual sum of squares) for model A
RSS_A <- drop(crossprod(y - mu_g))
## RSS (residual sum of squares) for model B
RSS_B <- drop(crossprod(y - mu))
## increase of RSS from model A to model B
RSS_inc <- RSS_B - RSS_A
## note, according to "partition of squares", we can also compute `RSS_inc` as
## RSS_inc <- drop(crossprod(mu_g - mu))
## `sigma2` (estimated residual variance) of model A
sigma2 <- RSS_A / (length(y) - nlevels(g))
## F-statistic
fstatistic <- ( RSS_inc / (nlevels(g) - 1) ) / sigma2
## p-value
pval <- pf(fstatistic, nlevels(g) - 1, length(y) - nlevels(g), lower.tail = FALSE)
## retern
return(c(F = fstatistic, pval = pval))
}
else {
anovalm <- anova(lm(y ~ g))
return(c(F = anovalm$F[1L], pval = anovalm$Pr[1L]))
}
}
让我们先检查一下这个函数的有效性:
F_obs <- fstat(y, g)
# F pval
#0.7362340 0.4823429
F_obs <- fstat(y, g, TRUE)
# F pval
#0.7362340 0.4823429
不要因为它微不足道而感到惊讶。您的数据并没有真正表明存在显着的群体差异。看看箱线图:
boxplot(y ~ g) ## or use "factor" method of `plot` function: `plot(g, y)`
现在我们继续排列。我们为此编写了另一个函数 perm
。这实际上很容易,因为我们有一个很好定义的 fstat
。我们需要做的就是使用replicate
来包装sample
+ fstat
。
lm
实际上很慢:
library(microbenchmark)
microbenchmark(fstat(y, g), fstat(y, g, TRUE), times = 200)
#Unit: microseconds
# expr min lq mean median uq max neval cld
# fstat(y, g) 228.44 235.32 272.1204 275.34 290.20 388.84 200 a
# fstat(y, g, TRUE) 4090.00 4136.72 4424.0470 4181.02 4450.12 16460.72 200 b
所以我们使用 f(..., use_lm = FALSE)
编写此函数:
perm <- function (y, g, n) replicate(n, fstat(sample(y), g)[[1L]])
现在让我们用 n = 2000
来运行它(为再现性设置随机种子):
set.seed(0)
F_perm <- perm(y, g, 2000)
## estimated p-value based on permutation
mean(F_perm > F_obs[[1L]])
# [1] 0.4915
请注意它与理论 p 值的接近程度:
F_obs[[2L]]
# [1] 0.4823429
如您所见,结果与您的原始代码一致。
关于r - 基于置换法的方差分析中 F 统计量的 Monte Carlo 估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336661/
我正在尝试获取 vector 的每个排列,但也有一个指示子排列的分隔符。从我的结果中可以看出,我的代码似乎有一个错误,即结束排列。 0 1 3 2 | 和 0 2 3 1 | 和 0 3 2 1 |
假设我有整数数组列表...有没有一种方法可以生成数组列表中元素的随机排列/排列 所以如果列表是 {1,2,3,4,5,6} 调用一些方法 randomPermute() 会把它变成随机的东西,比如 {
为什么此代码注释有效(代码编译并运行良好,但实际上并未显示排列): int main(int argc, char *argv[]) { long number; vector int
我正在开发一个模块化 Maven 项目。我的项目的框架如下: |-- parent |-- model --pom.xml |-- services -
随机(但重复)置换 Java 字节数组中所有位的最快方法是什么?我试过用 BitSet 成功地做到了,但是有更快的方法吗?显然,for 循环消耗了大部分 CPU 时间。 我刚刚在我的 IDE 中做了一
假设我有一个 int T 数组,我正在寻找一种置换 i 和 T[i] 的就地算法 我有:[3 2 0 1] (a) 我想要:[2 3 1 0] (b) 例如。在 (b) 中 T[0] = 2 因为在
我有以下问题: 在 __m128i寄存器有 16 个 8 位值,按以下顺序排列: [ 1, 5, 9, 13 ] [ 2, 6, 10, 14] [3, 7, 11, 15] [4, 8, 12,
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
我有一个 arma::cube mycube(5,10,15); 我想排列它的尺寸,就像在 matlab 中做的那样: mycube = ones(5,10,15); mycube = permute
假设 100 人围成一圈。从第 1 人数到第 14 人,将此人移出圈子。按照数数顺序,再次数数,去掉第 14 个人。重复。最后站着的是谁? 我已经尝试了一切来解决这个问题,但它似乎无法处理死循环。
我对使用 C 代码置换 d 维张量的元素很感兴趣(因此,只使用循环),我想用 d 作为参数编写函数。张量数据目前包含在“d 维”指针中(例如,当 d = 1 时的简单数组)。到目前为止,我已经用 **
我正在尝试为网站上的图像创建 rgb 偏移效果。我有基本的功能,但问题是 channel 被纹理的 uv 偏移了。因此,如果图像大小不同,则每个图像的偏移量在视觉上并不相同。 这是我的片段着色器。 u
我正在开发一个由 SQLite 数据库支持的 C++ 程序。该数据库包含文档表、文档元素和文档边界(即位于文档边界上的文档元素集)。文档是在运行时创建的。 该程序支持合并文档的基本操作,它使用源文档中
假设您有一个 std::vector某种类型的T和一系列指数 std::vector这个 vector 。现在我正在寻找一个函数 permute(const std::vector& vector,
我正在尝试用 替换我的表结构标签。但是前导订单号和内容之间总是存在位移/偏移。 A Name An Icon 我不知道要更改什么。当我使用
这个问题与这个question有关可能到this other 假设您有两个矩阵 A 和 B。A 是 M×N,B 是 N×K。我想获得一个 M×K 矩阵 C 使得 C(i, j) = 1 - prod(
我是一名优秀的程序员,十分优秀!