我希望提取R中的anova生成的p值.
这是我正在运行的:
test <- aov(asq[,9] ~ asq[,187])
summary(test)
Run Code Online (Sandbox Code Playgroud)
产量:
Df Sum Sq Mean Sq F value Pr(>F)
asq[, 187] 1 3.02 3.01951 12.333 0.0004599 ***
Residuals 1335 326.85 0.24483
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
12 observations deleted due to missingness
Run Code Online (Sandbox Code Playgroud)
当我看到结构时,这就是我所看到的.我通常可以通过列表来获得我需要的东西,但是我很难用这个.谷歌搜索也似乎揭示了比我更简单的结构.
注意:ASQ是我的数据框架.
str(test)
List of 13
$ coefficients : Named num [1:2] 0.2862 0.0973
..- attr(*, "names")= chr [1:2] "(Intercept)" "asq[, 187]"
$ residuals : Named num [1:1337] 0.519 0.519 …
Run Code Online (Sandbox Code Playgroud) 我想使用Pandas数据帧来分解一个变量的方差.
例如,如果我有一个名为'Degrees'的列,并且我已将其编入索引以适应各种日期,城市和夜晚与日期,我想找出该系列中变体的哪一部分来自横截面城市变化,来自时间序列变化的变化多少,以及从夜晚到白天变化多少.
在Stata我会使用固定效果并查看R ^ 2.希望我的问题有道理.
基本上,我想要做的是找到其他三列的"度数"的ANOVA细分.
想象一下,您有一组五个元素(AE),其中包含一些测量属性的数值(每个元素有几个观察值,例如"心率"):
A = {100, 110, 120, 130}
B = {110, 100, 110, 120, 90}
C = { 90, 110, 120, 100}
D = {120, 100, 120, 110, 110, 120}
E = {110, 120, 120, 110, 120}
Run Code Online (Sandbox Code Playgroud)
首先,我必须检测平均水平是否存在显着差异.所以我使用Apache Commons Math提供的统计软件包运行单向ANOVA.到目前为止没有问题,我获得了一个布尔值,告诉我是否找到差异.
其次,如果发现差异,我需要知道与其余元素不同的元素(或元素).我计划使用不成对的t检验,比较每对元素(A与B,A与C .... D与E),以了解元素是否与另一元素不同.所以,在这一点上,我有与其他元素列出显着差异的元素列表的信息,例如:
C is different than B
C is different than D
Run Code Online (Sandbox Code Playgroud)
但我需要一个通用算法来有效地确定哪些元素与其他元素不同(在示例中为C,但可能不止一个).
抛开统计问题,问题可能是(一般而言):"鉴于集合中每个元素对的相等/不等的信息,你如何确定与元素不同的元素?其他?"
似乎是一个可以应用图论的问题.我正在使用Java语言进行实现,如果这很有用的话.
编辑:元素是人,测量值是完成任务所需的时间.我需要检测谁在某种欺诈检测系统中花费太多或太少的时间来完成任务.
我一直在使用var.test
和bartlett.test
检查基本的方差分析假设,其中包括同质性(同质性,方差等式).单因素方差分析的程序非常简单:
bartlett.test(x ~ g) # where x is numeric, and g is a factor
var.test(x ~ g)
Run Code Online (Sandbox Code Playgroud)
但是,对于2x2表,即双向ANOVA,我想做这样的事情:
bartlett.test(x ~ c(g1, g2)) # or with list; see latter:
var.test(x ~ list(g1, g2))
Run Code Online (Sandbox Code Playgroud)
当然,可以使用图形化程序检查ANOVA假设,但是"算术选项"呢?这根本就是可管理的吗?你如何在双因素方差分析中测试同性恋?
我已经提到了许多在线文献,但它增加了我的困惑.许多讨论过于技术化,术语设计不平衡,I,II或III因子ANOVA和一切.
我只知道内部aov()
使用lm()
,对有数据的数据很有用.而anova()
可以用于同一数据集上的不同模型.我的理解是否正确?
我正在尝试使用R运行重复测量方差分析.我已经在各种网站上浏览了各种各样的例子,但他们似乎从来没有谈过我遇到的错误.我认为我误解了一些重要的事情.
我试图运行的ANOVA是来自使用人类参与者的实验的一些数据.它有一个DV和三个IV.所有IV的所有水平都在所有参与者上运行,使其成为三向重复测量/受试者内部ANOVA.
我在R中运行的代码如下:
aov.output = aov(DV~ IV1 * IV2 * IV3 + Error(PARTICIPANT_ID / (IV1 * IV2 * IV3)),
data=fulldata)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下警告:
Error() model is singular
Run Code Online (Sandbox Code Playgroud)
我有什么想法可能做错了吗?
我一直在研究使用计划对比而不是事后t检验.我通常使用ezANOVA
(Type III ANOVA),但似乎ezANOVA
目前没有提供进行计划对比的使用.
aov()
另一方面是I型ANOVA(我不想讨论哪种类型最适合哪种类型的设计).使用aov()
(在组设计之间)进行计划对比是直截了当的,但我希望在重复测量中进行III型方差分析并且坦率地ezANOVA
具有更加用户友好的输出.
请记住ezANOVA
,return_aov = TRUE
是否有人知道如何使用提供的信息ezANOVA
进行计划对比?
注意: return_aov = TRUE
允许aov
通过以下行中的某些内容访问输出:
summary.lm(ModelName$aov$'Participant:IndependentVariable1')
Run Code Online (Sandbox Code Playgroud)
以上参与者被添加到例如变量wid
中ezANOVA
:
wid = .(Participant)
Run Code Online (Sandbox Code Playgroud)
summary.lm()
通常在呈现计划对比的结果时使用aov
,在组间ANOVA之间授予,而不是重复测量.
我特别感兴趣的是使用输出来进行重复测量ANOVA的计划对比.
BOUNTY GOALS
我希望从这个奖励中实现的目标:
1)使用输出ezANOVA
以重复测量ANOVA进行计划对比.
1A)使用输出ezANOVA
来对主题ANOVA进行计划对比(这个应该相对容易,因此不是要求赏金的必要条件.)
任何虚拟数据都应该足够了,但这里提醒ezANOVA
重复测量ANOVA 的格式:
ModelName <- ezANOVA(
data = DataSet,
dv = .(DependentVariable),
wid = .(Participant),
within = .(IndependentVariable1, IndependentVariable2),
type=3,
detailed = TRUE,
return_aov = TRUE)
Run Code Online (Sandbox Code Playgroud)
这是一个 …
aov(depvar~timevar+Error(id))
和aov(depvar~timevar+Error(id/timevar))
配方规格有什么区别?这两种变体产生略微不同的结果.
这里曾经问过同样的问题:https://stats.stackexchange.com/questions/60108/how-to-write-the-error-term-in-repeated-measures-anova-in-r 然而,我是喜欢用更恰当的例子重复它.
这是我创建的一个示例:
var=rep(NA,180)
id=rep(1:20,each=180/20)
group=rep(rep(1:2,each=9),180/(9*2))
time1=rep(rep(1:3,each=3),180/(3*3))
time2=rep(c(8,15,20),180/3)
var[group==1&time1==1&time2==8]=runif(10,105,115)
var[group==2&time1==1&time2==8]=runif(10,105,115)
var[group==1&time1==1&time2==15]=runif(10,95,105)
var[group==2&time1==1&time2==15]=runif(10,95,105)
var[group==1&time1==1&time2==20]=runif(10,85,95)
var[group==2&time1==1&time2==20]=runif(10,85,95)
var[group==1&time1==2&time2==8]=runif(10,95,105)
var[group==2&time1==2&time2==8]=runif(10,95,105)
var[group==1&time1==2&time2==15]=runif(10,85,95)
var[group==2&time1==2&time2==15]=runif(10,75,85)
var[group==1&time1==2&time2==20]=runif(10,75,85)
var[group==2&time1==2&time2==20]=runif(10,65,75)
var[group==1&time1==3&time2==8]=runif(10,95,105)
var[group==2&time1==3&time2==8]=runif(10,95,105)
var[group==1&time1==3&time2==15]=runif(10,85,95)
var[group==2&time1==3&time2==15]=runif(10,75,85)
var[group==1&time1==3&time2==20]=runif(10,75,85)
var[group==2&time1==3&time2==20]=runif(10,65,75)
df=data.frame(id,var,group,time1,time2)
df$id=factor(df$id)
df$group=factor(df$group)
df$time1=factor(df$time1)
df$time2=factor(df$time2)
Run Code Online (Sandbox Code Playgroud)
对此执行aov()会得到略有不同的结果,具体取决于Error()术语规范:
只有一个时期:
> summary(aov(var~time1+Error(id),data=df))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 19 958.4 50.44
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7538 3769 30.41 6.72e-12 ***
Residuals 158 19584 124
> summary(aov(var~time1+Error(id/time1),data=df))
Error: …
Run Code Online (Sandbox Code Playgroud) 我创建了两个广义线性模型如下:
glm1 <-glm(Y ~ X1 + X2 + X3, family=binomial(link=logit))
glm2 <-glm(Y ~ X1 + X2, family=binomial(link=logit))
Run Code Online (Sandbox Code Playgroud)
然后我使用该anova
功能:
anova(glm2,glm1)
Run Code Online (Sandbox Code Playgroud)
但得到一条错误信息:
"anova.glmlist中的错误(c(list(object),dotargs),dispersion = dispersion,:
模型并非都适合相同大小的数据集"
这是什么意思,我该如何解决这个问题?我attach
在代码的开头编辑了数据集,因此两个模型都使用相同的数据集.
自定义对比在分析中被广泛使用,例如:"这三级因子的1级和3级DV值是否显着不同?"
直观地说,这种对比用细胞方式表示为:
c(1,0,-1)
Run Code Online (Sandbox Code Playgroud)
这些对比中的一个或多个(作为列绑定)形成对比系数矩阵,例如
mat = matrix(ncol = 2, byrow = TRUE, data = c(
1, 0,
0, 1,
-1, -1)
)
[,1] [,2]
[1,] 1 0
[2,] 0 1
[3,] -1 -1
Run Code Online (Sandbox Code Playgroud)
然而,当涉及运行系数矩阵指定的这些对比时,在网络和书籍中存在许多(显然是矛盾的)信息.我的问题是哪些信息是正确的?
在一些示例中,示出了用户可以通过一个contrasts()
或多个C()
函数直接使用直观对比度系数矩阵.所以它很简单:
contrasts(myFactor) <- mat
Run Code Online (Sandbox Code Playgroud)
在其他地方(例如UCLA统计数据),我们被告知系数矩阵(或基础矩阵)必须在使用前从系数矩阵转换为对比矩阵.这包括采用系数矩阵变换的逆:(mat')?¹
或者,在Rish中:
contrasts(myFactor) = solve(t(mat))
Run Code Online (Sandbox Code Playgroud)
该方法需要用矩阵填充矩阵,用于截距.为了避免这种情况,一些网站建议使用可以处理非方形矩阵的广义逆函数,即MASS::ginv()
contrasts(myFactor) = ginv(t(mat))
Run Code Online (Sandbox Code Playgroud)
在其他地方(例如来自SPSS支持的说明),我们学习正确的代数是:(mat'mat)-¹ mat'
告诉我,创建对比矩阵的正确方法应该是:
x = solve(t(mat)%*% mat)%*% t(mat)
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 -1 …
Run Code Online (Sandbox Code Playgroud)