В настоящее время я пытаюсь выполнить анализ MaxDiff для R. Я нашел пример того, как выполнить такой анализ для R, и я пытаюсь использовать подобный код в своем собственном наборе данных (который в настоящее время является ограниченное количество судебных наблюдений).
Все идет гладко, пока я не достигну этой точки
#Computing individual-level ranks from counts
set.seed(0) # setting the random number seed to enhance comparability
indidualCountsNoTies = individualCounts + matrix(runif(n * nAlternatives)/100000, n) #adding random numbers to break ties
ranks = nAlternatives + 1 - apply(indidualCountsNoTies,1,rank) #ranks
rankProportions = t(apply(ranks,1,table) / n * 100)
Error in apply(ranks, 1, table)/n : non-numeric argument to binary operator
Запустив только
t(apply(ranks,1,table))
Я заметил, что результат фактически не матрица, а это. Однако я понятия не имею, почему это так.
SerCli Recensioni Spedizione SafePay EasyBuy Garanzia Prezzo
[1,] Integer,6 Integer,7 Integer,5 Integer,7 Integer,5 Integer,6 Integer,7
Это все предыдущие шаги, которые я делаю, которые, кажется, работают нормально
itData = read.spss("C:\\Users\\ricro\\Desktop\\test.sav", use.value.labels = FALSE, to.data.frame = TRUE)
# Selecting the variables containing the max-diff data
z = itData[,-1:-17]
# stacking the data (one set per row)
alternativeNames = c("SerCli","Recensioni","Spedizione","SafePay","EasyBuy","Garanzia","Prezzo")
nAlternatives = length(alternativeNames)
nBlocks = ncol(z) / nAlternatives
nAltsPerSet = 3
n = nrow(z)
nObservations = n * nBlocks
itMaxDiffData = matrix(as.numeric(t(z)),ncol = nAlternatives,byrow = TRUE,
dimnames = list(1:nObservations, alternativeNames))
#Computing overall counts
counts = apply(itMaxDiffData, 2, mean, na.rm = TRUE)
ranks = nAlternatives + 1 - rank(counts)
cbind(Counts = counts, Ranks = ranks)
#Computing individual-level counts
id = rep(1:n,rep(nBlocks,n))
individualCounts = aggregate(itMaxDiffData,list(id),mean, na.rm = TRUE)[,-1]
round(individualCounts[1:10,],1) #show data for first 10 respondents
Как ни странно, эта ошибка возникает только при запуске кода с использованием моего собственного файла .sav, тогда как при использовании примера данных, поставляемых с кодом, этого не происходит, даже если я вручную редактирую некоторые его части. Это заставляет меня думать, что ошибка может исходить из структуры моего файла SPSS, но я действительно не уверен в этом.
Заранее спасибо!
РЕДАКТИРОВАТЬ: однажды загруженная в R и преобразованная в работоспособную матрицу, это набор данных, с которым я работаю
SerCli Recensioni Spedizione SafePay EasyBuy Garanzia Prezzo
1 1 0 -1 NA NA NA NA
2 -1 NA NA 1 0 NA NA
3 0 NA NA NA NA 1 -1
4 NA 0 NA -1 NA 1 NA
5 NA 1 NA NA -1 NA 0
6 NA NA 1 0 NA NA -1
7 -1 NA NA NA 1 0 NA
8 1 -1 0 NA NA NA NA
9 0 NA NA -1 1 NA NA
10 0 NA NA NA NA -1 1
11 NA -1 NA 0 NA 1 NA
12 NA -1 NA NA 1 NA 0
13 NA NA 1 0 NA NA -1
14 0 NA NA NA 1 -1 NA
15 0 -1 1 NA NA NA NA
16 0 NA NA -1 1 NA NA
17 0 NA NA NA NA 1 -1
18 NA 1 NA 0 NA -1 NA
19 NA 0 NA NA 1 NA -1
20 NA NA 1 0 NA NA -1
21 0 NA NA NA 1 -1 NA
22 1 -1 0 NA NA NA NA
23 1 NA NA -1 0 NA NA
24 1 NA NA NA NA 0 -1
25 NA 1 NA -1 NA 0 NA
26 NA -1 NA NA 0 NA 1
27 NA NA 1 -1 NA NA 0
28 1 NA NA NA 0 -1 NA
29 -1 1 0 NA NA NA NA
30 0 NA NA -1 1 NA NA
31 -1 NA NA NA NA 0 1
32 NA 1 NA -1 NA 0 NA
33 NA 0 NA NA -1 NA 1
34 NA NA 0 -1 NA NA 1
35 0 NA NA NA 1 -1 NA
36 1 0 -1 NA NA NA NA
37 0 NA NA 1 -1 NA NA
38 1 NA NA NA NA -1 0
39 NA 0 NA 1 NA -1 NA
40 NA 1 NA NA 0 NA -1
41 NA NA -1 1 NA NA 0
42 1 NA NA NA -1 0 NA
43 -1 1 0 NA NA NA NA
44 -1 NA NA 0 1 NA NA
45 0 NA NA NA NA 1 -1
46 NA 1 NA -1 NA 0 NA
47 NA 0 NA NA -1 NA 1
48 NA NA 1 0 NA NA -1
49 1 NA NA NA 0 -1 NA
50 1 -1 0 NA NA NA NA
51 0 NA NA 1 -1 NA NA
52 0 NA NA NA NA 1 -1
53 NA 1 NA 0 NA -1 NA
54 NA 1 NA NA -1 NA 0
55 NA NA 1 -1 NA NA 0
56 1 NA NA NA 0 -1 NA
57 0 1 -1 NA NA NA NA
58 0 NA NA 1 -1 NA NA
59 -1 NA NA NA NA 1 0
60 NA 1 NA -1 NA 0 NA
61 NA 1 NA NA 0 NA -1
62 NA NA 0 -1 NA NA 1
63 1 NA NA NA -1 0 NA
64 0 1 -1 NA NA NA NA
65 -1 NA NA 1 0 NA NA
66 0 NA NA NA NA 1 -1
67 NA -1 NA 1 NA 0 NA
68 NA -1 NA NA 0 NA 1
69 NA NA 0 -1 NA NA 1
70 1 NA NA NA 0 -1 NA
71 -1 1 0 NA NA NA NA
72 -1 NA NA 0 1 NA NA
73 1 NA NA NA NA -1 0
74 NA 0 NA 1 NA -1 NA
75 NA -1 NA NA 0 NA 1
76 NA NA 1 -1 NA NA 0
77 1 NA NA NA -1 0 NA
78 0 -1 1 NA NA NA NA
79 0 NA NA 1 -1 NA NA
80 1 NA NA NA NA 0 -1
81 NA 0 NA 1 NA -1 NA
82 NA 1 NA NA -1 NA 0
83 NA NA 1 -1 NA NA 0
84 1 NA NA NA -1 0 NA
85 0 1 -1 NA NA NA NA
86 -1 NA NA 1 0 NA NA
87 0 NA NA NA NA -1 1
88 NA 1 NA 0 NA -1 NA
89 NA 1 NA NA -1 NA 0
90 NA NA -1 1 NA NA 0
91 0 NA NA NA 1 -1 NA
92 1 -1 0 NA NA NA NA
93 0 NA NA 1 -1 NA NA
94 1 NA NA NA NA -1 0
95 NA 1 NA 0 NA -1 NA
96 NA -1 NA NA 0 NA 1
97 NA NA 1 -1 NA NA 0
98 1 NA NA NA -1 0 NA
Это матрица ranks
, которую я пытаюсь выполнить apply
на
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
SerCli 6 3 4 1 6 2 5 1 3 5 6 2 5 1
Recensioni 2 7 3 5 2 3 1 3 1 6 5 4 1 5
Spedizione 4 2 2 2 4 7 2 2 6 7 1 1 7 2
SafePay 3 5 6 7 7 1 6 4 5 2 3 3 2 4
EasyBuy 5 1 1 4 3 5 4 7 7 4 4 7 4 7
Garanzia 1 6 5 6 5 6 3 5 2 3 7 6 6 6
Prezzo 7 4 7 3 1 4 7 6 4 1 2 5 3 3
РЕДАКТИРОВАТЬ # 2
Хорошо, мы добираемся туда. Просто пара вещей, в надежде наконец решить это. На самом деле я не загружал tidyverse
, и ранее определил n
как n <- nrow(z)
, то есть количество наблюдений из набора данных. Во всяком случае, вот вывод для dput(ranks)
structure(c(6, 2, 4, 3, 5, 1, 7, 3, 7, 2, 5, 1, 6, 4, 4, 3, 2,
6, 1, 5, 7, 1, 5, 2, 7, 4, 6, 3, 6, 2, 4, 7, 3, 5, 1, 2, 3, 7,
1, 5, 6, 4, 5, 1, 2, 6, 4, 3, 7, 1, 3, 2, 4, 7, 5, 6, 3, 1, 6,
5, 7, 2, 4, 5, 6, 7, 2, 4, 3, 1, 6, 5, 1, 3, 4, 7, 2, 2, 4, 1,
3, 7, 6, 5, 5, 1, 7, 2, 4, 6, 3, 1, 5, 2, 4, 7, 6, 3), .Dim = c(7L,
14L), .Dimnames = list(c("SerCli", "Recensioni", "Spedizione",
"SafePay", "EasyBuy", "Garanzia", "Prezzo"), NULL))