2017-12-13 33 views
1

私はRにはかなり新しく、かなり基本的なアプリケーションに使用されています。 今、私は助けが必要な問題が発生している:私はすでに(私の推定はthis例に似ている)私は注文したロジスティック回帰ためクラスタ標準誤差への道を探しています順序付けられたロジットのクラスタ標準エラー推定で削除されたR個のポーラー値

robcovvcovCLを試してみましたが、彼らは私に似たエラーメッセージを与える:meatCLで

  • エラー(X、CLクラスタ内の観測値の と一致しない
  • u [、ii]のエラー< - ui:置き換えられるアイテムの数は次のとおりです。交換長の倍数ではありません

事前に感謝します!

編集: 欠落値に関する詳細をいくつか見つけましたが、それは問題のようです - this答えを使用して回避するか、NAなしのデータセットを使用しても問題は解決しません。下の例のように。問題は、polrが私に出力の一部として残差を与えていないということです。これを回避するにはどうしたらいいですか?

dat <- read.dta("https://stats.idre.ucla.edu/stat/data/ologit.dta") 
    length(dat$apply) 
    twenty <- seq(from=1, to=20, by=1) 
    dat$clustervar<-sample(twenty, size=400, replace=TRUE) 



    m <- polr(apply ~ pared + public + gpa, data = dat, Hess=TRUE) 
    vcovCL <- function(x, cluster.by, type="sss", dfcw=1){ 
     # R-codes (www.r-project.org) for computing 
     # clustered-standard errors. Mahmood Arai, Jan 26, 2008. 

     # The arguments of the function are: 
     # fitted model, cluster1 and cluster2 
     # You need to install libraries `sandwich' and `lmtest' 

     # reweighting the var-cov matrix for the within model 
     require(sandwich) 
     cluster <- cluster.by 
     M <- length(unique(cluster)) 
     N <- length(cluster) 
     stopifnot(N == length(x$residuals)) 
     K <- x$rank 
     ##only Stata small-sample correction supported right now 
     ##see plm >= 1.5-4 
     stopifnot(type=="sss") 
     if(type=="sss"){ 
     dfc <- (M/(M-1))*((N-1)/(N-K)) 
     } 
     uj <- apply(estfun(x), 2, function(y) tapply(y, cluster, sum)) 
     mycov <- dfc * sandwich(x, meat=crossprod(uj)/N) * dfcw 
     return(mycov) 
    } 
    vcovCL(dat, m, dat$clustervar) 

これは私を与える:

Error: N == length(x$residuals) is not TRUE 
Called from: vcovCL(dat, m, dat$clustervar) 
+0

であるRの「注文したロジスティック回帰」の多くの実装があります。あなたの質問を編集して、必要なライブラリを基本パッケージの上にロードし、データセットにアクセスしたコード(おそらくそれらのパッケージの1つの例の1つ)にアクセスし、分析を実行しようとするコードを含めるように要求されています。 –

+0

(私は他の質問に答えて、それほどうまく提示されていない質問を閉じようとしました)。はい、欠落は、少なくともvcocCLの見積もりを悪化させます。回帰のための欠けているデータを取り出すことは、賢明なアプローチであるように思われる。 –

+0

ご意見ありがとうございます。質問をより適切に説明しようとしました。また、私は他の質問に対する答えを見落としたと言います。私はそれが私が探していた答えではないと言っていたはずです。 – OuVaLeMonde

答えて

0

私はのためのヘルプページ次の成功を持っていたサンドイッチ::関数の最初の引数は、モデルオブジェクトであることを示しているvcovCL?。あなたはワルドテストをしたい場合は、その行列のdiagを使用する必要があります

m <- polr(apply ~ pared + public + gpa, data = dat, Hess=TRUE) 
(clval <- sandwich::vcovCL(m, dat$clustervar)) 
            pared  public   gpa unlikely|somewhat likely 
pared      0.085218306 0.005588259 0.04584255    0.15545404 
public      0.005588259 0.092283173 -0.01890725    -0.05875859 
gpa       0.045842552 -0.018907254 0.07067573    0.22455931 
unlikely|somewhat likely 0.155454041 -0.058758588 0.22455931    0.72408670 
somewhat likely|very likely 0.165079639 -0.058282514 0.23631756    0.75713049 
          somewhat likely|very likely 
pared          0.16507964 
public          -0.05828251 
gpa           0.23631756 
unlikely|somewhat likely      0.75713049 
somewhat likely|very likely     0.80749182 

:あなたが提供する機能をマスクする::演算子を使用する必要がありました。私はそれがcoeftestがお届けします何だと思う:

coeftest(m, vcov = clval) 

t test of coefficients: 

     Estimate Std. Error t value Pr(>|t|)  
pared 1.047690 0.291922 3.5889 0.0003738 *** 
public -0.058786 0.303781 -0.1935 0.8466565  
gpa  0.615941 0.265849 2.3169 0.0210210 * 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Rhelpの成功した検索を促したとアヒム・Zeileisで答えを見つけ、他の質問はhere

+0

偉大な、これは問題を解決!ご助力ありがとうございます! – OuVaLeMonde

関連する問題