我正在运行spBayes以适应'偏移'模型y~1。
我有一个像这样的数据框
ID lon lat y
1 A 90.0 5.9 0.957096100
2 A 90.5 6.0 0.991374969
3 A 91.1 6.0 0.991374969
4 A 92.7 6.1 0.913501740
5 A 94.0 6.1 0.896575928
6 A 97.8 5.2 0.631320953
7 A 98.9 4.4 -0.282432556
8 A 101.2 2.8 1.829053879
9 A 102.3 2.0 0.993621826
10 A 105.8 0.5 0.038677216
其中变量ID是具有两个级别A和B的因子。我想找到两个ID的偏移量。但是,当我跑
时fit.by.ALL <- spLM(formula=y ~ ID, data= df, coords=coords,
priors=priors, tuning=tuning, starting=starting,
cov.model = "exponential", n.samples = n.samples, verbose = TRUE,
n.report = 50)
给出结果
Iterations = 1:251
Thinning interval = 1
Number of chains = 1
Sample size per chain = 251
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
(Intercept) 1.0736 2.8674 0.18099 0.18099
IDB -0.9188 0.1922 0.01213 0.01213
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
(Intercept) -4.952 -0.773 1.1059 3.0165 6.4824
IDB -1.303 -1.048 -0.9284 -0.7679 -0.5795
结果不喜欢非常稳定,因为每次运行它都会不断变化。
此外,要找到ID B的最终偏移量,我需要将(截取)平均值添加到IDB均值中,它对SD有什么作用?
为两个ID单独运行spLM公式(y~1而不是y~ID)会更好吗?
由于
答案 0 :(得分:1)
我不清楚你的意思&#34;适合偏移模型y~1&#34;。当我读到这篇文章时,我认为你想要一个只有拦截的模型,但是进一步阅读它表明你想要一个模型,你可以用这个模型来估算两组的平均值,这可以用
来完成。y ~ 0+ID # manually remove the intercept,
回答你的问题:
结果并不是很稳定,因为它每次都在不断变化 我跑了。
您没有使用很多次迭代。尝试运行更多迭代。通过足够的迭代,结果应该是稳定的。
此外,要找到ID B的最终偏移量,我需要将(截取)平均值添加到IDB均值中,它对SD有什么作用?
同样,我不确定你的偏移是什么意思,但如果你的意思是你想要A组和B组之间的平均值差异,这就是你在IDB开头的那一行。也就是说,-0.9188是B组和A组之间平均值的估计差异,即B组平均值估计比B组平均值小0.9188,SD是后标准偏差。
如果您对B组的意思感兴趣,那么您必须将(拦截)添加到IDB,但您不能简单地添加SD。这里有两个选项:1)使用适当的设计矩阵(上面的代码中为X
)直接获得所需的参数估计值;或2)获取MCMC样本并计算(截距)和IDB参数的总和对于每次迭代,然后采用这些总和的均值和标准差。
为两个ID单独运行spLM公式(y~1而不是y~ID)会更好吗?
如果单独运行它们,那么您将分别估算空间参数。如果两个不同组中的空间参数不同,则单独运行它们会很有意义。如果它们是相同的(或类似的)那么将两个组合在一起可能更有意义,这样你就可以“借用信息”#34;关于这两组之间的空间参数。