我有一个由单个变量组成的数据集,该变量恰好被删除(审查点为0)。我认为潜在变量(即在发生审查之前的变量)或多或少遵循正态分布。我怎样才能 - 使用R - 找到这个分布的参数?
考虑到R-packages的丰富,我很惊讶我找不到任何可以轻易解决手头问题的东西。从名称来看,fitdistrplus-package中的 fitdistcens -function可能在此上下文中很有用。但如果我正确阅读文档 - 我怀疑 - 该函数需要两列,其中一列应包含未经审查的数据:
censdata 两列的数据框,分别命名为left和right,将每个观察值描述为间隔。左栏包含用于左删失观察的NA,用于区间删失观察的间隔的左边界,或用于非删失观察的观察值。右栏包含用于右删失观察的NA,用于区间删失观察的间隔的右边界,或用于非删失观察的观察值。
这是否意味着该功能不能用于我的目的?如果有的话有什么替代方案?
非常感谢帮助(可能涉及一个例子)。
答案 0 :(得分:0)
我写了大量的R代码,似乎可以完成这项任务:
#Set censoring point
a<-0
#Generate random censored data
x<-rnorm(1000,-1,2)
x[x<a]<-a
length(which(x>a))
#Log-likelihood function
ll<-function(u=0,s=1){
-sum(pnorm(a,mean=u,sd=s,log=TRUE)*(x==a)+dnorm(x,mean=u,sd=s,log=TRUE)*(x>a))
}
#Run MLE - change initiation values (u and s)
require("stats4")
est<-mle(ll,start=list(u=0,s=1),,method="L-BFGS-B",lower = c(-Inf, 0))
#Show fit
plot.ecdf(x)
xplot<-seq(from=a,to=max(x),length=100)
lines(xplot,pnorm(xplot,mean=est@coef[1],sd=est@coef[2]),col="green")
答案 1 :(得分:0)
我遇到了同样的事情,我相信你必须在观察被审查时指定右侧的最小值和左侧的NA。
例如,这里的模拟显示了很多:
library(fitdistrplus)
# These are the actual parameters of the right-censored, normal distribution to be fit
mu <- 10; sd <- 10;
# Number of samples to use
n <- 100000;
# Minimum value to censor at
x.min <- 0
# Create the sample to fit
x <- rnorm(n, p1, p2)
d <- data.frame(
left= ifelse(x <= x.min, NA, x), # Assign left side as NA when censored
right=ifelse(x <= x.min, x.min, x) # Assign right side as x.min when censored
)
fitdistcens(d, 'norm')
# Fitting of the distribution ' norm ' on censored data by maximum likelihood
# Parameters:
# estimate
# mean 10.01450
# sd 10.00456